ETH Price: $3,333.96 (-3.38%)

Token

Meta Moguls (MOGUL)
 

Overview

Max Total Supply

0 MOGUL

Holders

316

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 MOGUL
0xf52e8512634716fbefa151c999dab5a3a4b54d1b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MetaMogulsV2

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-14
*/

// Sources flattened with hardhat v2.8.4 https://hardhat.org
// SPDX-License-Identifier: MIT

// File @openzeppelin/contracts/utils/introspection/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File @openzeppelin/contracts/token/ERC721/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File @openzeppelin/contracts/token/ERC721/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File @openzeppelin/contracts/utils/introspection/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File @openzeppelin/contracts/token/ERC721/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: balance query for the zero address"
        );
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        address owner = _owners[tokenId];
        require(
            owner != address(0),
            "ERC721: owner query for nonexistent token"
        );
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, tokenId.toString()))
                : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer from incorrect owner"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

// File @openzeppelin/contracts/interfaces/[email protected]

// OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)

pragma solidity ^0.8.0;

// File @openzeppelin/contracts/interfaces/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/IERC2981.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface for the NFT Royalty Standard.
 *
 * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
 * support for royalty payments across all NFT marketplaces and ecosystem participants.
 *
 * _Available since v4.5._
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be payed in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

// File @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File @openzeppelin/contracts/security/[email protected]

// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File @openzeppelin/contracts/security/[email protected]

// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File @openzeppelin/contracts/utils/math/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File hardhat/[email protected]

pragma solidity >=0.4.22 <0.9.0;

library console {
    address constant CONSOLE_ADDRESS =
        address(0x000000000000000000636F6e736F6c652e6c6f67);

    function _sendLogPayload(bytes memory payload) private view {
        uint256 payloadLength = payload.length;
        address consoleAddress = CONSOLE_ADDRESS;
        assembly {
            let payloadStart := add(payload, 32)
            let r := staticcall(
                gas(),
                consoleAddress,
                payloadStart,
                payloadLength,
                0,
                0
            )
        }
    }

    function log() internal view {
        _sendLogPayload(abi.encodeWithSignature("log()"));
    }

    function logInt(int256 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(int)", p0));
    }

    function logUint(uint256 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
    }

    function logString(string memory p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string)", p0));
    }

    function logBool(bool p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
    }

    function logAddress(address p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(address)", p0));
    }

    function logBytes(bytes memory p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
    }

    function logBytes1(bytes1 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
    }

    function logBytes2(bytes2 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
    }

    function logBytes3(bytes3 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
    }

    function logBytes4(bytes4 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
    }

    function logBytes5(bytes5 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
    }

    function logBytes6(bytes6 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
    }

    function logBytes7(bytes7 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
    }

    function logBytes8(bytes8 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
    }

    function logBytes9(bytes9 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
    }

    function logBytes10(bytes10 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
    }

    function logBytes11(bytes11 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
    }

    function logBytes12(bytes12 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
    }

    function logBytes13(bytes13 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
    }

    function logBytes14(bytes14 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
    }

    function logBytes15(bytes15 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
    }

    function logBytes16(bytes16 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
    }

    function logBytes17(bytes17 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
    }

    function logBytes18(bytes18 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
    }

    function logBytes19(bytes19 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
    }

    function logBytes20(bytes20 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
    }

    function logBytes21(bytes21 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
    }

    function logBytes22(bytes22 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
    }

    function logBytes23(bytes23 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
    }

    function logBytes24(bytes24 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
    }

    function logBytes25(bytes25 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
    }

    function logBytes26(bytes26 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
    }

    function logBytes27(bytes27 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
    }

    function logBytes28(bytes28 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
    }

    function logBytes29(bytes29 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
    }

    function logBytes30(bytes30 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
    }

    function logBytes31(bytes31 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
    }

    function logBytes32(bytes32 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
    }

    function log(uint256 p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
    }

    function log(string memory p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string)", p0));
    }

    function log(bool p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
    }

    function log(address p0) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(address)", p0));
    }

    function log(uint256 p0, uint256 p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
    }

    function log(uint256 p0, string memory p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
    }

    function log(uint256 p0, bool p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
    }

    function log(uint256 p0, address p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
    }

    function log(string memory p0, uint256 p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
    }

    function log(string memory p0, string memory p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
    }

    function log(string memory p0, bool p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
    }

    function log(string memory p0, address p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
    }

    function log(bool p0, uint256 p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
    }

    function log(bool p0, string memory p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
    }

    function log(bool p0, bool p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
    }

    function log(bool p0, address p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
    }

    function log(address p0, uint256 p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
    }

    function log(address p0, string memory p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
    }

    function log(address p0, bool p1) internal view {
        _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
    }

    function log(address p0, address p1) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,address)", p0, p1)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        address p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        address p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        address p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        address p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        string memory p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        string memory p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        string memory p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        string memory p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        bool p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        bool p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        bool p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        bool p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        address p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        address p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        address p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)
        );
    }

    function log(
        string memory p0,
        address p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        string memory p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        string memory p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        string memory p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        string memory p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        bool p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        bool p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        bool p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        bool p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        address p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        address p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        address p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)
        );
    }

    function log(
        bool p0,
        address p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        uint256 p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        uint256 p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        uint256 p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        uint256 p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        string memory p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        string memory p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        string memory p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        string memory p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        bool p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        bool p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        bool p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        bool p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        address p1,
        uint256 p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        address p1,
        string memory p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        address p1,
        bool p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)
        );
    }

    function log(
        address p0,
        address p1,
        address p2
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        uint256 p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,uint,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        string memory p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,string,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)
        );
    }

    function log(
        uint256 p0,
        bool p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        bool p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,bool,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        uint256 p0,
        address p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(uint,address,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        uint256 p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,uint,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        string memory p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,string,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        bool p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,bool,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        string memory p0,
        address p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(string,address,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)
        );
    }

    function log(
        bool p0,
        uint256 p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        uint256 p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,uint,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        string memory p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,string,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)
        );
    }

    function log(
        bool p0,
        bool p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)
        );
    }

    function log(
        bool p0,
        bool p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)
        );
    }

    function log(
        bool p0,
        bool p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)
        );
    }

    function log(
        bool p0,
        bool p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        bool p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,bool,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        bool p0,
        address p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(bool,address,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        uint256 p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,uint,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        string memory p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,string,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        bool p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,bool,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        uint256 p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,uint,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        uint256 p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,uint,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        uint256 p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,uint,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        uint256 p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,uint,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        string memory p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,string,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        string memory p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,string,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        string memory p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,string,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        string memory p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,string,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        bool p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,bool,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        bool p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,bool,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        bool p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,bool,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        bool p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,bool,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        address p2,
        uint256 p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,address,uint)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        address p2,
        string memory p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,address,string)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        address p2,
        bool p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,address,bool)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }

    function log(
        address p0,
        address p1,
        address p2,
        address p3
    ) internal view {
        _sendLogPayload(
            abi.encodeWithSignature(
                "log(address,address,address,address)",
                p0,
                p1,
                p2,
                p3
            )
        );
    }
}

// File contracts/MetaMogulsV2.sol

pragma solidity ^0.8.0;

contract MetaMogulsV2 is ERC721, Ownable, ReentrancyGuard, Pausable {
    using Strings for uint256;

    string private baseURI;
    string public verificationHash;
    uint256 public maxNFTs;
    uint256 public PUBLIC_SALE_PRICE = 0.06 ether;
    bool public isPublicSaleActive;
    bool public REVEAL;

    IERC721 public oldContract;

    uint256 public currentSupply;
    uint256 public v1MintedSupply;

    // v2
    uint256[] public allMigratedTokens;
    mapping(uint256 => bool) public migratedTokensById;
    uint256[] private reserveTokenIdsMinted;

    // ============ ACCESS CONTROL/Function MODIFIERS ============

    modifier publicSaleActive() {
        require(isPublicSaleActive, "Public sale is not open");
        _;
    }

    modifier canMintNFTs(uint256 numberOfTokens) {
        require(
            currentSupply + numberOfTokens <= maxNFTs,
            "Not enough NFTs remaining to mint"
        );
        _;
    }

    modifier isCorrectPayment(uint256 price, uint256 numberOfTokens) {
        require(
            price * numberOfTokens == msg.value,
            "Incorrect ETH value sent"
        );
        _;
    }

    constructor(
        uint256 _maxNFTs1,
        string memory _baseURI,
        bool _isPublicSaleActive,
        bool _REVEAL,
        address _oldContract,
        uint256 _currentSupply,
        uint256 _initialReserveCount
    ) ERC721("Meta Moguls", "MOGUL") {
        maxNFTs = _maxNFTs1;
        baseURI = _baseURI;
        REVEAL = _REVEAL;
        isPublicSaleActive = _isPublicSaleActive;
        currentSupply = _currentSupply;
        v1MintedSupply = _currentSupply;

        // set v1 contract address
        if (_oldContract != address(0)) {
            oldContract = IERC721(_oldContract);
        }

        // mint reserved NFTs to team wallet for contests, etc.
        for (uint256 i = 1; i <= _initialReserveCount; i++) {
            if (i <= 5) {
                //first, mint the final 5 tokenIds reserved (1107-1111)
                uint256 tokenIdToMint = maxNFTs - (i - 1);
                _safeMint(msg.sender, tokenIdToMint);
                reserveTokenIdsMinted.push(tokenIdToMint);
            } else {
                // second, mint the next available 55 tokenIds
                uint256 tokenIdToMint = getNextTokenId();
                _safeMint(msg.sender, tokenIdToMint);
                reserveTokenIdsMinted.push(tokenIdToMint);
            }
            incrementCurrentSupply();
        }
    }

    // ============ PUBLIC READ-ONLY FUNCTIONS ============

    function getBaseURI() external view returns (string memory) {
        return baseURI;
    }

    function getLastTokenId() external view returns (uint256) {
        // minus 5 to compensate for reserved tokenIds 1107-1111
        return currentSupply - 5;
    }

    function getAllMigratedTokens() public view returns (uint256[] memory) {
        return allMigratedTokens;
    }

    function tokenHasBeenMigrated(uint256 tokenId) public view returns (bool) {
        require(
            tokenId <= v1MintedSupply,
            "Cannot check migration status of v2 NFT"
        );
        return migratedTokensById[tokenId];
    }

    function getReserveTokenIdsMinted() public view returns (uint256[] memory) {
        return reserveTokenIdsMinted;
    }

    function getCurrentMintedSupply() public view returns (uint256) {
        return currentSupply;
    }

    // ============ PRIVATE READ-ONLY FUNCTIONS ============

    function getNextTokenId() private view returns (uint256) {
        require(currentSupply < maxNFTs, "All NFTs have been minted");
        // minus 5 to compensate for reserved tokenIds 1107-1111
        return (currentSupply - 5) + 1;
    }

    // ============ PRIVATE WRITE FUNCTIONS ============
    function incrementCurrentSupply() private {
        require(currentSupply < maxNFTs, "All NFTs have been minted");
        currentSupply++;
    }

    // ============ PUBLIC FUNCTIONS ============

    function mint(uint256 numberOfTokens)
        external
        payable
        nonReentrant
        isCorrectPayment(PUBLIC_SALE_PRICE, numberOfTokens)
        publicSaleActive
        canMintNFTs(numberOfTokens)
        whenNotPaused
    {
        for (uint256 i = 0; i < numberOfTokens; i++) {
            uint256 tokenIdToMint = getNextTokenId();
            _safeMint(msg.sender, tokenIdToMint);
            incrementCurrentSupply();
        }
    }

    // ============ V2 MIGRATION FUNCTIONS ============

    function _ownsOldToken(address account, uint256 tokenId)
        private
        view
        returns (bool)
    {
        try oldContract.ownerOf(tokenId) returns (address tokenOwner) {
            return account == tokenOwner;
        } catch Error(
            string memory /*reason*/
        ) {
            return false;
        }
    }

    function claim(uint256 tokenId) external nonReentrant whenNotPaused {
        // require(!claimed[msg.sender], "NFT already claimed by this wallet");
        if (_ownsOldToken(msg.sender, tokenId)) {
            oldContract.transferFrom(msg.sender, address(this), tokenId);

            _safeMint(msg.sender, tokenId);
        }
    }

    function claimAll(uint256[] memory ownedTokens)
        external
        nonReentrant
        whenNotPaused
    {
        uint256 length = ownedTokens.length; // gas saving
        console.log("ownedTokens.length", length);
        for (uint256 i; i < length; i++) {
            uint256 tokenIdToMint = ownedTokens[i];
            console.log("tokenIdToMint", tokenIdToMint);
            require(
                tokenIdToMint <= v1MintedSupply,
                "Token ID must be minted on old contract"
            );

            if (_ownsOldToken(msg.sender, tokenIdToMint)) {
                oldContract.transferFrom(
                    msg.sender,
                    address(this),
                    tokenIdToMint
                );
                _safeMint(msg.sender, tokenIdToMint);
                allMigratedTokens.push(tokenIdToMint);
                migratedTokensById[tokenIdToMint] = true;
            }
        }
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_exists(tokenId), "Nonexistent token");
        if (REVEAL) {
            return
                string(
                    abi.encodePacked(baseURI, "/", tokenId.toString(), ".json")
                );
        } else {
            return baseURI;
        }
    }

    // ============ OWNER-ONLY ADMIN FUNCTIONS ============

    function setBaseURI(string memory _baseURI1) external onlyOwner {
        baseURI = _baseURI1;
    }

    function setMaxNFTsInTOTALCollection(uint256 _maxNFTs2) external onlyOwner {
        maxNFTs = _maxNFTs2;
    }

    function setPUBLIC_SALE_PRICEinEther(uint256 _PUBLIC_SALE_PRICE)
        external
        onlyOwner
    {
        PUBLIC_SALE_PRICE = _PUBLIC_SALE_PRICE;
    }

    function setREVEAL(bool _REVEAL) external onlyOwner {
        REVEAL = _REVEAL;
    }

    function setVerificationHash(string memory _verificationHash)
        external
        onlyOwner
    {
        verificationHash = _verificationHash;
    }

    function setIsPublicSaleActive(bool _isPublicSaleActive)
        external
        onlyOwner
    {
        isPublicSaleActive = _isPublicSaleActive;
    }

    function withdraw() public onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function withdrawTokens(IERC20 token) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(msg.sender, balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_maxNFTs1","type":"uint256"},{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"bool","name":"_isPublicSaleActive","type":"bool"},{"internalType":"bool","name":"_REVEAL","type":"bool"},{"internalType":"address","name":"_oldContract","type":"address"},{"internalType":"uint256","name":"_currentSupply","type":"uint256"},{"internalType":"uint256","name":"_initialReserveCount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"PUBLIC_SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEAL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allMigratedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ownedTokens","type":"uint256[]"}],"name":"claimAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllMigratedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMintedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserveTokenIdsMinted","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNFTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"migratedTokensById","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldContract","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI1","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPublicSaleActive","type":"bool"}],"name":"setIsPublicSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxNFTs2","type":"uint256"}],"name":"setMaxNFTsInTOTALCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PUBLIC_SALE_PRICE","type":"uint256"}],"name":"setPUBLIC_SALE_PRICEinEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_REVEAL","type":"bool"}],"name":"setREVEAL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_verificationHash","type":"string"}],"name":"setVerificationHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenHasBeenMigrated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"v1MintedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"verificationHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266d529ae9e860000600c553480156200001c57600080fd5b506040516200617f3803806200617f833981810160405281019062000042919062000b2c565b6040518060400160405280600b81526020017f4d657461204d6f67756c730000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d4f47554c0000000000000000000000000000000000000000000000000000008152508160009080519060200190620000c692919062000982565b508060019080519060200190620000df92919062000982565b50505062000102620000f6620002ff60201b60201c565b6200030760201b60201c565b60016007819055506000600860006101000a81548160ff02191690831515021790555086600b8190555085600990805190602001906200014492919062000982565b5083600d60016101000a81548160ff02191690831515021790555084600d60006101000a81548160ff02191690831515021790555081600e8190555081600f81905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620001fe5782600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6000600190505b818111620002f157600581116200027a57600060018262000227919062000eb6565b600b5462000236919062000eb6565b90506200024a3382620003cd60201b60201c565b601281908060018154018082558091505060019003906000526020600020016000909190919091505550620002cb565b60006200028c620003f360201b60201c565b9050620002a03382620003cd60201b60201c565b6012819080600181540180825580915050600190039060005260206000200160009091909190915055505b620002db6200046260201b60201c565b8080620002e89062001009565b91505062000205565b505050505050505062001227565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003ef828260405180602001604052806000815250620004c760201b60201c565b5050565b6000600b54600e54106200043e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004359062000dab565b60405180910390fd5b60016005600e5462000451919062000eb6565b6200045d919062000e59565b905090565b600b54600e5410620004ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a29062000dab565b60405180910390fd5b600e6000815480929190620004c09062001009565b9190505550565b620004d983836200053560201b60201c565b620004ee60008484846200072f60201b60201c565b62000530576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005279062000d45565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200059f9062000d89565b60405180910390fd5b620005b981620008e960201b60201c565b15620005fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005f39062000d67565b60405180910390fd5b62000610600083836200095560201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000662919062000e59565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200072b600083836200095a60201b60201c565b5050565b60006200075d8473ffffffffffffffffffffffffffffffffffffffff166200095f60201b620022621760201c565b15620008dc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200078f620002ff60201b60201c565b8786866040518563ffffffff1660e01b8152600401620007b3949392919062000cf1565b602060405180830381600087803b158015620007ce57600080fd5b505af19250505080156200080257506040513d601f19601f82011682018060405250810190620007ff919062000b00565b60015b6200088b573d806000811462000835576040519150601f19603f3d011682016040523d82523d6000602084013e6200083a565b606091505b5060008151141562000883576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200087a9062000d45565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620008e1565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054620009909062000f9d565b90600052602060002090601f016020900481019282620009b4576000855562000a00565b82601f10620009cf57805160ff191683800117855562000a00565b8280016001018555821562000a00579182015b82811115620009ff578251825591602001919060010190620009e2565b5b50905062000a0f919062000a13565b5090565b5b8082111562000a2e57600081600090555060010162000a14565b5090565b600062000a4962000a438462000df6565b62000dcd565b90508281526020810184848401111562000a6257600080fd5b62000a6f84828562000f67565b509392505050565b60008151905062000a8881620011bf565b92915050565b60008151905062000a9f81620011d9565b92915050565b60008151905062000ab681620011f3565b92915050565b600082601f83011262000ace57600080fd5b815162000ae084826020860162000a32565b91505092915050565b60008151905062000afa816200120d565b92915050565b60006020828403121562000b1357600080fd5b600062000b238482850162000aa5565b91505092915050565b600080600080600080600060e0888a03121562000b4857600080fd5b600062000b588a828b0162000ae9565b975050602088015167ffffffffffffffff81111562000b7657600080fd5b62000b848a828b0162000abc565b965050604062000b978a828b0162000a8e565b955050606062000baa8a828b0162000a8e565b945050608062000bbd8a828b0162000a77565b93505060a062000bd08a828b0162000ae9565b92505060c062000be38a828b0162000ae9565b91505092959891949750929550565b62000bfd8162000ef1565b82525050565b600062000c108262000e2c565b62000c1c818562000e37565b935062000c2e81856020860162000f67565b62000c3981620010e4565b840191505092915050565b600062000c5360328362000e48565b915062000c6082620010f5565b604082019050919050565b600062000c7a601c8362000e48565b915062000c878262001144565b602082019050919050565b600062000ca160208362000e48565b915062000cae826200116d565b602082019050919050565b600062000cc860198362000e48565b915062000cd58262001196565b602082019050919050565b62000ceb8162000f5d565b82525050565b600060808201905062000d08600083018762000bf2565b62000d17602083018662000bf2565b62000d26604083018562000ce0565b818103606083015262000d3a818462000c03565b905095945050505050565b6000602082019050818103600083015262000d608162000c44565b9050919050565b6000602082019050818103600083015262000d828162000c6b565b9050919050565b6000602082019050818103600083015262000da48162000c92565b9050919050565b6000602082019050818103600083015262000dc68162000cb9565b9050919050565b600062000dd962000dec565b905062000de7828262000fd3565b919050565b6000604051905090565b600067ffffffffffffffff82111562000e145762000e13620010b5565b5b62000e1f82620010e4565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000e668262000f5d565b915062000e738362000f5d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000eab5762000eaa62001057565b5b828201905092915050565b600062000ec38262000f5d565b915062000ed08362000f5d565b92508282101562000ee65762000ee562001057565b5b828203905092915050565b600062000efe8262000f3d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000f8757808201518184015260208101905062000f6a565b8381111562000f97576000848401525b50505050565b6000600282049050600182168062000fb657607f821691505b6020821081141562000fcd5762000fcc62001086565b5b50919050565b62000fde82620010e4565b810181811067ffffffffffffffff82111715620010005762000fff620010b5565b5b80604052505050565b6000620010168262000f5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200104c576200104b62001057565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f416c6c204e4654732068617665206265656e206d696e74656400000000000000600082015250565b620011ca8162000ef1565b8114620011d657600080fd5b50565b620011e48162000f05565b8114620011f057600080fd5b50565b620011fe8162000f11565b81146200120a57600080fd5b50565b620012188162000f5d565b81146200122457600080fd5b50565b614f4880620012376000396000f3fe6080604052600436106102665760003560e01c80635c975abb11610144578063995acb6a116100b6578063c87b56dd1161007a578063c87b56dd146108fa578063d7fc689014610937578063dad03ff814610962578063e6f831d51461098b578063e985e9c5146109b6578063f2fde38b146109f357610266565b8063995acb6a14610836578063a0712d6814610861578063a22cb4651461087d578063b88d4fde146108a6578063c0c36a37146108cf57610266565b8063715018a611610108578063715018a614610748578063771282f61461075f57806382651bd01461078a57806383c4c00d146107b55780638da5cb5b146107e057806395d89b411461080b57610266565b80635c975abb1461064f5780636352211e1461067a578063679657fb146106b757806370a08231146106e0578063714c53981461071d57610266565b806328c77820116101dd5780633a416afd116101a15780633a416afd146105675780633ccfd60b1461059257806342842e0e146105a957806349df728c146105d25780634e9e1ec6146105fb57806355f804b31461062657610266565b806328c778201461048457806328cad13d146104ad57806330503c4e146104d657806332db9d9214610501578063379607f51461053e57610266565b8063095ea7b31161022f578063095ea7b3146103785780631b2cd47e146103a15780631b3d26f4146103ca5780631e84c4131461040757806323b872dd1461043257806324f985e91461045b57610266565b806287fefb1461026b57806301ffc9a7146102a857806306fdde03146102e557806307e89ec014610310578063081812fc1461033b575b600080fd5b34801561027757600080fd5b50610292600480360381019061028d9190613824565b610a1c565b60405161029f9190613f0a565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613768565b610a8b565b6040516102dc9190613f0a565b60405180910390f35b3480156102f157600080fd5b506102fa610b6d565b6040516103079190613f40565b60405180910390f35b34801561031c57600080fd5b50610325610bff565b6040516103329190614292565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190613824565b610c05565b60405161036f9190613e21565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190613699565b610c8a565b005b3480156103ad57600080fd5b506103c860048036038101906103c39190613824565b610da2565b005b3480156103d657600080fd5b506103f160048036038101906103ec9190613824565b610e28565b6040516103fe9190614292565b60405180910390f35b34801561041357600080fd5b5061041c610e4c565b6040516104299190613f0a565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190613593565b610e5f565b005b34801561046757600080fd5b50610482600480360381019061047d91906137e3565b610ebf565b005b34801561049057600080fd5b506104ab60048036038101906104a691906136d5565b610f55565b005b3480156104b957600080fd5b506104d460048036038101906104cf9190613716565b611225565b005b3480156104e257600080fd5b506104eb6112be565b6040516104f89190613f25565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190613824565b6112e4565b6040516105359190613f0a565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613824565b611304565b005b34801561057357600080fd5b5061057c611450565b6040516105899190613ee8565b60405180910390f35b34801561059e57600080fd5b506105a76114a8565b005b3480156105b557600080fd5b506105d060048036038101906105cb9190613593565b611573565b005b3480156105de57600080fd5b506105f960048036038101906105f491906137ba565b611593565b005b34801561060757600080fd5b5061061061172e565b60405161061d9190614292565b60405180910390f35b34801561063257600080fd5b5061064d600480360381019061064891906137e3565b611734565b005b34801561065b57600080fd5b506106646117ca565b6040516106719190613f0a565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190613824565b6117e1565b6040516106ae9190613e21565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d99190613824565b611893565b005b3480156106ec57600080fd5b5061070760048036038101906107029190613505565b611919565b6040516107149190614292565b60405180910390f35b34801561072957600080fd5b506107326119d1565b60405161073f9190613f40565b60405180910390f35b34801561075457600080fd5b5061075d611a63565b005b34801561076b57600080fd5b50610774611aeb565b6040516107819190614292565b60405180910390f35b34801561079657600080fd5b5061079f611af1565b6040516107ac9190613f0a565b60405180910390f35b3480156107c157600080fd5b506107ca611b04565b6040516107d79190614292565b60405180910390f35b3480156107ec57600080fd5b506107f5611b1a565b6040516108029190613e21565b60405180910390f35b34801561081757600080fd5b50610820611b44565b60405161082d9190613f40565b60405180910390f35b34801561084257600080fd5b5061084b611bd6565b6040516108589190613ee8565b60405180910390f35b61087b60048036038101906108769190613824565b611c2e565b005b34801561088957600080fd5b506108a4600480360381019061089f919061365d565b611e03565b005b3480156108b257600080fd5b506108cd60048036038101906108c891906135e2565b611e19565b005b3480156108db57600080fd5b506108e4611e7b565b6040516108f19190613f40565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190613824565b611f09565b60405161092e9190613f40565b60405180910390f35b34801561094357600080fd5b5061094c61202d565b6040516109599190614292565b60405180910390f35b34801561096e57600080fd5b5061098960048036038101906109849190613716565b612037565b005b34801561099757600080fd5b506109a06120d0565b6040516109ad9190614292565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d89190613557565b6120d6565b6040516109ea9190613f0a565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a159190613505565b61216a565b005b6000600f54821115610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a90614212565b60405180910390fd5b6011600083815260200190815260200160002060009054906101000a900460ff169050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b665750610b6582612285565b5b9050919050565b606060008054610b7c906145f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906145f2565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b5050505050905090565b600c5481565b6000610c10826122ef565b610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690614172565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c95826117e1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd906141b2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d2561235b565b73ffffffffffffffffffffffffffffffffffffffff161480610d545750610d5381610d4e61235b565b6120d6565b5b610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90614092565b60405180910390fd5b610d9d8383612363565b505050565b610daa61235b565b73ffffffffffffffffffffffffffffffffffffffff16610dc8611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590614192565b60405180910390fd5b80600c8190555050565b60108181548110610e3857600080fd5b906000526020600020016000915090505481565b600d60009054906101000a900460ff1681565b610e70610e6a61235b565b8261241c565b610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea6906141f2565b60405180910390fd5b610eba8383836124fa565b505050565b610ec761235b565b73ffffffffffffffffffffffffffffffffffffffff16610ee5611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3290614192565b60405180910390fd5b80600a9080519060200190610f5192919061323f565b5050565b60026007541415610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290614252565b60405180910390fd5b6002600781905550610fab6117ca565b15610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290614072565b60405180910390fd5b6000815190506110306040518060400160405280601281526020017f6f776e6564546f6b656e732e6c656e677468000000000000000000000000000081525082612761565b60005b81811015611218576000838281518110611076577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506110bf6040518060400160405280600d81526020017f746f6b656e4964546f4d696e740000000000000000000000000000000000000081525082612761565b600f54811115611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb906141d2565b60405180910390fd5b61110e33826127fd565b1561120457600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161117293929190613e3c565b600060405180830381600087803b15801561118c57600080fd5b505af11580156111a0573d6000803e3d6000fd5b505050506111ae338261291e565b601081908060018154018082558091505060019003906000526020600020016000909190919091505560016011600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061121090614655565b915050611033565b5050600160078190555050565b61122d61235b565b73ffffffffffffffffffffffffffffffffffffffff1661124b611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129890614192565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b6002600754141561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190614252565b60405180910390fd5b600260078190555061135a6117ca565b1561139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190614072565b60405180910390fd5b6113a433826127fd565b1561144557600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161140893929190613e3c565b600060405180830381600087803b15801561142257600080fd5b505af1158015611436573d6000803e3d6000fd5b50505050611444338261291e565b5b600160078190555050565b6060601280548060200260200160405190810160405280929190818152602001828054801561149e57602002820191906000526020600020905b81548152602001906001019080831161148a575b5050505050905090565b6114b061235b565b73ffffffffffffffffffffffffffffffffffffffff166114ce611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90614192565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561156f573d6000803e3d6000fd5b5050565b61158e83838360405180602001604052806000815250611e19565b505050565b61159b61235b565b73ffffffffffffffffffffffffffffffffffffffff166115b9611b1a565b73ffffffffffffffffffffffffffffffffffffffff161461160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160690614192565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161164a9190613e21565b60206040518083038186803b15801561166257600080fd5b505afa158015611676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169a919061384d565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116d7929190613ebf565b602060405180830381600087803b1580156116f157600080fd5b505af1158015611705573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611729919061373f565b505050565b600b5481565b61173c61235b565b73ffffffffffffffffffffffffffffffffffffffff1661175a611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790614192565b60405180910390fd5b80600990805190602001906117c692919061323f565b5050565b6000600860009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561188a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611881906140f2565b60405180910390fd5b80915050919050565b61189b61235b565b73ffffffffffffffffffffffffffffffffffffffff166118b9611b1a565b73ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190690614192565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561198a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611981906140d2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600980546119e0906145f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0c906145f2565b8015611a595780601f10611a2e57610100808354040283529160200191611a59565b820191906000526020600020905b815481529060010190602001808311611a3c57829003601f168201915b5050505050905090565b611a6b61235b565b73ffffffffffffffffffffffffffffffffffffffff16611a89611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690614192565b60405180910390fd5b611ae9600061293c565b565b600e5481565b600d60019054906101000a900460ff1681565b60006005600e54611b1591906144d2565b905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611b53906145f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7f906145f2565b8015611bcc5780601f10611ba157610100808354040283529160200191611bcc565b820191906000526020600020905b815481529060010190602001808311611baf57829003601f168201915b5050505050905090565b60606010805480602002602001604051908101604052809291908181526020018280548015611c2457602002820191906000526020600020905b815481526020019060010190808311611c10575b5050505050905090565b60026007541415611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b90614252565b60405180910390fd5b6002600781905550600c5481348183611c8d9190614478565b14611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490614232565b60405180910390fd5b600d60009054906101000a900460ff16611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1390614272565b60405180910390fd5b82600b5481600e54611d2e91906143f1565b1115611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6690614112565b60405180910390fd5b611d776117ca565b15611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90614072565b60405180910390fd5b60005b84811015611df4576000611dcc612a02565b9050611dd8338261291e565b611de0612a6a565b508080611dec90614655565b915050611dba565b50505050600160078190555050565b611e15611e0e61235b565b8383612aca565b5050565b611e2a611e2461235b565b8361241c565b611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e60906141f2565b60405180910390fd5b611e7584848484612c37565b50505050565b600a8054611e88906145f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb4906145f2565b8015611f015780601f10611ed657610100808354040283529160200191611f01565b820191906000526020600020905b815481529060010190602001808311611ee457829003601f168201915b505050505081565b6060611f14826122ef565b611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a906140b2565b60405180910390fd5b600d60019054906101000a900460ff1615611f9a576009611f7383612c93565b604051602001611f84929190613de7565b6040516020818303038152906040529050612028565b60098054611fa7906145f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd3906145f2565b80156120205780601f10611ff557610100808354040283529160200191612020565b820191906000526020600020905b81548152906001019060200180831161200357829003601f168201915b505050505090505b919050565b6000600e54905090565b61203f61235b565b73ffffffffffffffffffffffffffffffffffffffff1661205d611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa90614192565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61217261235b565b73ffffffffffffffffffffffffffffffffffffffff16612190611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614192565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d90613fb2565b60405180910390fd5b61225f8161293c565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123d6836117e1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612427826122ef565b612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614052565b60405180910390fd5b6000612471836117e1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124e057508373ffffffffffffffffffffffffffffffffffffffff166124c884610c05565b73ffffffffffffffffffffffffffffffffffffffff16145b806124f157506124f081856120d6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661251a826117e1565b73ffffffffffffffffffffffffffffffffffffffff1614612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790613fd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790614012565b60405180910390fd5b6125eb838383612e40565b6125f6600082612363565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461264691906144d2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461269d91906143f1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461275c838383612e45565b505050565b6127f98282604051602401612777929190613f62565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612e4a565b5050565b6000600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161285a9190614292565b60206040518083038186803b15801561287257600080fd5b505afa9250505080156128a357506040513d601f19601f820116820180604052508101906128a0919061352e565b60015b6128e5576128af61478b565b806308c379a014156128d957506128c4614e09565b806128cf57506128db565b6000915050612918565b505b3d6000803e3d6000fd5b8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149150505b92915050565b612938828260405180602001604052806000815250612e73565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600b54600e5410612a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4190614152565b60405180910390fd5b60016005600e54612a5b91906144d2565b612a6591906143f1565b905090565b600b54600e5410612ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa790614152565b60405180910390fd5b600e6000815480929190612ac390614655565b9190505550565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090614032565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c2a9190613f0a565b60405180910390a3505050565b612c428484846124fa565b612c4e84848484612ece565b612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8490613f92565b60405180910390fd5b50505050565b60606000821415612cdb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e3b565b600082905060005b60008214612d0d578080612cf690614655565b915050600a82612d069190614447565b9150612ce3565b60008167ffffffffffffffff811115612d4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d815781602001600182028036833780820191505090505b5090505b60008514612e3457600182612d9a91906144d2565b9150600a85612da9919061469e565b6030612db591906143f1565b60f81b818381518110612df1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e2d9190614447565b9450612d85565b8093505050505b919050565b505050565b505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b612e7d8383613065565b612e8a6000848484612ece565b612ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec090613f92565b60405180910390fd5b505050565b6000612eef8473ffffffffffffffffffffffffffffffffffffffff16612262565b15613058578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f1861235b565b8786866040518563ffffffff1660e01b8152600401612f3a9493929190613e73565b602060405180830381600087803b158015612f5457600080fd5b505af1925050508015612f8557506040513d601f19601f82011682018060405250810190612f829190613791565b60015b613008573d8060008114612fb5576040519150601f19603f3d011682016040523d82523d6000602084013e612fba565b606091505b50600081511415613000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff790613f92565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061305d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cc90614132565b60405180910390fd5b6130de816122ef565b1561311e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311590613ff2565b60405180910390fd5b61312a60008383612e40565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461317a91906143f1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461323b60008383612e45565b5050565b82805461324b906145f2565b90600052602060002090601f01602090048101928261326d57600085556132b4565b82601f1061328657805160ff19168380011785556132b4565b828001600101855582156132b4579182015b828111156132b3578251825591602001919060010190613298565b5b5090506132c191906132c5565b5090565b5b808211156132de5760008160009055506001016132c6565b5090565b60006132f56132f0846142d2565b6142ad565b9050808382526020820190508285602086028201111561331457600080fd5b60005b85811015613344578161332a88826134db565b845260208401935060208301925050600181019050613317565b5050509392505050565b600061336161335c846142fe565b6142ad565b90508281526020810184848401111561337957600080fd5b6133848482856145b0565b509392505050565b600061339f61339a8461432f565b6142ad565b9050828152602081018484840111156133b757600080fd5b6133c28482856145b0565b509392505050565b6000813590506133d981614e9f565b92915050565b6000815190506133ee81614e9f565b92915050565b600082601f83011261340557600080fd5b81356134158482602086016132e2565b91505092915050565b60008135905061342d81614eb6565b92915050565b60008151905061344281614eb6565b92915050565b60008135905061345781614ecd565b92915050565b60008151905061346c81614ecd565b92915050565b600082601f83011261348357600080fd5b813561349384826020860161334e565b91505092915050565b6000813590506134ab81614ee4565b92915050565b600082601f8301126134c257600080fd5b81356134d284826020860161338c565b91505092915050565b6000813590506134ea81614efb565b92915050565b6000815190506134ff81614efb565b92915050565b60006020828403121561351757600080fd5b6000613525848285016133ca565b91505092915050565b60006020828403121561354057600080fd5b600061354e848285016133df565b91505092915050565b6000806040838503121561356a57600080fd5b6000613578858286016133ca565b9250506020613589858286016133ca565b9150509250929050565b6000806000606084860312156135a857600080fd5b60006135b6868287016133ca565b93505060206135c7868287016133ca565b92505060406135d8868287016134db565b9150509250925092565b600080600080608085870312156135f857600080fd5b6000613606878288016133ca565b9450506020613617878288016133ca565b9350506040613628878288016134db565b925050606085013567ffffffffffffffff81111561364557600080fd5b61365187828801613472565b91505092959194509250565b6000806040838503121561367057600080fd5b600061367e858286016133ca565b925050602061368f8582860161341e565b9150509250929050565b600080604083850312156136ac57600080fd5b60006136ba858286016133ca565b92505060206136cb858286016134db565b9150509250929050565b6000602082840312156136e757600080fd5b600082013567ffffffffffffffff81111561370157600080fd5b61370d848285016133f4565b91505092915050565b60006020828403121561372857600080fd5b60006137368482850161341e565b91505092915050565b60006020828403121561375157600080fd5b600061375f84828501613433565b91505092915050565b60006020828403121561377a57600080fd5b600061378884828501613448565b91505092915050565b6000602082840312156137a357600080fd5b60006137b18482850161345d565b91505092915050565b6000602082840312156137cc57600080fd5b60006137da8482850161349c565b91505092915050565b6000602082840312156137f557600080fd5b600082013567ffffffffffffffff81111561380f57600080fd5b61381b848285016134b1565b91505092915050565b60006020828403121561383657600080fd5b6000613844848285016134db565b91505092915050565b60006020828403121561385f57600080fd5b600061386d848285016134f0565b91505092915050565b60006138828383613dc9565b60208301905092915050565b61389781614506565b82525050565b60006138a882614385565b6138b281856143b3565b93506138bd83614360565b8060005b838110156138ee5781516138d58882613876565b97506138e0836143a6565b9250506001810190506138c1565b5085935050505092915050565b61390481614518565b82525050565b600061391582614390565b61391f81856143c4565b935061392f8185602086016145bf565b613938816147ad565b840191505092915050565b61394c8161458c565b82525050565b600061395d8261439b565b61396781856143d5565b93506139778185602086016145bf565b613980816147ad565b840191505092915050565b60006139968261439b565b6139a081856143e6565b93506139b08185602086016145bf565b80840191505092915050565b600081546139c9816145f2565b6139d381866143e6565b945060018216600081146139ee57600181146139ff57613a32565b60ff19831686528186019350613a32565b613a0885614370565b60005b83811015613a2a57815481890152600182019150602081019050613a0b565b838801955050505b50505092915050565b6000613a486032836143d5565b9150613a53826147cb565b604082019050919050565b6000613a6b6026836143d5565b9150613a768261481a565b604082019050919050565b6000613a8e6025836143d5565b9150613a9982614869565b604082019050919050565b6000613ab1601c836143d5565b9150613abc826148b8565b602082019050919050565b6000613ad46024836143d5565b9150613adf826148e1565b604082019050919050565b6000613af76019836143d5565b9150613b0282614930565b602082019050919050565b6000613b1a602c836143d5565b9150613b2582614959565b604082019050919050565b6000613b3d6010836143d5565b9150613b48826149a8565b602082019050919050565b6000613b606038836143d5565b9150613b6b826149d1565b604082019050919050565b6000613b836011836143d5565b9150613b8e82614a20565b602082019050919050565b6000613ba6602a836143d5565b9150613bb182614a49565b604082019050919050565b6000613bc96029836143d5565b9150613bd482614a98565b604082019050919050565b6000613bec6021836143d5565b9150613bf782614ae7565b604082019050919050565b6000613c0f6020836143d5565b9150613c1a82614b36565b602082019050919050565b6000613c326019836143d5565b9150613c3d82614b5f565b602082019050919050565b6000613c55602c836143d5565b9150613c6082614b88565b604082019050919050565b6000613c786005836143e6565b9150613c8382614bd7565b600582019050919050565b6000613c9b6020836143d5565b9150613ca682614c00565b602082019050919050565b6000613cbe6021836143d5565b9150613cc982614c29565b604082019050919050565b6000613ce16027836143d5565b9150613cec82614c78565b604082019050919050565b6000613d046031836143d5565b9150613d0f82614cc7565b604082019050919050565b6000613d276027836143d5565b9150613d3282614d16565b604082019050919050565b6000613d4a6018836143d5565b9150613d5582614d65565b602082019050919050565b6000613d6d601f836143d5565b9150613d7882614d8e565b602082019050919050565b6000613d906017836143d5565b9150613d9b82614db7565b602082019050919050565b6000613db36001836143e6565b9150613dbe82614de0565b600182019050919050565b613dd281614582565b82525050565b613de181614582565b82525050565b6000613df382856139bc565b9150613dfe82613da6565b9150613e0a828461398b565b9150613e1582613c6b565b91508190509392505050565b6000602082019050613e36600083018461388e565b92915050565b6000606082019050613e51600083018661388e565b613e5e602083018561388e565b613e6b6040830184613dd8565b949350505050565b6000608082019050613e88600083018761388e565b613e95602083018661388e565b613ea26040830185613dd8565b8181036060830152613eb4818461390a565b905095945050505050565b6000604082019050613ed4600083018561388e565b613ee16020830184613dd8565b9392505050565b60006020820190508181036000830152613f02818461389d565b905092915050565b6000602082019050613f1f60008301846138fb565b92915050565b6000602082019050613f3a6000830184613943565b92915050565b60006020820190508181036000830152613f5a8184613952565b905092915050565b60006040820190508181036000830152613f7c8185613952565b9050613f8b6020830184613dd8565b9392505050565b60006020820190508181036000830152613fab81613a3b565b9050919050565b60006020820190508181036000830152613fcb81613a5e565b9050919050565b60006020820190508181036000830152613feb81613a81565b9050919050565b6000602082019050818103600083015261400b81613aa4565b9050919050565b6000602082019050818103600083015261402b81613ac7565b9050919050565b6000602082019050818103600083015261404b81613aea565b9050919050565b6000602082019050818103600083015261406b81613b0d565b9050919050565b6000602082019050818103600083015261408b81613b30565b9050919050565b600060208201905081810360008301526140ab81613b53565b9050919050565b600060208201905081810360008301526140cb81613b76565b9050919050565b600060208201905081810360008301526140eb81613b99565b9050919050565b6000602082019050818103600083015261410b81613bbc565b9050919050565b6000602082019050818103600083015261412b81613bdf565b9050919050565b6000602082019050818103600083015261414b81613c02565b9050919050565b6000602082019050818103600083015261416b81613c25565b9050919050565b6000602082019050818103600083015261418b81613c48565b9050919050565b600060208201905081810360008301526141ab81613c8e565b9050919050565b600060208201905081810360008301526141cb81613cb1565b9050919050565b600060208201905081810360008301526141eb81613cd4565b9050919050565b6000602082019050818103600083015261420b81613cf7565b9050919050565b6000602082019050818103600083015261422b81613d1a565b9050919050565b6000602082019050818103600083015261424b81613d3d565b9050919050565b6000602082019050818103600083015261426b81613d60565b9050919050565b6000602082019050818103600083015261428b81613d83565b9050919050565b60006020820190506142a76000830184613dd8565b92915050565b60006142b76142c8565b90506142c38282614624565b919050565b6000604051905090565b600067ffffffffffffffff8211156142ed576142ec61475c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143195761431861475c565b5b614322826147ad565b9050602081019050919050565b600067ffffffffffffffff82111561434a5761434961475c565b5b614353826147ad565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143fc82614582565b915061440783614582565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561443c5761443b6146cf565b5b828201905092915050565b600061445282614582565b915061445d83614582565b92508261446d5761446c6146fe565b5b828204905092915050565b600061448382614582565b915061448e83614582565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144c7576144c66146cf565b5b828202905092915050565b60006144dd82614582565b91506144e883614582565b9250828210156144fb576144fa6146cf565b5b828203905092915050565b600061451182614562565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061455b82614506565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006145978261459e565b9050919050565b60006145a982614562565b9050919050565b82818337600083830152505050565b60005b838110156145dd5780820151818401526020810190506145c2565b838111156145ec576000848401525b50505050565b6000600282049050600182168061460a57607f821691505b6020821081141561461e5761461d61472d565b5b50919050565b61462d826147ad565b810181811067ffffffffffffffff8211171561464c5761464b61475c565b5b80604052505050565b600061466082614582565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614693576146926146cf565b5b600182019050919050565b60006146a982614582565b91506146b483614582565b9250826146c4576146c36146fe565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156147aa5760046000803e6147a76000516147be565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f6e6578697374656e7420746f6b656e000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204e4654732072656d61696e696e6720746f206d696e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f416c6c204e4654732068617665206265656e206d696e74656400000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e204944206d757374206265206d696e746564206f6e206f6c64206360008201527f6f6e747261637400000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f7420636865636b206d6967726174696f6e20737461747573206f6660008201527f207632204e465400000000000000000000000000000000000000000000000000602082015250565b7f496e636f7272656374204554482076616c75652073656e740000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f5075626c69632073616c65206973206e6f74206f70656e000000000000000000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b600060443d1015614e1957614e9c565b614e216142c8565b60043d036004823e80513d602482011167ffffffffffffffff82111715614e49575050614e9c565b808201805167ffffffffffffffff811115614e675750505050614e9c565b80602083010160043d038501811115614e84575050505050614e9c565b614e9382602001850186614624565b82955050505050505b90565b614ea881614506565b8114614eb357600080fd5b50565b614ebf81614518565b8114614eca57600080fd5b50565b614ed681614524565b8114614ee157600080fd5b50565b614eed81614550565b8114614ef857600080fd5b50565b614f0481614582565b8114614f0f57600080fd5b5056fea264697066735822122074c67d89c2e04835671c8f5feff261dd8a178791f99822ce705da864c057752c64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000045700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000005d6685c7bd265204ec9bde279095cbf4781658980000000000000000000000000000000000000000000000000000000000000368000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a694e6b55734571484541564870576434374531706d53755634576f42533733686433533272355159775a6e00000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102665760003560e01c80635c975abb11610144578063995acb6a116100b6578063c87b56dd1161007a578063c87b56dd146108fa578063d7fc689014610937578063dad03ff814610962578063e6f831d51461098b578063e985e9c5146109b6578063f2fde38b146109f357610266565b8063995acb6a14610836578063a0712d6814610861578063a22cb4651461087d578063b88d4fde146108a6578063c0c36a37146108cf57610266565b8063715018a611610108578063715018a614610748578063771282f61461075f57806382651bd01461078a57806383c4c00d146107b55780638da5cb5b146107e057806395d89b411461080b57610266565b80635c975abb1461064f5780636352211e1461067a578063679657fb146106b757806370a08231146106e0578063714c53981461071d57610266565b806328c77820116101dd5780633a416afd116101a15780633a416afd146105675780633ccfd60b1461059257806342842e0e146105a957806349df728c146105d25780634e9e1ec6146105fb57806355f804b31461062657610266565b806328c778201461048457806328cad13d146104ad57806330503c4e146104d657806332db9d9214610501578063379607f51461053e57610266565b8063095ea7b31161022f578063095ea7b3146103785780631b2cd47e146103a15780631b3d26f4146103ca5780631e84c4131461040757806323b872dd1461043257806324f985e91461045b57610266565b806287fefb1461026b57806301ffc9a7146102a857806306fdde03146102e557806307e89ec014610310578063081812fc1461033b575b600080fd5b34801561027757600080fd5b50610292600480360381019061028d9190613824565b610a1c565b60405161029f9190613f0a565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613768565b610a8b565b6040516102dc9190613f0a565b60405180910390f35b3480156102f157600080fd5b506102fa610b6d565b6040516103079190613f40565b60405180910390f35b34801561031c57600080fd5b50610325610bff565b6040516103329190614292565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190613824565b610c05565b60405161036f9190613e21565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190613699565b610c8a565b005b3480156103ad57600080fd5b506103c860048036038101906103c39190613824565b610da2565b005b3480156103d657600080fd5b506103f160048036038101906103ec9190613824565b610e28565b6040516103fe9190614292565b60405180910390f35b34801561041357600080fd5b5061041c610e4c565b6040516104299190613f0a565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190613593565b610e5f565b005b34801561046757600080fd5b50610482600480360381019061047d91906137e3565b610ebf565b005b34801561049057600080fd5b506104ab60048036038101906104a691906136d5565b610f55565b005b3480156104b957600080fd5b506104d460048036038101906104cf9190613716565b611225565b005b3480156104e257600080fd5b506104eb6112be565b6040516104f89190613f25565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190613824565b6112e4565b6040516105359190613f0a565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613824565b611304565b005b34801561057357600080fd5b5061057c611450565b6040516105899190613ee8565b60405180910390f35b34801561059e57600080fd5b506105a76114a8565b005b3480156105b557600080fd5b506105d060048036038101906105cb9190613593565b611573565b005b3480156105de57600080fd5b506105f960048036038101906105f491906137ba565b611593565b005b34801561060757600080fd5b5061061061172e565b60405161061d9190614292565b60405180910390f35b34801561063257600080fd5b5061064d600480360381019061064891906137e3565b611734565b005b34801561065b57600080fd5b506106646117ca565b6040516106719190613f0a565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190613824565b6117e1565b6040516106ae9190613e21565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d99190613824565b611893565b005b3480156106ec57600080fd5b5061070760048036038101906107029190613505565b611919565b6040516107149190614292565b60405180910390f35b34801561072957600080fd5b506107326119d1565b60405161073f9190613f40565b60405180910390f35b34801561075457600080fd5b5061075d611a63565b005b34801561076b57600080fd5b50610774611aeb565b6040516107819190614292565b60405180910390f35b34801561079657600080fd5b5061079f611af1565b6040516107ac9190613f0a565b60405180910390f35b3480156107c157600080fd5b506107ca611b04565b6040516107d79190614292565b60405180910390f35b3480156107ec57600080fd5b506107f5611b1a565b6040516108029190613e21565b60405180910390f35b34801561081757600080fd5b50610820611b44565b60405161082d9190613f40565b60405180910390f35b34801561084257600080fd5b5061084b611bd6565b6040516108589190613ee8565b60405180910390f35b61087b60048036038101906108769190613824565b611c2e565b005b34801561088957600080fd5b506108a4600480360381019061089f919061365d565b611e03565b005b3480156108b257600080fd5b506108cd60048036038101906108c891906135e2565b611e19565b005b3480156108db57600080fd5b506108e4611e7b565b6040516108f19190613f40565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190613824565b611f09565b60405161092e9190613f40565b60405180910390f35b34801561094357600080fd5b5061094c61202d565b6040516109599190614292565b60405180910390f35b34801561096e57600080fd5b5061098960048036038101906109849190613716565b612037565b005b34801561099757600080fd5b506109a06120d0565b6040516109ad9190614292565b60405180910390f35b3480156109c257600080fd5b506109dd60048036038101906109d89190613557565b6120d6565b6040516109ea9190613f0a565b60405180910390f35b3480156109ff57600080fd5b50610a1a6004803603810190610a159190613505565b61216a565b005b6000600f54821115610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a90614212565b60405180910390fd5b6011600083815260200190815260200160002060009054906101000a900460ff169050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b665750610b6582612285565b5b9050919050565b606060008054610b7c906145f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906145f2565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b5050505050905090565b600c5481565b6000610c10826122ef565b610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690614172565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c95826117e1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd906141b2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d2561235b565b73ffffffffffffffffffffffffffffffffffffffff161480610d545750610d5381610d4e61235b565b6120d6565b5b610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90614092565b60405180910390fd5b610d9d8383612363565b505050565b610daa61235b565b73ffffffffffffffffffffffffffffffffffffffff16610dc8611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590614192565b60405180910390fd5b80600c8190555050565b60108181548110610e3857600080fd5b906000526020600020016000915090505481565b600d60009054906101000a900460ff1681565b610e70610e6a61235b565b8261241c565b610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea6906141f2565b60405180910390fd5b610eba8383836124fa565b505050565b610ec761235b565b73ffffffffffffffffffffffffffffffffffffffff16610ee5611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3290614192565b60405180910390fd5b80600a9080519060200190610f5192919061323f565b5050565b60026007541415610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290614252565b60405180910390fd5b6002600781905550610fab6117ca565b15610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290614072565b60405180910390fd5b6000815190506110306040518060400160405280601281526020017f6f776e6564546f6b656e732e6c656e677468000000000000000000000000000081525082612761565b60005b81811015611218576000838281518110611076577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506110bf6040518060400160405280600d81526020017f746f6b656e4964546f4d696e740000000000000000000000000000000000000081525082612761565b600f54811115611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb906141d2565b60405180910390fd5b61110e33826127fd565b1561120457600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161117293929190613e3c565b600060405180830381600087803b15801561118c57600080fd5b505af11580156111a0573d6000803e3d6000fd5b505050506111ae338261291e565b601081908060018154018082558091505060019003906000526020600020016000909190919091505560016011600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061121090614655565b915050611033565b5050600160078190555050565b61122d61235b565b73ffffffffffffffffffffffffffffffffffffffff1661124b611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129890614192565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b6002600754141561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190614252565b60405180910390fd5b600260078190555061135a6117ca565b1561139a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139190614072565b60405180910390fd5b6113a433826127fd565b1561144557600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161140893929190613e3c565b600060405180830381600087803b15801561142257600080fd5b505af1158015611436573d6000803e3d6000fd5b50505050611444338261291e565b5b600160078190555050565b6060601280548060200260200160405190810160405280929190818152602001828054801561149e57602002820191906000526020600020905b81548152602001906001019080831161148a575b5050505050905090565b6114b061235b565b73ffffffffffffffffffffffffffffffffffffffff166114ce611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b90614192565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561156f573d6000803e3d6000fd5b5050565b61158e83838360405180602001604052806000815250611e19565b505050565b61159b61235b565b73ffffffffffffffffffffffffffffffffffffffff166115b9611b1a565b73ffffffffffffffffffffffffffffffffffffffff161461160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160690614192565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161164a9190613e21565b60206040518083038186803b15801561166257600080fd5b505afa158015611676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169a919061384d565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116d7929190613ebf565b602060405180830381600087803b1580156116f157600080fd5b505af1158015611705573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611729919061373f565b505050565b600b5481565b61173c61235b565b73ffffffffffffffffffffffffffffffffffffffff1661175a611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790614192565b60405180910390fd5b80600990805190602001906117c692919061323f565b5050565b6000600860009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561188a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611881906140f2565b60405180910390fd5b80915050919050565b61189b61235b565b73ffffffffffffffffffffffffffffffffffffffff166118b9611b1a565b73ffffffffffffffffffffffffffffffffffffffff161461190f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190690614192565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561198a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611981906140d2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600980546119e0906145f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0c906145f2565b8015611a595780601f10611a2e57610100808354040283529160200191611a59565b820191906000526020600020905b815481529060010190602001808311611a3c57829003601f168201915b5050505050905090565b611a6b61235b565b73ffffffffffffffffffffffffffffffffffffffff16611a89611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690614192565b60405180910390fd5b611ae9600061293c565b565b600e5481565b600d60019054906101000a900460ff1681565b60006005600e54611b1591906144d2565b905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611b53906145f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7f906145f2565b8015611bcc5780601f10611ba157610100808354040283529160200191611bcc565b820191906000526020600020905b815481529060010190602001808311611baf57829003601f168201915b5050505050905090565b60606010805480602002602001604051908101604052809291908181526020018280548015611c2457602002820191906000526020600020905b815481526020019060010190808311611c10575b5050505050905090565b60026007541415611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b90614252565b60405180910390fd5b6002600781905550600c5481348183611c8d9190614478565b14611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490614232565b60405180910390fd5b600d60009054906101000a900460ff16611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1390614272565b60405180910390fd5b82600b5481600e54611d2e91906143f1565b1115611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6690614112565b60405180910390fd5b611d776117ca565b15611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90614072565b60405180910390fd5b60005b84811015611df4576000611dcc612a02565b9050611dd8338261291e565b611de0612a6a565b508080611dec90614655565b915050611dba565b50505050600160078190555050565b611e15611e0e61235b565b8383612aca565b5050565b611e2a611e2461235b565b8361241c565b611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e60906141f2565b60405180910390fd5b611e7584848484612c37565b50505050565b600a8054611e88906145f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb4906145f2565b8015611f015780601f10611ed657610100808354040283529160200191611f01565b820191906000526020600020905b815481529060010190602001808311611ee457829003601f168201915b505050505081565b6060611f14826122ef565b611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a906140b2565b60405180910390fd5b600d60019054906101000a900460ff1615611f9a576009611f7383612c93565b604051602001611f84929190613de7565b6040516020818303038152906040529050612028565b60098054611fa7906145f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd3906145f2565b80156120205780601f10611ff557610100808354040283529160200191612020565b820191906000526020600020905b81548152906001019060200180831161200357829003601f168201915b505050505090505b919050565b6000600e54905090565b61203f61235b565b73ffffffffffffffffffffffffffffffffffffffff1661205d611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa90614192565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61217261235b565b73ffffffffffffffffffffffffffffffffffffffff16612190611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614192565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d90613fb2565b60405180910390fd5b61225f8161293c565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123d6836117e1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612427826122ef565b612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614052565b60405180910390fd5b6000612471836117e1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124e057508373ffffffffffffffffffffffffffffffffffffffff166124c884610c05565b73ffffffffffffffffffffffffffffffffffffffff16145b806124f157506124f081856120d6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661251a826117e1565b73ffffffffffffffffffffffffffffffffffffffff1614612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790613fd2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790614012565b60405180910390fd5b6125eb838383612e40565b6125f6600082612363565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461264691906144d2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461269d91906143f1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461275c838383612e45565b505050565b6127f98282604051602401612777929190613f62565b6040516020818303038152906040527f9710a9d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612e4a565b5050565b6000600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161285a9190614292565b60206040518083038186803b15801561287257600080fd5b505afa9250505080156128a357506040513d601f19601f820116820180604052508101906128a0919061352e565b60015b6128e5576128af61478b565b806308c379a014156128d957506128c4614e09565b806128cf57506128db565b6000915050612918565b505b3d6000803e3d6000fd5b8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149150505b92915050565b612938828260405180602001604052806000815250612e73565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600b54600e5410612a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4190614152565b60405180910390fd5b60016005600e54612a5b91906144d2565b612a6591906143f1565b905090565b600b54600e5410612ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa790614152565b60405180910390fd5b600e6000815480929190612ac390614655565b9190505550565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090614032565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c2a9190613f0a565b60405180910390a3505050565b612c428484846124fa565b612c4e84848484612ece565b612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8490613f92565b60405180910390fd5b50505050565b60606000821415612cdb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e3b565b600082905060005b60008214612d0d578080612cf690614655565b915050600a82612d069190614447565b9150612ce3565b60008167ffffffffffffffff811115612d4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d815781602001600182028036833780820191505090505b5090505b60008514612e3457600182612d9a91906144d2565b9150600a85612da9919061469e565b6030612db591906143f1565b60f81b818381518110612df1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e2d9190614447565b9450612d85565b8093505050505b919050565b505050565b505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b612e7d8383613065565b612e8a6000848484612ece565b612ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec090613f92565b60405180910390fd5b505050565b6000612eef8473ffffffffffffffffffffffffffffffffffffffff16612262565b15613058578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f1861235b565b8786866040518563ffffffff1660e01b8152600401612f3a9493929190613e73565b602060405180830381600087803b158015612f5457600080fd5b505af1925050508015612f8557506040513d601f19601f82011682018060405250810190612f829190613791565b60015b613008573d8060008114612fb5576040519150601f19603f3d011682016040523d82523d6000602084013e612fba565b606091505b50600081511415613000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff790613f92565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061305d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cc90614132565b60405180910390fd5b6130de816122ef565b1561311e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311590613ff2565b60405180910390fd5b61312a60008383612e40565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461317a91906143f1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461323b60008383612e45565b5050565b82805461324b906145f2565b90600052602060002090601f01602090048101928261326d57600085556132b4565b82601f1061328657805160ff19168380011785556132b4565b828001600101855582156132b4579182015b828111156132b3578251825591602001919060010190613298565b5b5090506132c191906132c5565b5090565b5b808211156132de5760008160009055506001016132c6565b5090565b60006132f56132f0846142d2565b6142ad565b9050808382526020820190508285602086028201111561331457600080fd5b60005b85811015613344578161332a88826134db565b845260208401935060208301925050600181019050613317565b5050509392505050565b600061336161335c846142fe565b6142ad565b90508281526020810184848401111561337957600080fd5b6133848482856145b0565b509392505050565b600061339f61339a8461432f565b6142ad565b9050828152602081018484840111156133b757600080fd5b6133c28482856145b0565b509392505050565b6000813590506133d981614e9f565b92915050565b6000815190506133ee81614e9f565b92915050565b600082601f83011261340557600080fd5b81356134158482602086016132e2565b91505092915050565b60008135905061342d81614eb6565b92915050565b60008151905061344281614eb6565b92915050565b60008135905061345781614ecd565b92915050565b60008151905061346c81614ecd565b92915050565b600082601f83011261348357600080fd5b813561349384826020860161334e565b91505092915050565b6000813590506134ab81614ee4565b92915050565b600082601f8301126134c257600080fd5b81356134d284826020860161338c565b91505092915050565b6000813590506134ea81614efb565b92915050565b6000815190506134ff81614efb565b92915050565b60006020828403121561351757600080fd5b6000613525848285016133ca565b91505092915050565b60006020828403121561354057600080fd5b600061354e848285016133df565b91505092915050565b6000806040838503121561356a57600080fd5b6000613578858286016133ca565b9250506020613589858286016133ca565b9150509250929050565b6000806000606084860312156135a857600080fd5b60006135b6868287016133ca565b93505060206135c7868287016133ca565b92505060406135d8868287016134db565b9150509250925092565b600080600080608085870312156135f857600080fd5b6000613606878288016133ca565b9450506020613617878288016133ca565b9350506040613628878288016134db565b925050606085013567ffffffffffffffff81111561364557600080fd5b61365187828801613472565b91505092959194509250565b6000806040838503121561367057600080fd5b600061367e858286016133ca565b925050602061368f8582860161341e565b9150509250929050565b600080604083850312156136ac57600080fd5b60006136ba858286016133ca565b92505060206136cb858286016134db565b9150509250929050565b6000602082840312156136e757600080fd5b600082013567ffffffffffffffff81111561370157600080fd5b61370d848285016133f4565b91505092915050565b60006020828403121561372857600080fd5b60006137368482850161341e565b91505092915050565b60006020828403121561375157600080fd5b600061375f84828501613433565b91505092915050565b60006020828403121561377a57600080fd5b600061378884828501613448565b91505092915050565b6000602082840312156137a357600080fd5b60006137b18482850161345d565b91505092915050565b6000602082840312156137cc57600080fd5b60006137da8482850161349c565b91505092915050565b6000602082840312156137f557600080fd5b600082013567ffffffffffffffff81111561380f57600080fd5b61381b848285016134b1565b91505092915050565b60006020828403121561383657600080fd5b6000613844848285016134db565b91505092915050565b60006020828403121561385f57600080fd5b600061386d848285016134f0565b91505092915050565b60006138828383613dc9565b60208301905092915050565b61389781614506565b82525050565b60006138a882614385565b6138b281856143b3565b93506138bd83614360565b8060005b838110156138ee5781516138d58882613876565b97506138e0836143a6565b9250506001810190506138c1565b5085935050505092915050565b61390481614518565b82525050565b600061391582614390565b61391f81856143c4565b935061392f8185602086016145bf565b613938816147ad565b840191505092915050565b61394c8161458c565b82525050565b600061395d8261439b565b61396781856143d5565b93506139778185602086016145bf565b613980816147ad565b840191505092915050565b60006139968261439b565b6139a081856143e6565b93506139b08185602086016145bf565b80840191505092915050565b600081546139c9816145f2565b6139d381866143e6565b945060018216600081146139ee57600181146139ff57613a32565b60ff19831686528186019350613a32565b613a0885614370565b60005b83811015613a2a57815481890152600182019150602081019050613a0b565b838801955050505b50505092915050565b6000613a486032836143d5565b9150613a53826147cb565b604082019050919050565b6000613a6b6026836143d5565b9150613a768261481a565b604082019050919050565b6000613a8e6025836143d5565b9150613a9982614869565b604082019050919050565b6000613ab1601c836143d5565b9150613abc826148b8565b602082019050919050565b6000613ad46024836143d5565b9150613adf826148e1565b604082019050919050565b6000613af76019836143d5565b9150613b0282614930565b602082019050919050565b6000613b1a602c836143d5565b9150613b2582614959565b604082019050919050565b6000613b3d6010836143d5565b9150613b48826149a8565b602082019050919050565b6000613b606038836143d5565b9150613b6b826149d1565b604082019050919050565b6000613b836011836143d5565b9150613b8e82614a20565b602082019050919050565b6000613ba6602a836143d5565b9150613bb182614a49565b604082019050919050565b6000613bc96029836143d5565b9150613bd482614a98565b604082019050919050565b6000613bec6021836143d5565b9150613bf782614ae7565b604082019050919050565b6000613c0f6020836143d5565b9150613c1a82614b36565b602082019050919050565b6000613c326019836143d5565b9150613c3d82614b5f565b602082019050919050565b6000613c55602c836143d5565b9150613c6082614b88565b604082019050919050565b6000613c786005836143e6565b9150613c8382614bd7565b600582019050919050565b6000613c9b6020836143d5565b9150613ca682614c00565b602082019050919050565b6000613cbe6021836143d5565b9150613cc982614c29565b604082019050919050565b6000613ce16027836143d5565b9150613cec82614c78565b604082019050919050565b6000613d046031836143d5565b9150613d0f82614cc7565b604082019050919050565b6000613d276027836143d5565b9150613d3282614d16565b604082019050919050565b6000613d4a6018836143d5565b9150613d5582614d65565b602082019050919050565b6000613d6d601f836143d5565b9150613d7882614d8e565b602082019050919050565b6000613d906017836143d5565b9150613d9b82614db7565b602082019050919050565b6000613db36001836143e6565b9150613dbe82614de0565b600182019050919050565b613dd281614582565b82525050565b613de181614582565b82525050565b6000613df382856139bc565b9150613dfe82613da6565b9150613e0a828461398b565b9150613e1582613c6b565b91508190509392505050565b6000602082019050613e36600083018461388e565b92915050565b6000606082019050613e51600083018661388e565b613e5e602083018561388e565b613e6b6040830184613dd8565b949350505050565b6000608082019050613e88600083018761388e565b613e95602083018661388e565b613ea26040830185613dd8565b8181036060830152613eb4818461390a565b905095945050505050565b6000604082019050613ed4600083018561388e565b613ee16020830184613dd8565b9392505050565b60006020820190508181036000830152613f02818461389d565b905092915050565b6000602082019050613f1f60008301846138fb565b92915050565b6000602082019050613f3a6000830184613943565b92915050565b60006020820190508181036000830152613f5a8184613952565b905092915050565b60006040820190508181036000830152613f7c8185613952565b9050613f8b6020830184613dd8565b9392505050565b60006020820190508181036000830152613fab81613a3b565b9050919050565b60006020820190508181036000830152613fcb81613a5e565b9050919050565b60006020820190508181036000830152613feb81613a81565b9050919050565b6000602082019050818103600083015261400b81613aa4565b9050919050565b6000602082019050818103600083015261402b81613ac7565b9050919050565b6000602082019050818103600083015261404b81613aea565b9050919050565b6000602082019050818103600083015261406b81613b0d565b9050919050565b6000602082019050818103600083015261408b81613b30565b9050919050565b600060208201905081810360008301526140ab81613b53565b9050919050565b600060208201905081810360008301526140cb81613b76565b9050919050565b600060208201905081810360008301526140eb81613b99565b9050919050565b6000602082019050818103600083015261410b81613bbc565b9050919050565b6000602082019050818103600083015261412b81613bdf565b9050919050565b6000602082019050818103600083015261414b81613c02565b9050919050565b6000602082019050818103600083015261416b81613c25565b9050919050565b6000602082019050818103600083015261418b81613c48565b9050919050565b600060208201905081810360008301526141ab81613c8e565b9050919050565b600060208201905081810360008301526141cb81613cb1565b9050919050565b600060208201905081810360008301526141eb81613cd4565b9050919050565b6000602082019050818103600083015261420b81613cf7565b9050919050565b6000602082019050818103600083015261422b81613d1a565b9050919050565b6000602082019050818103600083015261424b81613d3d565b9050919050565b6000602082019050818103600083015261426b81613d60565b9050919050565b6000602082019050818103600083015261428b81613d83565b9050919050565b60006020820190506142a76000830184613dd8565b92915050565b60006142b76142c8565b90506142c38282614624565b919050565b6000604051905090565b600067ffffffffffffffff8211156142ed576142ec61475c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143195761431861475c565b5b614322826147ad565b9050602081019050919050565b600067ffffffffffffffff82111561434a5761434961475c565b5b614353826147ad565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143fc82614582565b915061440783614582565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561443c5761443b6146cf565b5b828201905092915050565b600061445282614582565b915061445d83614582565b92508261446d5761446c6146fe565b5b828204905092915050565b600061448382614582565b915061448e83614582565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144c7576144c66146cf565b5b828202905092915050565b60006144dd82614582565b91506144e883614582565b9250828210156144fb576144fa6146cf565b5b828203905092915050565b600061451182614562565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061455b82614506565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006145978261459e565b9050919050565b60006145a982614562565b9050919050565b82818337600083830152505050565b60005b838110156145dd5780820151818401526020810190506145c2565b838111156145ec576000848401525b50505050565b6000600282049050600182168061460a57607f821691505b6020821081141561461e5761461d61472d565b5b50919050565b61462d826147ad565b810181811067ffffffffffffffff8211171561464c5761464b61475c565b5b80604052505050565b600061466082614582565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614693576146926146cf565b5b600182019050919050565b60006146a982614582565b91506146b483614582565b9250826146c4576146c36146fe565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156147aa5760046000803e6147a76000516147be565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f6e6578697374656e7420746f6b656e000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204e4654732072656d61696e696e6720746f206d696e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f416c6c204e4654732068617665206265656e206d696e74656400000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e204944206d757374206265206d696e746564206f6e206f6c64206360008201527f6f6e747261637400000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f7420636865636b206d6967726174696f6e20737461747573206f6660008201527f207632204e465400000000000000000000000000000000000000000000000000602082015250565b7f496e636f7272656374204554482076616c75652073656e740000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f5075626c69632073616c65206973206e6f74206f70656e000000000000000000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b600060443d1015614e1957614e9c565b614e216142c8565b60043d036004823e80513d602482011167ffffffffffffffff82111715614e49575050614e9c565b808201805167ffffffffffffffff811115614e675750505050614e9c565b80602083010160043d038501811115614e84575050505050614e9c565b614e9382602001850186614624565b82955050505050505b90565b614ea881614506565b8114614eb357600080fd5b50565b614ebf81614518565b8114614eca57600080fd5b50565b614ed681614524565b8114614ee157600080fd5b50565b614eed81614550565b8114614ef857600080fd5b50565b614f0481614582565b8114614f0f57600080fd5b5056fea264697066735822122074c67d89c2e04835671c8f5feff261dd8a178791f99822ce705da864c057752c64736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000045700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000005d6685c7bd265204ec9bde279095cbf4781658980000000000000000000000000000000000000000000000000000000000000368000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a694e6b55734571484541564870576434374531706d53755634576f42533733686433533272355159775a6e00000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _maxNFTs1 (uint256): 1111
Arg [1] : _baseURI (string): https://gateway.pinata.cloud/ipfs/QmZiNkUsEqHEAVHpWd47E1pmSuV4WoBS73hd3S2r5QYwZn
Arg [2] : _isPublicSaleActive (bool): True
Arg [3] : _REVEAL (bool): True
Arg [4] : _oldContract (address): 0x5d6685C7BD265204ec9BDE279095CBF478165898
Arg [5] : _currentSupply (uint256): 872
Arg [6] : _initialReserveCount (uint256): 60

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000457
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 0000000000000000000000005d6685c7bd265204ec9bde279095cbf478165898
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000368
Arg [6] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f516d5a694e6b55734571484541564870576434374531706d53755634576f
Arg [10] : 42533733686433533272355159775a6e00000000000000000000000000000000


Deployed Bytecode Sourcemap

171013:7993:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;174051:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22397:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23566:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;171217:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25259:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24782:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;178084:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;171452:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;171269:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26178:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;178351:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;176380:964;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;178518:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;171333:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;171493:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;176031:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;174311:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;178684:143;;;;;;;;;;;;;:::i;:::-;;26625:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;178835:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;171188:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;177853:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48429:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23173:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;177963:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22816:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;173653:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43678:103;;;;;;;;;;;;;:::i;:::-;;171368:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;171306:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;173754:167;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43027:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23735:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;173929:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;175135:467;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25639:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26881:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;171151:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;177352:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;174441:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;178256:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;171403:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25897:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43936:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;174051:252;174119:4;174169:14;;174158:7;:25;;174136:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;174268:18;:27;174287:7;174268:27;;;;;;;;;;;;;;;;;;;;;174261:34;;174051:252;;;:::o;22397:355::-;22544:4;22601:25;22586:40;;;:11;:40;;;;:105;;;;22658:33;22643:48;;;:11;:48;;;;22586:105;:158;;;;22708:36;22732:11;22708:23;:36::i;:::-;22586:158;22566:178;;22397:355;;;:::o;23566:100::-;23620:13;23653:5;23646:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23566:100;:::o;171217:45::-;;;;:::o;25259:308::-;25380:7;25427:16;25435:7;25427;:16::i;:::-;25405:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25535:15;:24;25551:7;25535:24;;;;;;;;;;;;;;;;;;;;;25528:31;;25259:308;;;:::o;24782:411::-;24863:13;24879:23;24894:7;24879:14;:23::i;:::-;24863:39;;24927:5;24921:11;;:2;:11;;;;24913:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25021:5;25005:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25030:37;25047:5;25054:12;:10;:12::i;:::-;25030:16;:37::i;:::-;25005:62;24983:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25164:21;25173:2;25177:7;25164:8;:21::i;:::-;24782:411;;;:::o;178084:164::-;43258:12;:10;:12::i;:::-;43247:23;;:7;:5;:7::i;:::-;:23;;;43239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;178222:18:::1;178202:17;:38;;;;178084:164:::0;:::o;171452:34::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;171269:30::-;;;;;;;;;;;;;:::o;26178:376::-;26387:41;26406:12;:10;:12::i;:::-;26420:7;26387:18;:41::i;:::-;26365:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26518:28;26528:4;26534:2;26538:7;26518:9;:28::i;:::-;26178:376;;;:::o;178351:159::-;43258:12;:10;:12::i;:::-;43247:23;;:7;:5;:7::i;:::-;:23;;;43239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;178485:17:::1;178466:16;:36;;;;;;;;;;;;:::i;:::-;;178351:159:::0;:::o;176380:964::-;46348:1;46946:7;;:19;;46938:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46348:1;47079:7;:18;;;;48755:8:::1;:6;:8::i;:::-;48754:9;48746:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;176507:14:::2;176524:11;:18;176507:35;;176567:41;;;;;;;;;;;;;;;;;::::0;176601:6:::2;176567:11;:41::i;:::-;176624:9;176619:718;176639:6;176635:1;:10;176619:718;;;176667:21;176691:11;176703:1;176691:14;;;;;;;;;;;;;;;;;;;;;;176667:38;;176720:43;;;;;;;;;;;;;;;;;::::0;176749:13:::2;176720:11;:43::i;:::-;176821:14;;176804:13;:31;;176778:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;176931:40;176945:10;176957:13;176931;:40::i;:::-;176927:399;;;176992:11;;;;;;;;;;;:24;;;177039:10;177080:4;177108:13;176992:148;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;177159:36;177169:10;177181:13;177159:9;:36::i;:::-;177214:17;177237:13;177214:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;177306:4;177270:18;:33;177289:13;177270:33;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;176927:399;176619:718;176647:3;;;;;:::i;:::-;;;;176619:718;;;;48795:1;46304::::0;47258:7;:22;;;;176380:964;:::o;178518:158::-;43258:12;:10;:12::i;:::-;43247:23;;:7;:5;:7::i;:::-;:23;;;43239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;178649:19:::1;178628:18;;:40;;;;;;;;;;;;;;;;;;178518:158:::0;:::o;171333:26::-;;;;;;;;;;;;;:::o;171493:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;176031:341::-;46348:1;46946:7;;:19;;46938:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46348:1;47079:7;:18;;;;48755:8:::1;:6;:8::i;:::-;48754:9;48746:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;176195:34:::2;176209:10;176221:7;176195:13;:34::i;:::-;176191:174;;;176246:11;;;;;;;;;;;:24;;;176271:10;176291:4;176298:7;176246:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;176323:30;176333:10;176345:7;176323:9;:30::i;:::-;176191:174;46304:1:::0;47258:7;:22;;;;176031:341;:::o;174311:122::-;174368:16;174404:21;174397:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;174311:122;:::o;178684:143::-;43258:12;:10;:12::i;:::-;43247:23;;:7;:5;:7::i;:::-;:23;;;43239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;178732:15:::1;178750:21;178732:39;;178790:10;178782:28;;:37;178811:7;178782:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43318:1;178684:143::o:0;26625:185::-;26763:39;26780:4;26786:2;26790:7;26763:39;;;;;;;;;;;;:16;:39::i;:::-;26625:185;;;:::o;178835:168::-;43258:12;:10;:12::i;:::-;43247:23;;:7;:5;:7::i;:::-;:23;;;43239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;178901:15:::1;178919:5;:15;;;178943:4;178919:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;178901:48;;178960:5;:14;;;178975:10;178987:7;178960:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43318:1;178835:168:::0;:::o;171188:22::-;;;;:::o;177853:102::-;43258:12;:10;:12::i;:::-;43247:23;;:7;:5;:7::i;:::-;:23;;;43239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;177938:9:::1;177928:7;:19;;;;;;;;;;;;:::i;:::-;;177853:102:::0;:::o;48429:86::-;48476:4;48500:7;;;;;;;;;;;48493:14;;48429:86;:::o;23173:326::-;23290:7;23315:13;23331:7;:16;23339:7;23331:16;;;;;;;;;;;;;;;;;;;;;23315:32;;23397:1;23380:19;;:5;:19;;;;23358:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;23486:5;23479:12;;;23173:326;;;:::o;177963:113::-;43258:12;:10;:12::i;:::-;43247:23;;:7;:5;:7::i;:::-;:23;;;43239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;178059:9:::1;178049:7;:19;;;;177963:113:::0;:::o;22816:295::-;22933:7;22997:1;22980:19;;:5;:19;;;;22958:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23087:9;:16;23097:5;23087:16;;;;;;;;;;;;;;;;23080:23;;22816:295;;;:::o;173653:93::-;173698:13;173731:7;173724:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;173653:93;:::o;43678:103::-;43258:12;:10;:12::i;:::-;43247:23;;:7;:5;:7::i;:::-;:23;;;43239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43743:30:::1;43770:1;43743:18;:30::i;:::-;43678:103::o:0;171368:28::-;;;;:::o;171306:18::-;;;;;;;;;;;;;:::o;173754:167::-;173803:7;173912:1;173896:13;;:17;;;;:::i;:::-;173889:24;;173754:167;:::o;43027:87::-;43073:7;43100:6;;;;;;;;;;;43093:13;;43027:87;:::o;23735:104::-;23791:13;23824:7;23817:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23735:104;:::o;173929:114::-;173982:16;174018:17;174011:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;173929:114;:::o;175135:467::-;46348:1;46946:7;;:19;;46938:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46348:1;47079:7;:18;;;;175256:17:::1;;175275:14;172121:9;172103:14;172095:5;:22;;;;:::i;:::-;:35;172073:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;171715:18:::2;;;;;;;;;;;171707:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;175338:14:::3;171901:7;;171883:14;171867:13;;:30;;;;:::i;:::-;:41;;171845:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;48755:8:::4;:6;:8::i;:::-;48754:9;48746:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;175398:9:::5;175393:202;175417:14;175413:1;:18;175393:202;;;175453:21;175477:16;:14;:16::i;:::-;175453:40;;175508:36;175518:10;175530:13;175508:9;:36::i;:::-;175559:24;:22;:24::i;:::-;175393:202;175433:3;;;;;:::i;:::-;;;;175393:202;;;;171772:1:::3;47110::::1;;46304::::0;47258:7;:22;;;;175135:467;:::o;25639:187::-;25766:52;25785:12;:10;:12::i;:::-;25799:8;25809;25766:18;:52::i;:::-;25639:187;;:::o;26881:365::-;27070:41;27089:12;:10;:12::i;:::-;27103:7;27070:18;:41::i;:::-;27048:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27199:39;27213:4;27219:2;27223:7;27232:5;27199:13;:39::i;:::-;26881:365;;;;:::o;171151:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;177352:430::-;177470:13;177509:16;177517:7;177509;:16::i;:::-;177501:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;177562:6;;;;;;;;;;;177558:217;;;177655:7;177669:18;:7;:16;:18::i;:::-;177638:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;177585:131;;;;177558:217;177756:7;177749:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;177352:430;;;;:::o;174441:103::-;174496:7;174523:13;;174516:20;;174441:103;:::o;178256:87::-;43258:12;:10;:12::i;:::-;43247:23;;:7;:5;:7::i;:::-;:23;;;43239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;178328:7:::1;178319:6;;:16;;;;;;;;;;;;;;;;;;178256:87:::0;:::o;171403:29::-;;;;:::o;25897:214::-;26039:4;26068:18;:25;26087:5;26068:25;;;;;;;;;;;;;;;:35;26094:8;26068:35;;;;;;;;;;;;;;;;;;;;;;;;;26061:42;;25897:214;;;;:::o;43936:238::-;43258:12;:10;:12::i;:::-;43247:23;;:7;:5;:7::i;:::-;:23;;;43239:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44059:1:::1;44039:22;;:8;:22;;;;44017:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;44138:28;44157:8;44138:18;:28::i;:::-;43936:238:::0;:::o;9125:326::-;9185:4;9442:1;9420:7;:19;;;:23;9413:30;;9125:326;;;:::o;20786:207::-;20916:4;20960:25;20945:40;;;:11;:40;;;;20938:47;;20786:207;;;:::o;28793:127::-;28858:4;28910:1;28882:30;;:7;:16;28890:7;28882:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28875:37;;28793:127;;;:::o;17545:98::-;17598:7;17625:10;17618:17;;17545:98;:::o;33080:174::-;33182:2;33155:15;:24;33171:7;33155:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33238:7;33234:2;33200:46;;33209:23;33224:7;33209:14;:23::i;:::-;33200:46;;;;;;;;;;;;33080:174;;:::o;29087:452::-;29216:4;29260:16;29268:7;29260;:16::i;:::-;29238:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29359:13;29375:23;29390:7;29375:14;:23::i;:::-;29359:39;;29428:5;29417:16;;:7;:16;;;:64;;;;29474:7;29450:31;;:20;29462:7;29450:11;:20::i;:::-;:31;;;29417:64;:113;;;;29498:32;29515:5;29522:7;29498:16;:32::i;:::-;29417:113;29409:122;;;29087:452;;;;:::o;32300:662::-;32473:4;32446:31;;:23;32461:7;32446:14;:23::i;:::-;:31;;;32424:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;32575:1;32561:16;;:2;:16;;;;32553:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32631:39;32652:4;32658:2;32662:7;32631:20;:39::i;:::-;32735:29;32752:1;32756:7;32735:8;:29::i;:::-;32796:1;32777:9;:15;32787:4;32777:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32825:1;32808:9;:13;32818:2;32808:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32856:2;32837:7;:16;32845:7;32837:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32895:7;32891:2;32876:27;;32885:4;32876:27;;;;;;;;;;;;32916:38;32936:4;32942:2;32946:7;32916:19;:38::i;:::-;32300:662;;;:::o;63669:144::-;63737:68;63797:2;63801;63753:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63737:15;:68::i;:::-;63669:144;;:::o;175669:354::-;175775:4;175801:11;;;;;;;;;;;:19;;;175821:7;175801:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;175797:219;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;175999:5;175992:12;;;;;175797:219;;;;;;;;;;;175892:10;175881:21;;:7;:21;;;175874:28;;;175669:354;;;;;:::o;29881:110::-;29957:26;29967:2;29971:7;29957:26;;;;;;;;;;;;:9;:26::i;:::-;29881:110;;:::o;44334:191::-;44408:16;44427:6;;;;;;;;;;;44408:25;;44453:8;44444:6;;:17;;;;;;;;;;;;;;;;;;44508:8;44477:40;;44498:8;44477:40;;;;;;;;;;;;44334:191;;:::o;174616:244::-;174664:7;174708;;174692:13;;:23;174684:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;174851:1;174846;174830:13;;:17;;;;:::i;:::-;174829:23;;;;:::i;:::-;174822:30;;174616:244;:::o;174926:148::-;175003:7;;174987:13;;:23;174979:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;175051:13;;:15;;;;;;;;;:::i;:::-;;;;;;174926:148::o;33396:315::-;33551:8;33542:17;;:5;:17;;;;33534:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;33638:8;33600:18;:25;33619:5;33600:25;;;;;;;;;;;;;;;:35;33626:8;33600:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33684:8;33662:41;;33677:5;33662:41;;;33694:8;33662:41;;;;;;:::i;:::-;;;;;;;;33396:315;;;:::o;28128:352::-;28285:28;28295:4;28301:2;28305:7;28285:9;:28::i;:::-;28346:48;28369:4;28375:2;28379:7;28388:5;28346:22;:48::i;:::-;28324:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;28128:352;;;;:::o;18128:723::-;18184:13;18414:1;18405:5;:10;18401:53;;;18432:10;;;;;;;;;;;;;;;;;;;;;18401:53;18464:12;18479:5;18464:20;;18495:14;18520:78;18535:1;18527:4;:9;18520:78;;18553:8;;;;;:::i;:::-;;;;18584:2;18576:10;;;;;:::i;:::-;;;18520:78;;;18608:19;18640:6;18630:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18608:39;;18658:154;18674:1;18665:5;:10;18658:154;;18702:1;18692:11;;;;;:::i;:::-;;;18769:2;18761:5;:10;;;;:::i;:::-;18748:2;:24;;;;:::i;:::-;18735:39;;18718:6;18725;18718:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;18798:2;18789:11;;;;;:::i;:::-;;;18658:154;;;18836:6;18822:21;;;;;18128:723;;;;:::o;35828:126::-;;;;:::o;36339:125::-;;;;:::o;57007:457::-;57078:21;57102:7;:14;57078:38;;57127:22;56955:42;57127:40;;57235:2;57226:7;57222:16;57430:1;57410;57378:13;57347:12;57314:14;57290:5;57261:185;57187:270;;;;;:::o;30218:321::-;30348:18;30354:2;30358:7;30348:5;:18::i;:::-;30399:54;30430:1;30434:2;30438:7;30447:5;30399:22;:54::i;:::-;30377:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30218:321;;;:::o;34276:980::-;34431:4;34452:15;:2;:13;;;:15::i;:::-;34448:801;;;34521:2;34505:36;;;34564:12;:10;:12::i;:::-;34599:4;34626:7;34656:5;34505:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34484:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34880:1;34863:6;:13;:18;34859:320;;;34906:108;;;;;;;;;;:::i;:::-;;;;;;;;34859:320;35129:6;35123:13;35114:6;35110:2;35106:15;35099:38;34484:710;34754:41;;;34744:51;;;:6;:51;;;;34737:58;;;;;34448:801;35233:4;35226:11;;34276:980;;;;;;;:::o;30875:439::-;30969:1;30955:16;;:2;:16;;;;30947:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31028:16;31036:7;31028;:16::i;:::-;31027:17;31019:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31090:45;31119:1;31123:2;31127:7;31090:20;:45::i;:::-;31165:1;31148:9;:13;31158:2;31148:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31196:2;31177:7;:16;31185:7;31177:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31241:7;31237:2;31216:33;;31233:1;31216:33;;;;;;;;;;;;31262:44;31290:1;31294:2;31298:7;31262:19;:44::i;:::-;30875:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:345::-;1112:5;1137:66;1153:49;1195:6;1153:49;:::i;:::-;1137:66;:::i;:::-;1128:75;;1226:6;1219:5;1212:21;1264:4;1257:5;1253:16;1302:3;1293:6;1288:3;1284:16;1281:25;1278:2;;;1319:1;1316;1309:12;1278:2;1332:41;1366:6;1361:3;1356;1332:41;:::i;:::-;1118:261;;;;;;:::o;1385:139::-;1431:5;1469:6;1456:20;1447:29;;1485:33;1512:5;1485:33;:::i;:::-;1437:87;;;;:::o;1530:143::-;1587:5;1618:6;1612:13;1603:22;;1634:33;1661:5;1634:33;:::i;:::-;1593:80;;;;:::o;1696:303::-;1767:5;1816:3;1809:4;1801:6;1797:17;1793:27;1783:2;;1834:1;1831;1824:12;1783:2;1874:6;1861:20;1899:94;1989:3;1981:6;1974:4;1966:6;1962:17;1899:94;:::i;:::-;1890:103;;1773:226;;;;;:::o;2005:133::-;2048:5;2086:6;2073:20;2064:29;;2102:30;2126:5;2102:30;:::i;:::-;2054:84;;;;:::o;2144:137::-;2198:5;2229:6;2223:13;2214:22;;2245:30;2269:5;2245:30;:::i;:::-;2204:77;;;;:::o;2287:137::-;2332:5;2370:6;2357:20;2348:29;;2386:32;2412:5;2386:32;:::i;:::-;2338:86;;;;:::o;2430:141::-;2486:5;2517:6;2511:13;2502:22;;2533:32;2559:5;2533:32;:::i;:::-;2492:79;;;;:::o;2590:271::-;2645:5;2694:3;2687:4;2679:6;2675:17;2671:27;2661:2;;2712:1;2709;2702:12;2661:2;2752:6;2739:20;2777:78;2851:3;2843:6;2836:4;2828:6;2824:17;2777:78;:::i;:::-;2768:87;;2651:210;;;;;:::o;2867:169::-;2928:5;2966:6;2953:20;2944:29;;2982:48;3024:5;2982:48;:::i;:::-;2934:102;;;;:::o;3056:273::-;3112:5;3161:3;3154:4;3146:6;3142:17;3138:27;3128:2;;3179:1;3176;3169:12;3128:2;3219:6;3206:20;3244:79;3319:3;3311:6;3304:4;3296:6;3292:17;3244:79;:::i;:::-;3235:88;;3118:211;;;;;:::o;3335:139::-;3381:5;3419:6;3406:20;3397:29;;3435:33;3462:5;3435:33;:::i;:::-;3387:87;;;;:::o;3480:143::-;3537:5;3568:6;3562:13;3553:22;;3584:33;3611:5;3584:33;:::i;:::-;3543:80;;;;:::o;3629:262::-;3688:6;3737:2;3725:9;3716:7;3712:23;3708:32;3705:2;;;3753:1;3750;3743:12;3705:2;3796:1;3821:53;3866:7;3857:6;3846:9;3842:22;3821:53;:::i;:::-;3811:63;;3767:117;3695:196;;;;:::o;3897:284::-;3967:6;4016:2;4004:9;3995:7;3991:23;3987:32;3984:2;;;4032:1;4029;4022:12;3984:2;4075:1;4100:64;4156:7;4147:6;4136:9;4132:22;4100:64;:::i;:::-;4090:74;;4046:128;3974:207;;;;:::o;4187:407::-;4255:6;4263;4312:2;4300:9;4291:7;4287:23;4283:32;4280:2;;;4328:1;4325;4318:12;4280:2;4371:1;4396:53;4441:7;4432:6;4421:9;4417:22;4396:53;:::i;:::-;4386:63;;4342:117;4498:2;4524:53;4569:7;4560:6;4549:9;4545:22;4524:53;:::i;:::-;4514:63;;4469:118;4270:324;;;;;:::o;4600:552::-;4677:6;4685;4693;4742:2;4730:9;4721:7;4717:23;4713:32;4710:2;;;4758:1;4755;4748:12;4710:2;4801:1;4826:53;4871:7;4862:6;4851:9;4847:22;4826:53;:::i;:::-;4816:63;;4772:117;4928:2;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4899:118;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;4700:452;;;;;:::o;5158:809::-;5253:6;5261;5269;5277;5326:3;5314:9;5305:7;5301:23;5297:33;5294:2;;;5343:1;5340;5333:12;5294:2;5386:1;5411:53;5456:7;5447:6;5436:9;5432:22;5411:53;:::i;:::-;5401:63;;5357:117;5513:2;5539:53;5584:7;5575:6;5564:9;5560:22;5539:53;:::i;:::-;5529:63;;5484:118;5641:2;5667:53;5712:7;5703:6;5692:9;5688:22;5667:53;:::i;:::-;5657:63;;5612:118;5797:2;5786:9;5782:18;5769:32;5828:18;5820:6;5817:30;5814:2;;;5860:1;5857;5850:12;5814:2;5888:62;5942:7;5933:6;5922:9;5918:22;5888:62;:::i;:::-;5878:72;;5740:220;5284:683;;;;;;;:::o;5973:401::-;6038:6;6046;6095:2;6083:9;6074:7;6070:23;6066:32;6063:2;;;6111:1;6108;6101:12;6063:2;6154:1;6179:53;6224:7;6215:6;6204:9;6200:22;6179:53;:::i;:::-;6169:63;;6125:117;6281:2;6307:50;6349:7;6340:6;6329:9;6325:22;6307:50;:::i;:::-;6297:60;;6252:115;6053:321;;;;;:::o;6380:407::-;6448:6;6456;6505:2;6493:9;6484:7;6480:23;6476:32;6473:2;;;6521:1;6518;6511:12;6473:2;6564:1;6589:53;6634:7;6625:6;6614:9;6610:22;6589:53;:::i;:::-;6579:63;;6535:117;6691:2;6717:53;6762:7;6753:6;6742:9;6738:22;6717:53;:::i;:::-;6707:63;;6662:118;6463:324;;;;;:::o;6793:405::-;6877:6;6926:2;6914:9;6905:7;6901:23;6897:32;6894:2;;;6942:1;6939;6932:12;6894:2;7013:1;7002:9;6998:17;6985:31;7043:18;7035:6;7032:30;7029:2;;;7075:1;7072;7065:12;7029:2;7103:78;7173:7;7164:6;7153:9;7149:22;7103:78;:::i;:::-;7093:88;;6956:235;6884:314;;;;:::o;7204:256::-;7260:6;7309:2;7297:9;7288:7;7284:23;7280:32;7277:2;;;7325:1;7322;7315:12;7277:2;7368:1;7393:50;7435:7;7426:6;7415:9;7411:22;7393:50;:::i;:::-;7383:60;;7339:114;7267:193;;;;:::o;7466:278::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:2;;;7598:1;7595;7588:12;7550:2;7641:1;7666:61;7719:7;7710:6;7699:9;7695:22;7666:61;:::i;:::-;7656:71;;7612:125;7540:204;;;;:::o;7750:260::-;7808:6;7857:2;7845:9;7836:7;7832:23;7828:32;7825:2;;;7873:1;7870;7863:12;7825:2;7916:1;7941:52;7985:7;7976:6;7965:9;7961:22;7941:52;:::i;:::-;7931:62;;7887:116;7815:195;;;;:::o;8016:282::-;8085:6;8134:2;8122:9;8113:7;8109:23;8105:32;8102:2;;;8150:1;8147;8140:12;8102:2;8193:1;8218:63;8273:7;8264:6;8253:9;8249:22;8218:63;:::i;:::-;8208:73;;8164:127;8092:206;;;;:::o;8304:292::-;8378:6;8427:2;8415:9;8406:7;8402:23;8398:32;8395:2;;;8443:1;8440;8433:12;8395:2;8486:1;8511:68;8571:7;8562:6;8551:9;8547:22;8511:68;:::i;:::-;8501:78;;8457:132;8385:211;;;;:::o;8602:375::-;8671:6;8720:2;8708:9;8699:7;8695:23;8691:32;8688:2;;;8736:1;8733;8726:12;8688:2;8807:1;8796:9;8792:17;8779:31;8837:18;8829:6;8826:30;8823:2;;;8869:1;8866;8859:12;8823:2;8897:63;8952:7;8943:6;8932:9;8928:22;8897:63;:::i;:::-;8887:73;;8750:220;8678:299;;;;:::o;8983:262::-;9042:6;9091:2;9079:9;9070:7;9066:23;9062:32;9059:2;;;9107:1;9104;9097:12;9059:2;9150:1;9175:53;9220:7;9211:6;9200:9;9196:22;9175:53;:::i;:::-;9165:63;;9121:117;9049:196;;;;:::o;9251:284::-;9321:6;9370:2;9358:9;9349:7;9345:23;9341:32;9338:2;;;9386:1;9383;9376:12;9338:2;9429:1;9454:64;9510:7;9501:6;9490:9;9486:22;9454:64;:::i;:::-;9444:74;;9400:128;9328:207;;;;:::o;9541:179::-;9610:10;9631:46;9673:3;9665:6;9631:46;:::i;:::-;9709:4;9704:3;9700:14;9686:28;;9621:99;;;;:::o;9726:118::-;9813:24;9831:5;9813:24;:::i;:::-;9808:3;9801:37;9791:53;;:::o;9880:732::-;9999:3;10028:54;10076:5;10028:54;:::i;:::-;10098:86;10177:6;10172:3;10098:86;:::i;:::-;10091:93;;10208:56;10258:5;10208:56;:::i;:::-;10287:7;10318:1;10303:284;10328:6;10325:1;10322:13;10303:284;;;10404:6;10398:13;10431:63;10490:3;10475:13;10431:63;:::i;:::-;10424:70;;10517:60;10570:6;10517:60;:::i;:::-;10507:70;;10363:224;10350:1;10347;10343:9;10338:14;;10303:284;;;10307:14;10603:3;10596:10;;10004:608;;;;;;;:::o;10618:109::-;10699:21;10714:5;10699:21;:::i;:::-;10694:3;10687:34;10677:50;;:::o;10733:360::-;10819:3;10847:38;10879:5;10847:38;:::i;:::-;10901:70;10964:6;10959:3;10901:70;:::i;:::-;10894:77;;10980:52;11025:6;11020:3;11013:4;11006:5;11002:16;10980:52;:::i;:::-;11057:29;11079:6;11057:29;:::i;:::-;11052:3;11048:39;11041:46;;10823:270;;;;;:::o;11099:161::-;11201:52;11247:5;11201:52;:::i;:::-;11196:3;11189:65;11179:81;;:::o;11266:364::-;11354:3;11382:39;11415:5;11382:39;:::i;:::-;11437:71;11501:6;11496:3;11437:71;:::i;:::-;11430:78;;11517:52;11562:6;11557:3;11550:4;11543:5;11539:16;11517:52;:::i;:::-;11594:29;11616:6;11594:29;:::i;:::-;11589:3;11585:39;11578:46;;11358:272;;;;;:::o;11636:377::-;11742:3;11770:39;11803:5;11770:39;:::i;:::-;11825:89;11907:6;11902:3;11825:89;:::i;:::-;11818:96;;11923:52;11968:6;11963:3;11956:4;11949:5;11945:16;11923:52;:::i;:::-;12000:6;11995:3;11991:16;11984:23;;11746:267;;;;;:::o;12043:845::-;12146:3;12183:5;12177:12;12212:36;12238:9;12212:36;:::i;:::-;12264:89;12346:6;12341:3;12264:89;:::i;:::-;12257:96;;12384:1;12373:9;12369:17;12400:1;12395:137;;;;12546:1;12541:341;;;;12362:520;;12395:137;12479:4;12475:9;12464;12460:25;12455:3;12448:38;12515:6;12510:3;12506:16;12499:23;;12395:137;;12541:341;12608:38;12640:5;12608:38;:::i;:::-;12668:1;12682:154;12696:6;12693:1;12690:13;12682:154;;;12770:7;12764:14;12760:1;12755:3;12751:11;12744:35;12820:1;12811:7;12807:15;12796:26;;12718:4;12715:1;12711:12;12706:17;;12682:154;;;12865:6;12860:3;12856:16;12849:23;;12548:334;;12362:520;;12150:738;;;;;;:::o;12894:366::-;13036:3;13057:67;13121:2;13116:3;13057:67;:::i;:::-;13050:74;;13133:93;13222:3;13133:93;:::i;:::-;13251:2;13246:3;13242:12;13235:19;;13040:220;;;:::o;13266:366::-;13408:3;13429:67;13493:2;13488:3;13429:67;:::i;:::-;13422:74;;13505:93;13594:3;13505:93;:::i;:::-;13623:2;13618:3;13614:12;13607:19;;13412:220;;;:::o;13638:366::-;13780:3;13801:67;13865:2;13860:3;13801:67;:::i;:::-;13794:74;;13877:93;13966:3;13877:93;:::i;:::-;13995:2;13990:3;13986:12;13979:19;;13784:220;;;:::o;14010:366::-;14152:3;14173:67;14237:2;14232:3;14173:67;:::i;:::-;14166:74;;14249:93;14338:3;14249:93;:::i;:::-;14367:2;14362:3;14358:12;14351:19;;14156:220;;;:::o;14382:366::-;14524:3;14545:67;14609:2;14604:3;14545:67;:::i;:::-;14538:74;;14621:93;14710:3;14621:93;:::i;:::-;14739:2;14734:3;14730:12;14723:19;;14528:220;;;:::o;14754:366::-;14896:3;14917:67;14981:2;14976:3;14917:67;:::i;:::-;14910:74;;14993:93;15082:3;14993:93;:::i;:::-;15111:2;15106:3;15102:12;15095:19;;14900:220;;;:::o;15126:366::-;15268:3;15289:67;15353:2;15348:3;15289:67;:::i;:::-;15282:74;;15365:93;15454:3;15365:93;:::i;:::-;15483:2;15478:3;15474:12;15467:19;;15272:220;;;:::o;15498:366::-;15640:3;15661:67;15725:2;15720:3;15661:67;:::i;:::-;15654:74;;15737:93;15826:3;15737:93;:::i;:::-;15855:2;15850:3;15846:12;15839:19;;15644:220;;;:::o;15870:366::-;16012:3;16033:67;16097:2;16092:3;16033:67;:::i;:::-;16026:74;;16109:93;16198:3;16109:93;:::i;:::-;16227:2;16222:3;16218:12;16211:19;;16016:220;;;:::o;16242:366::-;16384:3;16405:67;16469:2;16464:3;16405:67;:::i;:::-;16398:74;;16481:93;16570:3;16481:93;:::i;:::-;16599:2;16594:3;16590:12;16583:19;;16388:220;;;:::o;16614:366::-;16756:3;16777:67;16841:2;16836:3;16777:67;:::i;:::-;16770:74;;16853:93;16942:3;16853:93;:::i;:::-;16971:2;16966:3;16962:12;16955:19;;16760:220;;;:::o;16986:366::-;17128:3;17149:67;17213:2;17208:3;17149:67;:::i;:::-;17142:74;;17225:93;17314:3;17225:93;:::i;:::-;17343:2;17338:3;17334:12;17327:19;;17132:220;;;:::o;17358:366::-;17500:3;17521:67;17585:2;17580:3;17521:67;:::i;:::-;17514:74;;17597:93;17686:3;17597:93;:::i;:::-;17715:2;17710:3;17706:12;17699:19;;17504:220;;;:::o;17730:366::-;17872:3;17893:67;17957:2;17952:3;17893:67;:::i;:::-;17886:74;;17969:93;18058:3;17969:93;:::i;:::-;18087:2;18082:3;18078:12;18071:19;;17876:220;;;:::o;18102:366::-;18244:3;18265:67;18329:2;18324:3;18265:67;:::i;:::-;18258:74;;18341:93;18430:3;18341:93;:::i;:::-;18459:2;18454:3;18450:12;18443:19;;18248:220;;;:::o;18474:366::-;18616:3;18637:67;18701:2;18696:3;18637:67;:::i;:::-;18630:74;;18713:93;18802:3;18713:93;:::i;:::-;18831:2;18826:3;18822:12;18815:19;;18620:220;;;:::o;18846:400::-;19006:3;19027:84;19109:1;19104:3;19027:84;:::i;:::-;19020:91;;19120:93;19209:3;19120:93;:::i;:::-;19238:1;19233:3;19229:11;19222:18;;19010:236;;;:::o;19252:366::-;19394:3;19415:67;19479:2;19474:3;19415:67;:::i;:::-;19408:74;;19491:93;19580:3;19491:93;:::i;:::-;19609:2;19604:3;19600:12;19593:19;;19398:220;;;:::o;19624:366::-;19766:3;19787:67;19851:2;19846:3;19787:67;:::i;:::-;19780:74;;19863:93;19952:3;19863:93;:::i;:::-;19981:2;19976:3;19972:12;19965:19;;19770:220;;;:::o;19996:366::-;20138:3;20159:67;20223:2;20218:3;20159:67;:::i;:::-;20152:74;;20235:93;20324:3;20235:93;:::i;:::-;20353:2;20348:3;20344:12;20337:19;;20142:220;;;:::o;20368:366::-;20510:3;20531:67;20595:2;20590:3;20531:67;:::i;:::-;20524:74;;20607:93;20696:3;20607:93;:::i;:::-;20725:2;20720:3;20716:12;20709:19;;20514:220;;;:::o;20740:366::-;20882:3;20903:67;20967:2;20962:3;20903:67;:::i;:::-;20896:74;;20979:93;21068:3;20979:93;:::i;:::-;21097:2;21092:3;21088:12;21081:19;;20886:220;;;:::o;21112:366::-;21254:3;21275:67;21339:2;21334:3;21275:67;:::i;:::-;21268:74;;21351:93;21440:3;21351:93;:::i;:::-;21469:2;21464:3;21460:12;21453:19;;21258:220;;;:::o;21484:366::-;21626:3;21647:67;21711:2;21706:3;21647:67;:::i;:::-;21640:74;;21723:93;21812:3;21723:93;:::i;:::-;21841:2;21836:3;21832:12;21825:19;;21630:220;;;:::o;21856:366::-;21998:3;22019:67;22083:2;22078:3;22019:67;:::i;:::-;22012:74;;22095:93;22184:3;22095:93;:::i;:::-;22213:2;22208:3;22204:12;22197:19;;22002:220;;;:::o;22228:400::-;22388:3;22409:84;22491:1;22486:3;22409:84;:::i;:::-;22402:91;;22502:93;22591:3;22502:93;:::i;:::-;22620:1;22615:3;22611:11;22604:18;;22392:236;;;:::o;22634:108::-;22711:24;22729:5;22711:24;:::i;:::-;22706:3;22699:37;22689:53;;:::o;22748:118::-;22835:24;22853:5;22835:24;:::i;:::-;22830:3;22823:37;22813:53;;:::o;22872:961::-;23251:3;23273:92;23361:3;23352:6;23273:92;:::i;:::-;23266:99;;23382:148;23526:3;23382:148;:::i;:::-;23375:155;;23547:95;23638:3;23629:6;23547:95;:::i;:::-;23540:102;;23659:148;23803:3;23659:148;:::i;:::-;23652:155;;23824:3;23817:10;;23255:578;;;;;:::o;23839:222::-;23932:4;23970:2;23959:9;23955:18;23947:26;;23983:71;24051:1;24040:9;24036:17;24027:6;23983:71;:::i;:::-;23937:124;;;;:::o;24067:442::-;24216:4;24254:2;24243:9;24239:18;24231:26;;24267:71;24335:1;24324:9;24320:17;24311:6;24267:71;:::i;:::-;24348:72;24416:2;24405:9;24401:18;24392:6;24348:72;:::i;:::-;24430;24498:2;24487:9;24483:18;24474:6;24430:72;:::i;:::-;24221:288;;;;;;:::o;24515:640::-;24710:4;24748:3;24737:9;24733:19;24725:27;;24762:71;24830:1;24819:9;24815:17;24806:6;24762:71;:::i;:::-;24843:72;24911:2;24900:9;24896:18;24887:6;24843:72;:::i;:::-;24925;24993:2;24982:9;24978:18;24969:6;24925:72;:::i;:::-;25044:9;25038:4;25034:20;25029:2;25018:9;25014:18;25007:48;25072:76;25143:4;25134:6;25072:76;:::i;:::-;25064:84;;24715:440;;;;;;;:::o;25161:332::-;25282:4;25320:2;25309:9;25305:18;25297:26;;25333:71;25401:1;25390:9;25386:17;25377:6;25333:71;:::i;:::-;25414:72;25482:2;25471:9;25467:18;25458:6;25414:72;:::i;:::-;25287:206;;;;;:::o;25499:373::-;25642:4;25680:2;25669:9;25665:18;25657:26;;25729:9;25723:4;25719:20;25715:1;25704:9;25700:17;25693:47;25757:108;25860:4;25851:6;25757:108;:::i;:::-;25749:116;;25647:225;;;;:::o;25878:210::-;25965:4;26003:2;25992:9;25988:18;25980:26;;26016:65;26078:1;26067:9;26063:17;26054:6;26016:65;:::i;:::-;25970:118;;;;:::o;26094:252::-;26202:4;26240:2;26229:9;26225:18;26217:26;;26253:86;26336:1;26325:9;26321:17;26312:6;26253:86;:::i;:::-;26207:139;;;;:::o;26352:313::-;26465:4;26503:2;26492:9;26488:18;26480:26;;26552:9;26546:4;26542:20;26538:1;26527:9;26523:17;26516:47;26580:78;26653:4;26644:6;26580:78;:::i;:::-;26572:86;;26470:195;;;;:::o;26671:423::-;26812:4;26850:2;26839:9;26835:18;26827:26;;26899:9;26893:4;26889:20;26885:1;26874:9;26870:17;26863:47;26927:78;27000:4;26991:6;26927:78;:::i;:::-;26919:86;;27015:72;27083:2;27072:9;27068:18;27059:6;27015:72;:::i;:::-;26817:277;;;;;:::o;27100:419::-;27266:4;27304:2;27293:9;27289:18;27281:26;;27353:9;27347:4;27343:20;27339:1;27328:9;27324:17;27317:47;27381:131;27507:4;27381:131;:::i;:::-;27373:139;;27271:248;;;:::o;27525:419::-;27691:4;27729:2;27718:9;27714:18;27706:26;;27778:9;27772:4;27768:20;27764:1;27753:9;27749:17;27742:47;27806:131;27932:4;27806:131;:::i;:::-;27798:139;;27696:248;;;:::o;27950:419::-;28116:4;28154:2;28143:9;28139:18;28131:26;;28203:9;28197:4;28193:20;28189:1;28178:9;28174:17;28167:47;28231:131;28357:4;28231:131;:::i;:::-;28223:139;;28121:248;;;:::o;28375:419::-;28541:4;28579:2;28568:9;28564:18;28556:26;;28628:9;28622:4;28618:20;28614:1;28603:9;28599:17;28592:47;28656:131;28782:4;28656:131;:::i;:::-;28648:139;;28546:248;;;:::o;28800:419::-;28966:4;29004:2;28993:9;28989:18;28981:26;;29053:9;29047:4;29043:20;29039:1;29028:9;29024:17;29017:47;29081:131;29207:4;29081:131;:::i;:::-;29073:139;;28971:248;;;:::o;29225:419::-;29391:4;29429:2;29418:9;29414:18;29406:26;;29478:9;29472:4;29468:20;29464:1;29453:9;29449:17;29442:47;29506:131;29632:4;29506:131;:::i;:::-;29498:139;;29396:248;;;:::o;29650:419::-;29816:4;29854:2;29843:9;29839:18;29831:26;;29903:9;29897:4;29893:20;29889:1;29878:9;29874:17;29867:47;29931:131;30057:4;29931:131;:::i;:::-;29923:139;;29821:248;;;:::o;30075:419::-;30241:4;30279:2;30268:9;30264:18;30256:26;;30328:9;30322:4;30318:20;30314:1;30303:9;30299:17;30292:47;30356:131;30482:4;30356:131;:::i;:::-;30348:139;;30246:248;;;:::o;30500:419::-;30666:4;30704:2;30693:9;30689:18;30681:26;;30753:9;30747:4;30743:20;30739:1;30728:9;30724:17;30717:47;30781:131;30907:4;30781:131;:::i;:::-;30773:139;;30671:248;;;:::o;30925:419::-;31091:4;31129:2;31118:9;31114:18;31106:26;;31178:9;31172:4;31168:20;31164:1;31153:9;31149:17;31142:47;31206:131;31332:4;31206:131;:::i;:::-;31198:139;;31096:248;;;:::o;31350:419::-;31516:4;31554:2;31543:9;31539:18;31531:26;;31603:9;31597:4;31593:20;31589:1;31578:9;31574:17;31567:47;31631:131;31757:4;31631:131;:::i;:::-;31623:139;;31521:248;;;:::o;31775:419::-;31941:4;31979:2;31968:9;31964:18;31956:26;;32028:9;32022:4;32018:20;32014:1;32003:9;31999:17;31992:47;32056:131;32182:4;32056:131;:::i;:::-;32048:139;;31946:248;;;:::o;32200:419::-;32366:4;32404:2;32393:9;32389:18;32381:26;;32453:9;32447:4;32443:20;32439:1;32428:9;32424:17;32417:47;32481:131;32607:4;32481:131;:::i;:::-;32473:139;;32371:248;;;:::o;32625:419::-;32791:4;32829:2;32818:9;32814:18;32806:26;;32878:9;32872:4;32868:20;32864:1;32853:9;32849:17;32842:47;32906:131;33032:4;32906:131;:::i;:::-;32898:139;;32796:248;;;:::o;33050:419::-;33216:4;33254:2;33243:9;33239:18;33231:26;;33303:9;33297:4;33293:20;33289:1;33278:9;33274:17;33267:47;33331:131;33457:4;33331:131;:::i;:::-;33323:139;;33221:248;;;:::o;33475:419::-;33641:4;33679:2;33668:9;33664:18;33656:26;;33728:9;33722:4;33718:20;33714:1;33703:9;33699:17;33692:47;33756:131;33882:4;33756:131;:::i;:::-;33748:139;;33646:248;;;:::o;33900:419::-;34066:4;34104:2;34093:9;34089:18;34081:26;;34153:9;34147:4;34143:20;34139:1;34128:9;34124:17;34117:47;34181:131;34307:4;34181:131;:::i;:::-;34173:139;;34071:248;;;:::o;34325:419::-;34491:4;34529:2;34518:9;34514:18;34506:26;;34578:9;34572:4;34568:20;34564:1;34553:9;34549:17;34542:47;34606:131;34732:4;34606:131;:::i;:::-;34598:139;;34496:248;;;:::o;34750:419::-;34916:4;34954:2;34943:9;34939:18;34931:26;;35003:9;34997:4;34993:20;34989:1;34978:9;34974:17;34967:47;35031:131;35157:4;35031:131;:::i;:::-;35023:139;;34921:248;;;:::o;35175:419::-;35341:4;35379:2;35368:9;35364:18;35356:26;;35428:9;35422:4;35418:20;35414:1;35403:9;35399:17;35392:47;35456:131;35582:4;35456:131;:::i;:::-;35448:139;;35346:248;;;:::o;35600:419::-;35766:4;35804:2;35793:9;35789:18;35781:26;;35853:9;35847:4;35843:20;35839:1;35828:9;35824:17;35817:47;35881:131;36007:4;35881:131;:::i;:::-;35873:139;;35771:248;;;:::o;36025:419::-;36191:4;36229:2;36218:9;36214:18;36206:26;;36278:9;36272:4;36268:20;36264:1;36253:9;36249:17;36242:47;36306:131;36432:4;36306:131;:::i;:::-;36298:139;;36196:248;;;:::o;36450:419::-;36616:4;36654:2;36643:9;36639:18;36631:26;;36703:9;36697:4;36693:20;36689:1;36678:9;36674:17;36667:47;36731:131;36857:4;36731:131;:::i;:::-;36723:139;;36621:248;;;:::o;36875:419::-;37041:4;37079:2;37068:9;37064:18;37056:26;;37128:9;37122:4;37118:20;37114:1;37103:9;37099:17;37092:47;37156:131;37282:4;37156:131;:::i;:::-;37148:139;;37046:248;;;:::o;37300:222::-;37393:4;37431:2;37420:9;37416:18;37408:26;;37444:71;37512:1;37501:9;37497:17;37488:6;37444:71;:::i;:::-;37398:124;;;;:::o;37528:129::-;37562:6;37589:20;;:::i;:::-;37579:30;;37618:33;37646:4;37638:6;37618:33;:::i;:::-;37569:88;;;:::o;37663:75::-;37696:6;37729:2;37723:9;37713:19;;37703:35;:::o;37744:311::-;37821:4;37911:18;37903:6;37900:30;37897:2;;;37933:18;;:::i;:::-;37897:2;37983:4;37975:6;37971:17;37963:25;;38043:4;38037;38033:15;38025:23;;37826:229;;;:::o;38061:307::-;38122:4;38212:18;38204:6;38201:30;38198:2;;;38234:18;;:::i;:::-;38198:2;38272:29;38294:6;38272:29;:::i;:::-;38264:37;;38356:4;38350;38346:15;38338:23;;38127:241;;;:::o;38374:308::-;38436:4;38526:18;38518:6;38515:30;38512:2;;;38548:18;;:::i;:::-;38512:2;38586:29;38608:6;38586:29;:::i;:::-;38578:37;;38670:4;38664;38660:15;38652:23;;38441:241;;;:::o;38688:132::-;38755:4;38778:3;38770:11;;38808:4;38803:3;38799:14;38791:22;;38760:60;;;:::o;38826:141::-;38875:4;38898:3;38890:11;;38921:3;38918:1;38911:14;38955:4;38952:1;38942:18;38934:26;;38880:87;;;:::o;38973:114::-;39040:6;39074:5;39068:12;39058:22;;39047:40;;;:::o;39093:98::-;39144:6;39178:5;39172:12;39162:22;;39151:40;;;:::o;39197:99::-;39249:6;39283:5;39277:12;39267:22;;39256:40;;;:::o;39302:113::-;39372:4;39404;39399:3;39395:14;39387:22;;39377:38;;;:::o;39421:184::-;39520:11;39554:6;39549:3;39542:19;39594:4;39589:3;39585:14;39570:29;;39532:73;;;;:::o;39611:168::-;39694:11;39728:6;39723:3;39716:19;39768:4;39763:3;39759:14;39744:29;;39706:73;;;;:::o;39785:169::-;39869:11;39903:6;39898:3;39891:19;39943:4;39938:3;39934:14;39919:29;;39881:73;;;;:::o;39960:148::-;40062:11;40099:3;40084:18;;40074:34;;;;:::o;40114:305::-;40154:3;40173:20;40191:1;40173:20;:::i;:::-;40168:25;;40207:20;40225:1;40207:20;:::i;:::-;40202:25;;40361:1;40293:66;40289:74;40286:1;40283:81;40280:2;;;40367:18;;:::i;:::-;40280:2;40411:1;40408;40404:9;40397:16;;40158:261;;;;:::o;40425:185::-;40465:1;40482:20;40500:1;40482:20;:::i;:::-;40477:25;;40516:20;40534:1;40516:20;:::i;:::-;40511:25;;40555:1;40545:2;;40560:18;;:::i;:::-;40545:2;40602:1;40599;40595:9;40590:14;;40467:143;;;;:::o;40616:348::-;40656:7;40679:20;40697:1;40679:20;:::i;:::-;40674:25;;40713:20;40731:1;40713:20;:::i;:::-;40708:25;;40901:1;40833:66;40829:74;40826:1;40823:81;40818:1;40811:9;40804:17;40800:105;40797:2;;;40908:18;;:::i;:::-;40797:2;40956:1;40953;40949:9;40938:20;;40664:300;;;;:::o;40970:191::-;41010:4;41030:20;41048:1;41030:20;:::i;:::-;41025:25;;41064:20;41082:1;41064:20;:::i;:::-;41059:25;;41103:1;41100;41097:8;41094:2;;;41108:18;;:::i;:::-;41094:2;41153:1;41150;41146:9;41138:17;;41015:146;;;;:::o;41167:96::-;41204:7;41233:24;41251:5;41233:24;:::i;:::-;41222:35;;41212:51;;;:::o;41269:90::-;41303:7;41346:5;41339:13;41332:21;41321:32;;41311:48;;;:::o;41365:149::-;41401:7;41441:66;41434:5;41430:78;41419:89;;41409:105;;;:::o;41520:111::-;41572:7;41601:24;41619:5;41601:24;:::i;:::-;41590:35;;41580:51;;;:::o;41637:126::-;41674:7;41714:42;41707:5;41703:54;41692:65;;41682:81;;;:::o;41769:77::-;41806:7;41835:5;41824:16;;41814:32;;;:::o;41852:156::-;41917:9;41950:52;41996:5;41950:52;:::i;:::-;41937:65;;41927:81;;;:::o;42014:128::-;42079:9;42112:24;42130:5;42112:24;:::i;:::-;42099:37;;42089:53;;;:::o;42148:154::-;42232:6;42227:3;42222;42209:30;42294:1;42285:6;42280:3;42276:16;42269:27;42199:103;;;:::o;42308:307::-;42376:1;42386:113;42400:6;42397:1;42394:13;42386:113;;;42485:1;42480:3;42476:11;42470:18;42466:1;42461:3;42457:11;42450:39;42422:2;42419:1;42415:10;42410:15;;42386:113;;;42517:6;42514:1;42511:13;42508:2;;;42597:1;42588:6;42583:3;42579:16;42572:27;42508:2;42357:258;;;;:::o;42621:320::-;42665:6;42702:1;42696:4;42692:12;42682:22;;42749:1;42743:4;42739:12;42770:18;42760:2;;42826:4;42818:6;42814:17;42804:27;;42760:2;42888;42880:6;42877:14;42857:18;42854:38;42851:2;;;42907:18;;:::i;:::-;42851:2;42672:269;;;;:::o;42947:281::-;43030:27;43052:4;43030:27;:::i;:::-;43022:6;43018:40;43160:6;43148:10;43145:22;43124:18;43112:10;43109:34;43106:62;43103:2;;;43171:18;;:::i;:::-;43103:2;43211:10;43207:2;43200:22;42990:238;;;:::o;43234:233::-;43273:3;43296:24;43314:5;43296:24;:::i;:::-;43287:33;;43342:66;43335:5;43332:77;43329:2;;;43412:18;;:::i;:::-;43329:2;43459:1;43452:5;43448:13;43441:20;;43277:190;;;:::o;43473:176::-;43505:1;43522:20;43540:1;43522:20;:::i;:::-;43517:25;;43556:20;43574:1;43556:20;:::i;:::-;43551:25;;43595:1;43585:2;;43600:18;;:::i;:::-;43585:2;43641:1;43638;43634:9;43629:14;;43507:142;;;;:::o;43655:180::-;43703:77;43700:1;43693:88;43800:4;43797:1;43790:15;43824:4;43821:1;43814:15;43841:180;43889:77;43886:1;43879:88;43986:4;43983:1;43976:15;44010:4;44007:1;44000:15;44027:180;44075:77;44072:1;44065:88;44172:4;44169:1;44162:15;44196:4;44193:1;44186:15;44213:180;44261:77;44258:1;44251:88;44358:4;44355:1;44348:15;44382:4;44379:1;44372:15;44399:183;44434:3;44472:1;44454:16;44451:23;44448:2;;;44510:1;44507;44504;44489:23;44532:34;44563:1;44557:8;44532:34;:::i;:::-;44525:41;;44448:2;44438:144;:::o;44588:102::-;44629:6;44680:2;44676:7;44671:2;44664:5;44660:14;44656:28;44646:38;;44636:54;;;:::o;44696:106::-;44740:8;44789:5;44784:3;44780:15;44759:36;;44749:53;;;:::o;44808:237::-;44948:34;44944:1;44936:6;44932:14;44925:58;45017:20;45012:2;45004:6;45000:15;44993:45;44914:131;:::o;45051:225::-;45191:34;45187:1;45179:6;45175:14;45168:58;45260:8;45255:2;45247:6;45243:15;45236:33;45157:119;:::o;45282:224::-;45422:34;45418:1;45410:6;45406:14;45399:58;45491:7;45486:2;45478:6;45474:15;45467:32;45388:118;:::o;45512:178::-;45652:30;45648:1;45640:6;45636:14;45629:54;45618:72;:::o;45696:223::-;45836:34;45832:1;45824:6;45820:14;45813:58;45905:6;45900:2;45892:6;45888:15;45881:31;45802:117;:::o;45925:175::-;46065:27;46061:1;46053:6;46049:14;46042:51;46031:69;:::o;46106:231::-;46246:34;46242:1;46234:6;46230:14;46223:58;46315:14;46310:2;46302:6;46298:15;46291:39;46212:125;:::o;46343:166::-;46483:18;46479:1;46471:6;46467:14;46460:42;46449:60;:::o;46515:243::-;46655:34;46651:1;46643:6;46639:14;46632:58;46724:26;46719:2;46711:6;46707:15;46700:51;46621:137;:::o;46764:167::-;46904:19;46900:1;46892:6;46888:14;46881:43;46870:61;:::o;46937:229::-;47077:34;47073:1;47065:6;47061:14;47054:58;47146:12;47141:2;47133:6;47129:15;47122:37;47043:123;:::o;47172:228::-;47312:34;47308:1;47300:6;47296:14;47289:58;47381:11;47376:2;47368:6;47364:15;47357:36;47278:122;:::o;47406:220::-;47546:34;47542:1;47534:6;47530:14;47523:58;47615:3;47610:2;47602:6;47598:15;47591:28;47512:114;:::o;47632:182::-;47772:34;47768:1;47760:6;47756:14;47749:58;47738:76;:::o;47820:175::-;47960:27;47956:1;47948:6;47944:14;47937:51;47926:69;:::o;48001:231::-;48141:34;48137:1;48129:6;48125:14;48118:58;48210:14;48205:2;48197:6;48193:15;48186:39;48107:125;:::o;48238:155::-;48378:7;48374:1;48366:6;48362:14;48355:31;48344:49;:::o;48399:182::-;48539:34;48535:1;48527:6;48523:14;48516:58;48505:76;:::o;48587:220::-;48727:34;48723:1;48715:6;48711:14;48704:58;48796:3;48791:2;48783:6;48779:15;48772:28;48693:114;:::o;48813:226::-;48953:34;48949:1;48941:6;48937:14;48930:58;49022:9;49017:2;49009:6;49005:15;48998:34;48919:120;:::o;49045:236::-;49185:34;49181:1;49173:6;49169:14;49162:58;49254:19;49249:2;49241:6;49237:15;49230:44;49151:130;:::o;49287:226::-;49427:34;49423:1;49415:6;49411:14;49404:58;49496:9;49491:2;49483:6;49479:15;49472:34;49393:120;:::o;49519:174::-;49659:26;49655:1;49647:6;49643:14;49636:50;49625:68;:::o;49699:181::-;49839:33;49835:1;49827:6;49823:14;49816:57;49805:75;:::o;49886:173::-;50026:25;50022:1;50014:6;50010:14;50003:49;49992:67;:::o;50065:151::-;50205:3;50201:1;50193:6;50189:14;50182:27;50171:45;:::o;50222:711::-;50261:3;50299:4;50281:16;50278:26;50275:2;;;50307:5;;50275:2;50336:20;;:::i;:::-;50411:1;50393:16;50389:24;50386:1;50380:4;50365:49;50444:4;50438:11;50543:16;50536:4;50528:6;50524:17;50521:39;50488:18;50480:6;50477:30;50461:113;50458:2;;;50589:5;;;;50458:2;50635:6;50629:4;50625:17;50671:3;50665:10;50698:18;50690:6;50687:30;50684:2;;;50720:5;;;;;;50684:2;50768:6;50761:4;50756:3;50752:14;50748:27;50827:1;50809:16;50805:24;50799:4;50795:35;50790:3;50787:44;50784:2;;;50834:5;;;;;;;50784:2;50851:57;50899:6;50893:4;50889:17;50881:6;50877:30;50871:4;50851:57;:::i;:::-;50924:3;50917:10;;50265:668;;;;;;;:::o;50939:122::-;51012:24;51030:5;51012:24;:::i;:::-;51005:5;51002:35;50992:2;;51051:1;51048;51041:12;50992:2;50982:79;:::o;51067:116::-;51137:21;51152:5;51137:21;:::i;:::-;51130:5;51127:32;51117:2;;51173:1;51170;51163:12;51117:2;51107:76;:::o;51189:120::-;51261:23;51278:5;51261:23;:::i;:::-;51254:5;51251:34;51241:2;;51299:1;51296;51289:12;51241:2;51231:78;:::o;51315:152::-;51403:39;51436:5;51403:39;:::i;:::-;51396:5;51393:50;51383:2;;51457:1;51454;51447:12;51383:2;51373:94;:::o;51473:122::-;51546:24;51564:5;51546:24;:::i;:::-;51539:5;51536:35;51526:2;;51585:1;51582;51575:12;51526:2;51516:79;:::o

Swarm Source

ipfs://74c67d89c2e04835671c8f5feff261dd8a178791f99822ce705da864c057752c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.