ETH Price: $3,160.86 (+2.92%)
Gas: 1 Gwei

Zombie Zebras (ZEBRAS)
 

Overview

TokenID

2127

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

3,333 Zombie Zebras seeking revenge against their predators! DAO, rarity staking, and much more on the roadmap.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ZombieZebras

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-15
*/

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// 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/utils/Strings.sol


// 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/Address.sol


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

pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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/token/ERC721/IERC721Receiver.sol


// 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/utils/introspection/IERC165.sol


// 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/utils/introspection/ERC165.sol


// 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/IERC721.sol


// 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/extensions/IERC721Metadata.sol


// 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/Context.sol


// 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/token/ERC721/ERC721.sol


// OpenZeppelin Contracts v4.4.1 (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);
    }

    /**
     * @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);
    }

    /**
     * @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 of token that is not own");
        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);
    }

    /**
     * @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 {}
}

// File: @openzeppelin/contracts/access/Ownable.sol


// 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: ZombieZebras.sol


pragma solidity 0.8.0;





contract ZombieZebras is Ownable, ERC721, ReentrancyGuard {

    uint256 public nftPrice = 0.05 ether;

    uint256 public nftLimit = 3333;
    uint256 public giftRemaining = 150;
    uint256 public capPresale = 15;
    uint256 public capPublic = 20;

    uint256 public totalSupply = 0;
    bool public salePresale = false;
    bool public salePublic = false;

    bytes32 public merkleRoot;

    string public baseURI = "";

    mapping(address => uint256) public presaleAddresses;

    constructor(string memory _initURI, bytes32 _merkleRoot)
        ERC721("Zombie Zebras", "ZEBRAS")
    {
        baseURI = _initURI;
        merkleRoot = _merkleRoot;
    }

    function mint(address _to, uint256 _amount) public payable nonReentrant {
        require(salePublic == true, "PUBLIC_NOT_STARTED");
        require(_amount <= capPublic, "MINT_CAP_REACHED");
        require(
            totalSupply + _amount <= (nftLimit - giftRemaining),
            "NFT_LIMIT_REACHED"
        );
        require(msg.value == nftPrice * _amount, "INCORRECT_VALUE");
        for (uint256 i = 0; i < _amount; i++) {
            _safeMint(_to, totalSupply);
            totalSupply++;
        }
    }

    function mintPresale(
        address _to,
        uint256 _amount,
        bytes32[] calldata proof
    ) public payable nonReentrant {
        require(salePresale == true, "PRESALE_NOT_STARTED");
        require(
            MerkleProof.verify(
                proof,
                merkleRoot,
                keccak256(abi.encodePacked(_msgSender()))
            ),
            "ADDRESS_NOT_WHITELISTED"
        );
        require(presaleAddresses[_msgSender()] + _amount <= capPresale , "MINT_CAP_REACHED");
        require(
            totalSupply + _amount <= (nftLimit - giftRemaining),
            "NFT_LIMIT_REACHED"
        );
        require(msg.value == nftPrice * _amount, "INCORRECT_VALUE");
        for (uint256 i = 0; i < _amount; i++) {
            _safeMint(_to, totalSupply);
            totalSupply++;
        }
        presaleAddresses[_msgSender()] += _amount;
    }

    function gift(address[] calldata _tos) external onlyOwner nonReentrant {
        require(totalSupply + _tos.length <= nftLimit, "NFT_LIMIT_REACHED");
        for (uint256 i = 0; i < _tos.length; i++) {
            _safeMint(_tos[i], totalSupply);
            totalSupply++;
            if (giftRemaining > 0) {
                giftRemaining--;
            }
        }
    }

    function tokensOfOwnerByIndex(address _owner, uint256 _index)
        public
        view
        returns (uint256)
    {
        return tokensOfOwner(_owner)[_index];
    }

    function tokensOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 _tokenCount = balanceOf(_owner);
        uint256[] memory _tokenIds = new uint256[](_tokenCount);
        uint256 _tokenIndex = 0;
        for (uint256 i = 0; i < totalSupply; i++) {
            if (ownerOf(i) == _owner) {
                _tokenIds[_tokenIndex] = i;
                _tokenIndex++;
            }
        }
        return _tokenIds;
    }

    function withdraw() public onlyOwner {
        uint256 _balance = address(this).balance;
        address TEAM4 = 0xEd21181Db11A5c02AB358B5ce51654Ae7d7d739A;
        address TEAM3 = 0x80665f9ba68501d383B01B16906775b86e8fe313;
        address TEAM2 = 0xBD35580b5B81E3EcB6Bd33Ed2B090a77fB70Ded5;

        (bool t4tx, ) = payable(TEAM4).call{
            value: (_balance * 360) / 1000
        }("");
        require(t4tx, "TEAM4_TX_FAILED");

        (bool t3tx, ) = payable(TEAM3).call{
            value: (_balance * 260) / 1000
        }("");
        require(t3tx, "TEAM3_TX_FAILED");

        (bool t2tx, ) = payable(TEAM2).call{
            value: (_balance * 130) / 1000
        }("");
        require(t2tx, "TEAM2_TX_FAILED");

        (bool t1tx, ) = payable(_msgSender()).call{
            value: address(this).balance
        }("");
        require(t1tx, "TEAM1_TX_FAILED");
    }

    function toggleSalePresale() public onlyOwner {
        salePresale = !salePresale;
    }

    function toggleSalePublic() public onlyOwner {
        salePublic = !salePublic;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setNftPrice(uint256 _nftPrice) public onlyOwner {
        nftPrice = _nftPrice;
    }

    function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function contractURI() public view returns (string memory) {
        return string(abi.encodePacked(baseURI, "contract"));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initURI","type":"string"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"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":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"},{"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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"capPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"capPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tos","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"giftRemaining","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":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"presaleAddresses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"salePresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"salePublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftPrice","type":"uint256"}],"name":"setNftPrice","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":[],"name":"toggleSalePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSalePublic","outputs":[],"stateMutability":"nonpayable","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":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokensOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

66b1a2bc2ec50000600855610d056009556096600a55600f600b556014600c556000600d819055600e805461ffff1916905560a0604081905260808290526200004c916010919062000183565b503480156200005a57600080fd5b5060405162002ee238038062002ee28339810160408190526200007d9162000229565b6040518060400160405280600d81526020016c5a6f6d626965205a656272617360981b815250604051806040016040528060068152602001655a454252415360d01b815250620000dc620000d66200012f60201b60201c565b62000133565b8151620000f190600190602085019062000183565b5080516200010790600290602084019062000183565b505060016007555081516200012490601090602085019062000183565b50600f555062000353565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001919062000300565b90600052602060002090601f016020900481019282620001b5576000855562000200565b82601f10620001d057805160ff191683800117855562000200565b8280016001018555821562000200579182015b8281111562000200578251825591602001919060010190620001e3565b506200020e92915062000212565b5090565b5b808211156200020e576000815560010162000213565b600080604083850312156200023c578182fd5b82516001600160401b038082111562000253578384fd5b818501915085601f83011262000267578384fd5b8151818111156200027c576200027c6200033d565b6040516020601f8301601f1916820181018481118382101715620002a457620002a46200033d565b6040528282528483018101891015620002bb578687fd5b8693505b82841015620002de5784840181015182850182015292830192620002bf565b82841115620002ef57868184840101525b969096015195979596505050505050565b6002810460018216806200031557607f821691505b602082108114156200033757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612b7f80620003636000396000f3fe6080604052600436106102305760003560e01c8063688279891161012e578063a22cb465116100ab578063d04271501161006f578063d042715014610602578063d46cddd414610617578063e8a3d4851461062c578063e985e9c514610641578063f2fde38b1461066157610230565b8063a22cb46514610578578063b695e07614610598578063b88d4fde146105ad578063c87b56dd146105cd578063cb4e8326146105ed57610230565b80637cb64759116100f25780637cb64759146104e15780637d9a7a4c146105015780638462151c146105215780638da5cb5b1461054e57806395d89b411461056357610230565b8063688279891461046f5780636c0360eb146104825780636d3ee7781461049757806370a08231146104ac578063715018a6146104cc57610230565b80632a7065ea116101bc5780634707f44f116101805780634707f44f146103da5780634bffad9f146103fa57806355f804b31461040f5780636352211e1461042f57806366fca9801461044f57610230565b80632a7065ea146103685780632eb4a7ab1461037d5780633ccfd60b1461039257806340c10f19146103a757806342842e0e146103ba57610230565b80630d39fc81116102035780630d39fc81146102dc578063163e1e61146102fe57806318160ddd1461031e57806320a447941461033357806323b872dd1461034857610230565b806301ffc9a71461023557806306fdde031461026b578063081812fc1461028d578063095ea7b3146102ba575b600080fd5b34801561024157600080fd5b50610255610250366004612114565b610681565b6040516102629190612360565b60405180910390f35b34801561027757600080fd5b506102806106c9565b6040516102629190612374565b34801561029957600080fd5b506102ad6102a83660046120fc565b61075b565b60405161026291906122cb565b3480156102c657600080fd5b506102da6102d536600461203b565b6107a7565b005b3480156102e857600080fd5b506102f161083f565b604051610262919061236b565b34801561030a57600080fd5b506102da6103193660046120bc565b610845565b34801561032a57600080fd5b506102f1610975565b34801561033f57600080fd5b5061025561097b565b34801561035457600080fd5b506102da610363366004611f4d565b610989565b34801561037457600080fd5b506102f16109c1565b34801561038957600080fd5b506102f16109c7565b34801561039e57600080fd5b506102da6109cd565b6102da6103b536600461203b565b610c8b565b3480156103c657600080fd5b506102da6103d5366004611f4d565b610da9565b3480156103e657600080fd5b506102f16103f536600461203b565b610dc4565b34801561040657600080fd5b506102da610dfe565b34801561041b57600080fd5b506102da61042a36600461214c565b610e5a565b34801561043b57600080fd5b506102ad61044a3660046120fc565b610eb0565b34801561045b57600080fd5b506102f161046a366004611f01565b610ee5565b6102da61047d366004612064565b610ef7565b34801561048e57600080fd5b5061028061111d565b3480156104a357600080fd5b506102556111ab565b3480156104b857600080fd5b506102f16104c7366004611f01565b6111b4565b3480156104d857600080fd5b506102da6111f8565b3480156104ed57600080fd5b506102da6104fc3660046120fc565b611243565b34801561050d57600080fd5b506102da61051c3660046120fc565b611287565b34801561052d57600080fd5b5061054161053c366004611f01565b6112cb565b604051610262919061231c565b34801561055a57600080fd5b506102ad6113b5565b34801561056f57600080fd5b506102806113c4565b34801561058457600080fd5b506102da610593366004612001565b6113d3565b3480156105a457600080fd5b506102da6113e5565b3480156105b957600080fd5b506102da6105c8366004611f88565b611438565b3480156105d957600080fd5b506102806105e83660046120fc565b611477565b3480156105f957600080fd5b506102f16114fa565b34801561060e57600080fd5b506102f1611500565b34801561062357600080fd5b506102f1611506565b34801561063857600080fd5b5061028061150c565b34801561064d57600080fd5b5061025561065c366004611f1b565b611534565b34801561066d57600080fd5b506102da61067c366004611f01565b611562565b60006001600160e01b031982166380ac58cd60e01b14806106b257506001600160e01b03198216635b5e139f60e01b145b806106c157506106c1826115d3565b90505b919050565b6060600180546106d890612a87565b80601f016020809104026020016040519081016040528092919081815260200182805461070490612a87565b80156107515780601f1061072657610100808354040283529160200191610751565b820191906000526020600020905b81548152906001019060200180831161073457829003601f168201915b5050505050905090565b6000610766826115ec565b61078b5760405162461bcd60e51b81526004016107829061274c565b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006107b282610eb0565b9050806001600160a01b0316836001600160a01b031614156107e65760405162461bcd60e51b815260040161078290612865565b806001600160a01b03166107f8611609565b6001600160a01b0316148061081457506108148161065c611609565b6108305760405162461bcd60e51b815260040161078290612627565b61083a838361160d565b505050565b60085481565b61084d611609565b6001600160a01b031661085e6113b5565b6001600160a01b0316146108845760405162461bcd60e51b815260040161078290612798565b600260075414156108a75760405162461bcd60e51b815260040161078290612975565b6002600755600954600d546108bd9083906129e2565b11156108db5760405162461bcd60e51b8152600401610782906125fc565b60005b8181101561096b5761092683838381811061090957634e487b7160e01b600052603260045260246000fd5b905060200201602081019061091e9190611f01565b600d5461167b565b600d805490600061093683612ac2565b9091555050600a541561095957600a805490600061095383612a70565b91905055505b8061096381612ac2565b9150506108de565b5050600160075550565b600d5481565b600e54610100900460ff1681565b61099a610994611609565b82611695565b6109b65760405162461bcd60e51b8152600401610782906128f8565b61083a83838361171a565b60095481565b600f5481565b6109d5611609565b6001600160a01b03166109e66113b5565b6001600160a01b031614610a0c5760405162461bcd60e51b815260040161078290612798565b4773ed21181db11a5c02ab358b5ce51654ae7d7d739a7380665f9ba68501d383b01b16906775b86e8fe31373bd35580b5b81e3ecb6bd33ed2b090a77fb70ded56000836103e8610a5e87610168612a0e565b610a6891906129fa565b604051610a74906122c8565b60006040518083038185875af1925050503d8060008114610ab1576040519150601f19603f3d011682016040523d82523d6000602084013e610ab6565b606091505b5050905080610ad75760405162461bcd60e51b8152600401610782906125aa565b60006001600160a01b0384166103e8610af288610104612a0e565b610afc91906129fa565b604051610b08906122c8565b60006040518083038185875af1925050503d8060008114610b45576040519150601f19603f3d011682016040523d82523d6000602084013e610b4a565b606091505b5050905080610b6b5760405162461bcd60e51b8152600401610782906125d3565b60006001600160a01b0384166103e8610b85896082612a0e565b610b8f91906129fa565b604051610b9b906122c8565b60006040518083038185875af1925050503d8060008114610bd8576040519150601f19603f3d011682016040523d82523d6000602084013e610bdd565b606091505b5050905080610bfe5760405162461bcd60e51b8152600401610782906128cf565b6000610c08611609565b6001600160a01b031647604051610c1e906122c8565b60006040518083038185875af1925050503d8060008114610c5b576040519150601f19603f3d011682016040523d82523d6000602084013e610c60565b606091505b5050905080610c815760405162461bcd60e51b8152600401610782906128a6565b5050505050505050565b60026007541415610cae5760405162461bcd60e51b815260040161078290612975565b6002600755600e5460ff610100909104161515600114610ce05760405162461bcd60e51b815260040161078290612949565b600c54811115610d025760405162461bcd60e51b8152600401610782906129ac565b600a54600954610d129190612a2d565b81600d54610d2091906129e2565b1115610d3e5760405162461bcd60e51b8152600401610782906125fc565b80600854610d4c9190612a0e565b3414610d6a5760405162461bcd60e51b81526004016107829061241f565b60005b8181101561096b57610d8183600d5461167b565b600d8054906000610d9183612ac2565b91905055508080610da190612ac2565b915050610d6d565b61083a83838360405180602001604052806000815250611438565b6000610dcf836112cb565b8281518110610dee57634e487b7160e01b600052603260045260246000fd5b6020026020010151905092915050565b610e06611609565b6001600160a01b0316610e176113b5565b6001600160a01b031614610e3d5760405162461bcd60e51b815260040161078290612798565b600e805461ff001981166101009182900460ff1615909102179055565b610e62611609565b6001600160a01b0316610e736113b5565b6001600160a01b031614610e995760405162461bcd60e51b815260040161078290612798565b8051610eac906010906020840190611d98565b5050565b6000818152600360205260408120546001600160a01b0316806106c15760405162461bcd60e51b8152600401610782906126ce565b60116020526000908152604090205481565b60026007541415610f1a5760405162461bcd60e51b815260040161078290612975565b6002600755600e5460ff161515600114610f465760405162461bcd60e51b81526004016107829061247f565b610fb482828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600f549150610f899050611609565b604051602001610f9991906121d2565b60405160208183030381529060405280519060200120611847565b610fd05760405162461bcd60e51b8152600401610782906124ac565b600b548360116000610fe0611609565b6001600160a01b03166001600160a01b031681526020019081526020016000205461100b91906129e2565b11156110295760405162461bcd60e51b8152600401610782906129ac565b600a546009546110399190612a2d565b83600d5461104791906129e2565b11156110655760405162461bcd60e51b8152600401610782906125fc565b826008546110739190612a0e565b34146110915760405162461bcd60e51b81526004016107829061241f565b60005b838110156110d0576110a885600d5461167b565b600d80549060006110b883612ac2565b919050555080806110c890612ac2565b915050611094565b5082601160006110de611609565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461110d91906129e2565b9091555050600160075550505050565b6010805461112a90612a87565b80601f016020809104026020016040519081016040528092919081815260200182805461115690612a87565b80156111a35780601f10611178576101008083540402835291602001916111a3565b820191906000526020600020905b81548152906001019060200180831161118657829003601f168201915b505050505081565b600e5460ff1681565b60006001600160a01b0382166111dc5760405162461bcd60e51b815260040161078290612684565b506001600160a01b031660009081526004602052604090205490565b611200611609565b6001600160a01b03166112116113b5565b6001600160a01b0316146112375760405162461bcd60e51b815260040161078290612798565b611241600061185d565b565b61124b611609565b6001600160a01b031661125c6113b5565b6001600160a01b0316146112825760405162461bcd60e51b815260040161078290612798565b600f55565b61128f611609565b6001600160a01b03166112a06113b5565b6001600160a01b0316146112c65760405162461bcd60e51b815260040161078290612798565b600855565b606060006112d8836111b4565b905060008167ffffffffffffffff81111561130357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561132c578160200160208202803683370190505b5090506000805b600d548110156113ab57856001600160a01b031661135082610eb0565b6001600160a01b03161415611399578083838151811061138057634e487b7160e01b600052603260045260246000fd5b60209081029190910101528161139581612ac2565b9250505b806113a381612ac2565b915050611333565b5090949350505050565b6000546001600160a01b031690565b6060600280546106d890612a87565b610eac6113de611609565b83836118ad565b6113ed611609565b6001600160a01b03166113fe6113b5565b6001600160a01b0316146114245760405162461bcd60e51b815260040161078290612798565b600e805460ff19811660ff90911615179055565b611449611443611609565b83611695565b6114655760405162461bcd60e51b8152600401610782906128f8565b61147184848484611950565b50505050565b6060611482826115ec565b61149e5760405162461bcd60e51b815260040161078290612816565b60006114a8611983565b905060008151116114c857604051806020016040528060008152506114f3565b806114d284611992565b6040516020016114e39291906121fd565b6040516020818303038152906040525b9392505050565b600c5481565b600a5481565b600b5481565b60606010604051602001611520919061222c565b604051602081830303815290604052905090565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61156a611609565b6001600160a01b031661157b6113b5565b6001600160a01b0316146115a15760405162461bcd60e51b815260040161078290612798565b6001600160a01b0381166115c75760405162461bcd60e51b8152600401610782906123d9565b6115d08161185d565b50565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600360205260409020546001600160a01b0316151590565b3390565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061164282610eb0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610eac828260405180602001604052806000815250611aad565b60006116a0826115ec565b6116bc5760405162461bcd60e51b81526004016107829061255e565b60006116c783610eb0565b9050806001600160a01b0316846001600160a01b031614806117025750836001600160a01b03166116f78461075b565b6001600160a01b0316145b8061171257506117128185611534565b949350505050565b826001600160a01b031661172d82610eb0565b6001600160a01b0316146117535760405162461bcd60e51b8152600401610782906127cd565b6001600160a01b0382166117795760405162461bcd60e51b8152600401610782906124e3565b61178483838361083a565b61178f60008261160d565b6001600160a01b03831660009081526004602052604081208054600192906117b8908490612a2d565b90915550506001600160a01b03821660009081526004602052604081208054600192906117e69084906129e2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000826118548584611ae0565b14949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b031614156118df5760405162461bcd60e51b815260040161078290612527565b6001600160a01b0383811660008181526006602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190611943908590612360565b60405180910390a3505050565b61195b84848461171a565b61196784848484611b98565b6114715760405162461bcd60e51b815260040161078290612387565b6060601080546106d890612a87565b6060816119b757506040805180820190915260018152600360fc1b60208201526106c4565b8160005b81156119e157806119cb81612ac2565b91506119da9050600a836129fa565b91506119bb565b60008167ffffffffffffffff811115611a0a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a34576020820181803683370190505b5090505b841561171257611a49600183612a2d565b9150611a56600a86612add565b611a619060306129e2565b60f81b818381518110611a8457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611aa6600a866129fa565b9450611a38565b611ab78383611cb3565b611ac46000848484611b98565b61083a5760405162461bcd60e51b815260040161078290612387565b600081815b8451811015611b90576000858281518110611b1057634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611b51578281604051602001611b349291906121ef565b604051602081830303815290604052805190602001209250611b7d565b8083604051602001611b649291906121ef565b6040516020818303038152906040528051906020012092505b5080611b8881612ac2565b915050611ae5565b509392505050565b6000611bac846001600160a01b0316611d92565b15611ca857836001600160a01b031663150b7a02611bc8611609565b8786866040518563ffffffff1660e01b8152600401611bea94939291906122df565b602060405180830381600087803b158015611c0457600080fd5b505af1925050508015611c34575060408051601f3d908101601f19168201909252611c3191810190612130565b60015b611c8e573d808015611c62576040519150601f19603f3d011682016040523d82523d6000602084013e611c67565b606091505b508051611c865760405162461bcd60e51b815260040161078290612387565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611712565b506001949350505050565b6001600160a01b038216611cd95760405162461bcd60e51b815260040161078290612717565b611ce2816115ec565b15611cff5760405162461bcd60e51b815260040161078290612448565b611d0b6000838361083a565b6001600160a01b0382166000908152600460205260408120805460019290611d349084906129e2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611da490612a87565b90600052602060002090601f016020900481019282611dc65760008555611e0c565b82601f10611ddf57805160ff1916838001178555611e0c565b82800160010185558215611e0c579182015b82811115611e0c578251825591602001919060010190611df1565b50611e18929150611e1c565b5090565b5b80821115611e185760008155600101611e1d565b600067ffffffffffffffff80841115611e4c57611e4c612b1d565b604051601f8501601f191681016020018281118282101715611e7057611e70612b1d565b604052848152915081838501861015611e8857600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146106c457600080fd5b60008083601f840112611ec9578081fd5b50813567ffffffffffffffff811115611ee0578182fd5b6020830191508360208083028501011115611efa57600080fd5b9250929050565b600060208284031215611f12578081fd5b6114f382611ea1565b60008060408385031215611f2d578081fd5b611f3683611ea1565b9150611f4460208401611ea1565b90509250929050565b600080600060608486031215611f61578081fd5b611f6a84611ea1565b9250611f7860208501611ea1565b9150604084013590509250925092565b60008060008060808587031215611f9d578081fd5b611fa685611ea1565b9350611fb460208601611ea1565b925060408501359150606085013567ffffffffffffffff811115611fd6578182fd5b8501601f81018713611fe6578182fd5b611ff587823560208401611e31565b91505092959194509250565b60008060408385031215612013578182fd5b61201c83611ea1565b915060208301358015158114612030578182fd5b809150509250929050565b6000806040838503121561204d578182fd5b61205683611ea1565b946020939093013593505050565b60008060008060608587031215612079578384fd5b61208285611ea1565b935060208501359250604085013567ffffffffffffffff8111156120a4578283fd5b6120b087828801611eb8565b95989497509550505050565b600080602083850312156120ce578182fd5b823567ffffffffffffffff8111156120e4578283fd5b6120f085828601611eb8565b90969095509350505050565b60006020828403121561210d578081fd5b5035919050565b600060208284031215612125578081fd5b81356114f381612b33565b600060208284031215612141578081fd5b81516114f381612b33565b60006020828403121561215d578081fd5b813567ffffffffffffffff811115612173578182fd5b8201601f81018413612183578182fd5b61171284823560208401611e31565b600081518084526121aa816020860160208601612a44565b601f01601f19169290920160200192915050565b6718dbdb9d1c9858dd60c21b815260080190565b60609190911b6bffffffffffffffffffffffff1916815260140190565b918252602082015260400190565b6000835161220f818460208801612a44565b835190830190612223818360208801612a44565b01949350505050565b815460009081906002810460018083168061224857607f831692505b602080841082141561226857634e487b7160e01b87526022600452602487fd5b81801561227c576001811461228d576122b9565b60ff198616895284890196506122b9565b6122968a6129d6565b885b868110156122b15781548b820152908501908301612298565b505084890196505b505050505050611712816121be565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231290830184612192565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561235457835183529284019291840191600101612338565b50909695505050505050565b901515815260200190565b90815260200190565b6000602082526114f36020830184612192565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600f908201526e494e434f52524543545f56414c554560881b604082015260600190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526013908201527214149154d0531157d393d517d4d51054951151606a1b604082015260600190565b60208082526017908201527f414444524553535f4e4f545f57484954454c4953544544000000000000000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252600f908201526e151150534d17d51617d19052531151608a1b604082015260600190565b6020808252600f908201526e151150534cd7d51617d19052531151608a1b604082015260600190565b60208082526011908201527013919517d31253525517d4915050d21151607a1b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252600f908201526e151150534c57d51617d19052531151608a1b604082015260600190565b6020808252600f908201526e151150534c97d51617d19052531151608a1b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260129082015271141550931250d7d393d517d4d5105495115160721b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526010908201526f1352539517d0d05417d4915050d2115160821b604082015260600190565b60009081526020902090565b600082198211156129f5576129f5612af1565b500190565b600082612a0957612a09612b07565b500490565b6000816000190483118215151615612a2857612a28612af1565b500290565b600082821015612a3f57612a3f612af1565b500390565b60005b83811015612a5f578181015183820152602001612a47565b838111156114715750506000910152565b600081612a7f57612a7f612af1565b506000190190565b600281046001821680612a9b57607f821691505b60208210811415612abc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ad657612ad6612af1565b5060010190565b600082612aec57612aec612b07565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146115d057600080fdfea2646970667358221220808aa39f3eb32da8254e3ffa98900c2af2ca2e10529ef8796700676b7f3352e464736f6c634300080000330000000000000000000000000000000000000000000000000000000000000040c7a02825579cee0659be3883fdab8f6bbfba069ed2ed3659e33827e6d1140a900000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6378466153584548565451766f62695633694a4e326e42775267436b39787048447576696a6354753936696f2f00000000000000000000

Deployed Bytecode

0x6080604052600436106102305760003560e01c8063688279891161012e578063a22cb465116100ab578063d04271501161006f578063d042715014610602578063d46cddd414610617578063e8a3d4851461062c578063e985e9c514610641578063f2fde38b1461066157610230565b8063a22cb46514610578578063b695e07614610598578063b88d4fde146105ad578063c87b56dd146105cd578063cb4e8326146105ed57610230565b80637cb64759116100f25780637cb64759146104e15780637d9a7a4c146105015780638462151c146105215780638da5cb5b1461054e57806395d89b411461056357610230565b8063688279891461046f5780636c0360eb146104825780636d3ee7781461049757806370a08231146104ac578063715018a6146104cc57610230565b80632a7065ea116101bc5780634707f44f116101805780634707f44f146103da5780634bffad9f146103fa57806355f804b31461040f5780636352211e1461042f57806366fca9801461044f57610230565b80632a7065ea146103685780632eb4a7ab1461037d5780633ccfd60b1461039257806340c10f19146103a757806342842e0e146103ba57610230565b80630d39fc81116102035780630d39fc81146102dc578063163e1e61146102fe57806318160ddd1461031e57806320a447941461033357806323b872dd1461034857610230565b806301ffc9a71461023557806306fdde031461026b578063081812fc1461028d578063095ea7b3146102ba575b600080fd5b34801561024157600080fd5b50610255610250366004612114565b610681565b6040516102629190612360565b60405180910390f35b34801561027757600080fd5b506102806106c9565b6040516102629190612374565b34801561029957600080fd5b506102ad6102a83660046120fc565b61075b565b60405161026291906122cb565b3480156102c657600080fd5b506102da6102d536600461203b565b6107a7565b005b3480156102e857600080fd5b506102f161083f565b604051610262919061236b565b34801561030a57600080fd5b506102da6103193660046120bc565b610845565b34801561032a57600080fd5b506102f1610975565b34801561033f57600080fd5b5061025561097b565b34801561035457600080fd5b506102da610363366004611f4d565b610989565b34801561037457600080fd5b506102f16109c1565b34801561038957600080fd5b506102f16109c7565b34801561039e57600080fd5b506102da6109cd565b6102da6103b536600461203b565b610c8b565b3480156103c657600080fd5b506102da6103d5366004611f4d565b610da9565b3480156103e657600080fd5b506102f16103f536600461203b565b610dc4565b34801561040657600080fd5b506102da610dfe565b34801561041b57600080fd5b506102da61042a36600461214c565b610e5a565b34801561043b57600080fd5b506102ad61044a3660046120fc565b610eb0565b34801561045b57600080fd5b506102f161046a366004611f01565b610ee5565b6102da61047d366004612064565b610ef7565b34801561048e57600080fd5b5061028061111d565b3480156104a357600080fd5b506102556111ab565b3480156104b857600080fd5b506102f16104c7366004611f01565b6111b4565b3480156104d857600080fd5b506102da6111f8565b3480156104ed57600080fd5b506102da6104fc3660046120fc565b611243565b34801561050d57600080fd5b506102da61051c3660046120fc565b611287565b34801561052d57600080fd5b5061054161053c366004611f01565b6112cb565b604051610262919061231c565b34801561055a57600080fd5b506102ad6113b5565b34801561056f57600080fd5b506102806113c4565b34801561058457600080fd5b506102da610593366004612001565b6113d3565b3480156105a457600080fd5b506102da6113e5565b3480156105b957600080fd5b506102da6105c8366004611f88565b611438565b3480156105d957600080fd5b506102806105e83660046120fc565b611477565b3480156105f957600080fd5b506102f16114fa565b34801561060e57600080fd5b506102f1611500565b34801561062357600080fd5b506102f1611506565b34801561063857600080fd5b5061028061150c565b34801561064d57600080fd5b5061025561065c366004611f1b565b611534565b34801561066d57600080fd5b506102da61067c366004611f01565b611562565b60006001600160e01b031982166380ac58cd60e01b14806106b257506001600160e01b03198216635b5e139f60e01b145b806106c157506106c1826115d3565b90505b919050565b6060600180546106d890612a87565b80601f016020809104026020016040519081016040528092919081815260200182805461070490612a87565b80156107515780601f1061072657610100808354040283529160200191610751565b820191906000526020600020905b81548152906001019060200180831161073457829003601f168201915b5050505050905090565b6000610766826115ec565b61078b5760405162461bcd60e51b81526004016107829061274c565b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006107b282610eb0565b9050806001600160a01b0316836001600160a01b031614156107e65760405162461bcd60e51b815260040161078290612865565b806001600160a01b03166107f8611609565b6001600160a01b0316148061081457506108148161065c611609565b6108305760405162461bcd60e51b815260040161078290612627565b61083a838361160d565b505050565b60085481565b61084d611609565b6001600160a01b031661085e6113b5565b6001600160a01b0316146108845760405162461bcd60e51b815260040161078290612798565b600260075414156108a75760405162461bcd60e51b815260040161078290612975565b6002600755600954600d546108bd9083906129e2565b11156108db5760405162461bcd60e51b8152600401610782906125fc565b60005b8181101561096b5761092683838381811061090957634e487b7160e01b600052603260045260246000fd5b905060200201602081019061091e9190611f01565b600d5461167b565b600d805490600061093683612ac2565b9091555050600a541561095957600a805490600061095383612a70565b91905055505b8061096381612ac2565b9150506108de565b5050600160075550565b600d5481565b600e54610100900460ff1681565b61099a610994611609565b82611695565b6109b65760405162461bcd60e51b8152600401610782906128f8565b61083a83838361171a565b60095481565b600f5481565b6109d5611609565b6001600160a01b03166109e66113b5565b6001600160a01b031614610a0c5760405162461bcd60e51b815260040161078290612798565b4773ed21181db11a5c02ab358b5ce51654ae7d7d739a7380665f9ba68501d383b01b16906775b86e8fe31373bd35580b5b81e3ecb6bd33ed2b090a77fb70ded56000836103e8610a5e87610168612a0e565b610a6891906129fa565b604051610a74906122c8565b60006040518083038185875af1925050503d8060008114610ab1576040519150601f19603f3d011682016040523d82523d6000602084013e610ab6565b606091505b5050905080610ad75760405162461bcd60e51b8152600401610782906125aa565b60006001600160a01b0384166103e8610af288610104612a0e565b610afc91906129fa565b604051610b08906122c8565b60006040518083038185875af1925050503d8060008114610b45576040519150601f19603f3d011682016040523d82523d6000602084013e610b4a565b606091505b5050905080610b6b5760405162461bcd60e51b8152600401610782906125d3565b60006001600160a01b0384166103e8610b85896082612a0e565b610b8f91906129fa565b604051610b9b906122c8565b60006040518083038185875af1925050503d8060008114610bd8576040519150601f19603f3d011682016040523d82523d6000602084013e610bdd565b606091505b5050905080610bfe5760405162461bcd60e51b8152600401610782906128cf565b6000610c08611609565b6001600160a01b031647604051610c1e906122c8565b60006040518083038185875af1925050503d8060008114610c5b576040519150601f19603f3d011682016040523d82523d6000602084013e610c60565b606091505b5050905080610c815760405162461bcd60e51b8152600401610782906128a6565b5050505050505050565b60026007541415610cae5760405162461bcd60e51b815260040161078290612975565b6002600755600e5460ff610100909104161515600114610ce05760405162461bcd60e51b815260040161078290612949565b600c54811115610d025760405162461bcd60e51b8152600401610782906129ac565b600a54600954610d129190612a2d565b81600d54610d2091906129e2565b1115610d3e5760405162461bcd60e51b8152600401610782906125fc565b80600854610d4c9190612a0e565b3414610d6a5760405162461bcd60e51b81526004016107829061241f565b60005b8181101561096b57610d8183600d5461167b565b600d8054906000610d9183612ac2565b91905055508080610da190612ac2565b915050610d6d565b61083a83838360405180602001604052806000815250611438565b6000610dcf836112cb565b8281518110610dee57634e487b7160e01b600052603260045260246000fd5b6020026020010151905092915050565b610e06611609565b6001600160a01b0316610e176113b5565b6001600160a01b031614610e3d5760405162461bcd60e51b815260040161078290612798565b600e805461ff001981166101009182900460ff1615909102179055565b610e62611609565b6001600160a01b0316610e736113b5565b6001600160a01b031614610e995760405162461bcd60e51b815260040161078290612798565b8051610eac906010906020840190611d98565b5050565b6000818152600360205260408120546001600160a01b0316806106c15760405162461bcd60e51b8152600401610782906126ce565b60116020526000908152604090205481565b60026007541415610f1a5760405162461bcd60e51b815260040161078290612975565b6002600755600e5460ff161515600114610f465760405162461bcd60e51b81526004016107829061247f565b610fb482828080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600f549150610f899050611609565b604051602001610f9991906121d2565b60405160208183030381529060405280519060200120611847565b610fd05760405162461bcd60e51b8152600401610782906124ac565b600b548360116000610fe0611609565b6001600160a01b03166001600160a01b031681526020019081526020016000205461100b91906129e2565b11156110295760405162461bcd60e51b8152600401610782906129ac565b600a546009546110399190612a2d565b83600d5461104791906129e2565b11156110655760405162461bcd60e51b8152600401610782906125fc565b826008546110739190612a0e565b34146110915760405162461bcd60e51b81526004016107829061241f565b60005b838110156110d0576110a885600d5461167b565b600d80549060006110b883612ac2565b919050555080806110c890612ac2565b915050611094565b5082601160006110de611609565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461110d91906129e2565b9091555050600160075550505050565b6010805461112a90612a87565b80601f016020809104026020016040519081016040528092919081815260200182805461115690612a87565b80156111a35780601f10611178576101008083540402835291602001916111a3565b820191906000526020600020905b81548152906001019060200180831161118657829003601f168201915b505050505081565b600e5460ff1681565b60006001600160a01b0382166111dc5760405162461bcd60e51b815260040161078290612684565b506001600160a01b031660009081526004602052604090205490565b611200611609565b6001600160a01b03166112116113b5565b6001600160a01b0316146112375760405162461bcd60e51b815260040161078290612798565b611241600061185d565b565b61124b611609565b6001600160a01b031661125c6113b5565b6001600160a01b0316146112825760405162461bcd60e51b815260040161078290612798565b600f55565b61128f611609565b6001600160a01b03166112a06113b5565b6001600160a01b0316146112c65760405162461bcd60e51b815260040161078290612798565b600855565b606060006112d8836111b4565b905060008167ffffffffffffffff81111561130357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561132c578160200160208202803683370190505b5090506000805b600d548110156113ab57856001600160a01b031661135082610eb0565b6001600160a01b03161415611399578083838151811061138057634e487b7160e01b600052603260045260246000fd5b60209081029190910101528161139581612ac2565b9250505b806113a381612ac2565b915050611333565b5090949350505050565b6000546001600160a01b031690565b6060600280546106d890612a87565b610eac6113de611609565b83836118ad565b6113ed611609565b6001600160a01b03166113fe6113b5565b6001600160a01b0316146114245760405162461bcd60e51b815260040161078290612798565b600e805460ff19811660ff90911615179055565b611449611443611609565b83611695565b6114655760405162461bcd60e51b8152600401610782906128f8565b61147184848484611950565b50505050565b6060611482826115ec565b61149e5760405162461bcd60e51b815260040161078290612816565b60006114a8611983565b905060008151116114c857604051806020016040528060008152506114f3565b806114d284611992565b6040516020016114e39291906121fd565b6040516020818303038152906040525b9392505050565b600c5481565b600a5481565b600b5481565b60606010604051602001611520919061222c565b604051602081830303815290604052905090565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61156a611609565b6001600160a01b031661157b6113b5565b6001600160a01b0316146115a15760405162461bcd60e51b815260040161078290612798565b6001600160a01b0381166115c75760405162461bcd60e51b8152600401610782906123d9565b6115d08161185d565b50565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600360205260409020546001600160a01b0316151590565b3390565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061164282610eb0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610eac828260405180602001604052806000815250611aad565b60006116a0826115ec565b6116bc5760405162461bcd60e51b81526004016107829061255e565b60006116c783610eb0565b9050806001600160a01b0316846001600160a01b031614806117025750836001600160a01b03166116f78461075b565b6001600160a01b0316145b8061171257506117128185611534565b949350505050565b826001600160a01b031661172d82610eb0565b6001600160a01b0316146117535760405162461bcd60e51b8152600401610782906127cd565b6001600160a01b0382166117795760405162461bcd60e51b8152600401610782906124e3565b61178483838361083a565b61178f60008261160d565b6001600160a01b03831660009081526004602052604081208054600192906117b8908490612a2d565b90915550506001600160a01b03821660009081526004602052604081208054600192906117e69084906129e2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000826118548584611ae0565b14949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b031614156118df5760405162461bcd60e51b815260040161078290612527565b6001600160a01b0383811660008181526006602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190611943908590612360565b60405180910390a3505050565b61195b84848461171a565b61196784848484611b98565b6114715760405162461bcd60e51b815260040161078290612387565b6060601080546106d890612a87565b6060816119b757506040805180820190915260018152600360fc1b60208201526106c4565b8160005b81156119e157806119cb81612ac2565b91506119da9050600a836129fa565b91506119bb565b60008167ffffffffffffffff811115611a0a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a34576020820181803683370190505b5090505b841561171257611a49600183612a2d565b9150611a56600a86612add565b611a619060306129e2565b60f81b818381518110611a8457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611aa6600a866129fa565b9450611a38565b611ab78383611cb3565b611ac46000848484611b98565b61083a5760405162461bcd60e51b815260040161078290612387565b600081815b8451811015611b90576000858281518110611b1057634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611b51578281604051602001611b349291906121ef565b604051602081830303815290604052805190602001209250611b7d565b8083604051602001611b649291906121ef565b6040516020818303038152906040528051906020012092505b5080611b8881612ac2565b915050611ae5565b509392505050565b6000611bac846001600160a01b0316611d92565b15611ca857836001600160a01b031663150b7a02611bc8611609565b8786866040518563ffffffff1660e01b8152600401611bea94939291906122df565b602060405180830381600087803b158015611c0457600080fd5b505af1925050508015611c34575060408051601f3d908101601f19168201909252611c3191810190612130565b60015b611c8e573d808015611c62576040519150601f19603f3d011682016040523d82523d6000602084013e611c67565b606091505b508051611c865760405162461bcd60e51b815260040161078290612387565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611712565b506001949350505050565b6001600160a01b038216611cd95760405162461bcd60e51b815260040161078290612717565b611ce2816115ec565b15611cff5760405162461bcd60e51b815260040161078290612448565b611d0b6000838361083a565b6001600160a01b0382166000908152600460205260408120805460019290611d349084906129e2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611da490612a87565b90600052602060002090601f016020900481019282611dc65760008555611e0c565b82601f10611ddf57805160ff1916838001178555611e0c565b82800160010185558215611e0c579182015b82811115611e0c578251825591602001919060010190611df1565b50611e18929150611e1c565b5090565b5b80821115611e185760008155600101611e1d565b600067ffffffffffffffff80841115611e4c57611e4c612b1d565b604051601f8501601f191681016020018281118282101715611e7057611e70612b1d565b604052848152915081838501861015611e8857600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146106c457600080fd5b60008083601f840112611ec9578081fd5b50813567ffffffffffffffff811115611ee0578182fd5b6020830191508360208083028501011115611efa57600080fd5b9250929050565b600060208284031215611f12578081fd5b6114f382611ea1565b60008060408385031215611f2d578081fd5b611f3683611ea1565b9150611f4460208401611ea1565b90509250929050565b600080600060608486031215611f61578081fd5b611f6a84611ea1565b9250611f7860208501611ea1565b9150604084013590509250925092565b60008060008060808587031215611f9d578081fd5b611fa685611ea1565b9350611fb460208601611ea1565b925060408501359150606085013567ffffffffffffffff811115611fd6578182fd5b8501601f81018713611fe6578182fd5b611ff587823560208401611e31565b91505092959194509250565b60008060408385031215612013578182fd5b61201c83611ea1565b915060208301358015158114612030578182fd5b809150509250929050565b6000806040838503121561204d578182fd5b61205683611ea1565b946020939093013593505050565b60008060008060608587031215612079578384fd5b61208285611ea1565b935060208501359250604085013567ffffffffffffffff8111156120a4578283fd5b6120b087828801611eb8565b95989497509550505050565b600080602083850312156120ce578182fd5b823567ffffffffffffffff8111156120e4578283fd5b6120f085828601611eb8565b90969095509350505050565b60006020828403121561210d578081fd5b5035919050565b600060208284031215612125578081fd5b81356114f381612b33565b600060208284031215612141578081fd5b81516114f381612b33565b60006020828403121561215d578081fd5b813567ffffffffffffffff811115612173578182fd5b8201601f81018413612183578182fd5b61171284823560208401611e31565b600081518084526121aa816020860160208601612a44565b601f01601f19169290920160200192915050565b6718dbdb9d1c9858dd60c21b815260080190565b60609190911b6bffffffffffffffffffffffff1916815260140190565b918252602082015260400190565b6000835161220f818460208801612a44565b835190830190612223818360208801612a44565b01949350505050565b815460009081906002810460018083168061224857607f831692505b602080841082141561226857634e487b7160e01b87526022600452602487fd5b81801561227c576001811461228d576122b9565b60ff198616895284890196506122b9565b6122968a6129d6565b885b868110156122b15781548b820152908501908301612298565b505084890196505b505050505050611712816121be565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231290830184612192565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561235457835183529284019291840191600101612338565b50909695505050505050565b901515815260200190565b90815260200190565b6000602082526114f36020830184612192565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600f908201526e494e434f52524543545f56414c554560881b604082015260600190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526013908201527214149154d0531157d393d517d4d51054951151606a1b604082015260600190565b60208082526017908201527f414444524553535f4e4f545f57484954454c4953544544000000000000000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252600f908201526e151150534d17d51617d19052531151608a1b604082015260600190565b6020808252600f908201526e151150534cd7d51617d19052531151608a1b604082015260600190565b60208082526011908201527013919517d31253525517d4915050d21151607a1b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252600f908201526e151150534c57d51617d19052531151608a1b604082015260600190565b6020808252600f908201526e151150534c97d51617d19052531151608a1b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b602080825260129082015271141550931250d7d393d517d4d5105495115160721b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526010908201526f1352539517d0d05417d4915050d2115160821b604082015260600190565b60009081526020902090565b600082198211156129f5576129f5612af1565b500190565b600082612a0957612a09612b07565b500490565b6000816000190483118215151615612a2857612a28612af1565b500290565b600082821015612a3f57612a3f612af1565b500390565b60005b83811015612a5f578181015183820152602001612a47565b838111156114715750506000910152565b600081612a7f57612a7f612af1565b506000190190565b600281046001821680612a9b57607f821691505b60208210811415612abc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ad657612ad6612af1565b5060010190565b600082612aec57612aec612b07565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146115d057600080fdfea2646970667358221220808aa39f3eb32da8254e3ffa98900c2af2ca2e10529ef8796700676b7f3352e464736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000040c7a02825579cee0659be3883fdab8f6bbfba069ed2ed3659e33827e6d1140a900000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6378466153584548565451766f62695633694a4e326e42775267436b39787048447576696a6354753936696f2f00000000000000000000

-----Decoded View---------------
Arg [0] : _initURI (string): ipfs://QmcxFaSXEHVTQvobiV3iJN2nBwRgCk9xpHDuvijcTu96io/
Arg [1] : _merkleRoot (bytes32): 0xc7a02825579cee0659be3883fdab8f6bbfba069ed2ed3659e33827e6d1140a90

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : c7a02825579cee0659be3883fdab8f6bbfba069ed2ed3659e33827e6d1140a90
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d6378466153584548565451766f62695633694a4e326e42
Arg [4] : 775267436b39787048447576696a6354753936696f2f00000000000000000000


Deployed Bytecode Sourcemap

41174:4922:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26139:305;;;;;;;;;;-1:-1:-1;26139:305:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27084:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28643:221::-;;;;;;;;;;-1:-1:-1;28643:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;28166:411::-;;;;;;;;;;-1:-1:-1;28166:411:0;;;;;:::i;:::-;;:::i;:::-;;41241:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;43327:382::-;;;;;;;;;;-1:-1:-1;43327:382:0;;;;;:::i;:::-;;:::i;41439:30::-;;;;;;;;;;;;;:::i;41514:::-;;;;;;;;;;;;;:::i;29393:339::-;;;;;;;;;;-1:-1:-1;29393:339:0;;;;;:::i;:::-;;:::i;41286:30::-;;;;;;;;;;;;;:::i;41553:25::-;;;;;;;;;;;;;:::i;44404:912::-;;;;;;;;;;;;;:::i;41867:529::-;;;;;;:::i;:::-;;:::i;29803:185::-;;;;;;;;;;-1:-1:-1;29803:185:0;;;;;:::i;:::-;;:::i;43717:179::-;;;;;;;;;;-1:-1:-1;43717:179:0;;;;;:::i;:::-;;:::i;45423:88::-;;;;;;;;;;;;;:::i;45519:104::-;;;;;;;;;;-1:-1:-1;45519:104:0;;;;;:::i;:::-;;:::i;26778:239::-;;;;;;;;;;-1:-1:-1;26778:239:0;;;;;:::i;:::-;;:::i;41622:51::-;;;;;;;;;;-1:-1:-1;41622:51:0;;;;;:::i;:::-;;:::i;42404:915::-;;;;;;:::i;:::-;;:::i;41587:26::-;;;;;;;;;;;;;:::i;41476:31::-;;;;;;;;;;;;;:::i;26508:208::-;;;;;;;;;;-1:-1:-1;26508:208:0;;;;;:::i;:::-;;:::i;40292:103::-;;;;;;;;;;;;;:::i;45735:104::-;;;;;;;;;;-1:-1:-1;45735:104:0;;;;;:::i;:::-;;:::i;45631:96::-;;;;;;;;;;-1:-1:-1;45631:96:0;;;;;:::i;:::-;;:::i;43904:492::-;;;;;;;;;;-1:-1:-1;43904:492:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39641:87::-;;;;;;;;;;;;;:::i;27253:104::-;;;;;;;;;;;;;:::i;28936:155::-;;;;;;;;;;-1:-1:-1;28936:155:0;;;;;:::i;:::-;;:::i;45324:91::-;;;;;;;;;;;;;:::i;30059:328::-;;;;;;;;;;-1:-1:-1;30059:328:0;;;;;:::i;:::-;;:::i;27428:334::-;;;;;;;;;;-1:-1:-1;27428:334:0;;;;;:::i;:::-;;:::i;41401:29::-;;;;;;;;;;;;;:::i;41323:34::-;;;;;;;;;;;;;:::i;41364:30::-;;;;;;;;;;;;;:::i;45963:130::-;;;;;;;;;;;;;:::i;29162:164::-;;;;;;;;;;-1:-1:-1;29162:164:0;;;;;:::i;:::-;;:::i;40550:201::-;;;;;;;;;;-1:-1:-1;40550:201:0;;;;;:::i;:::-;;:::i;26139:305::-;26241:4;-1:-1:-1;;;;;;26278:40:0;;-1:-1:-1;;;26278:40:0;;:105;;-1:-1:-1;;;;;;;26335:48:0;;-1:-1:-1;;;26335:48:0;26278:105;:158;;;;26400:36;26424:11;26400:23;:36::i;:::-;26258:178;;26139:305;;;;:::o;27084:100::-;27138:13;27171:5;27164:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27084:100;:::o;28643:221::-;28719:7;28747:16;28755:7;28747;:16::i;:::-;28739:73;;;;-1:-1:-1;;;28739:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;28832:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28832:24:0;;28643:221::o;28166:411::-;28247:13;28263:23;28278:7;28263:14;:23::i;:::-;28247:39;;28311:5;-1:-1:-1;;;;;28305:11:0;:2;-1:-1:-1;;;;;28305:11:0;;;28297:57;;;;-1:-1:-1;;;28297:57:0;;;;;;;:::i;:::-;28405:5;-1:-1:-1;;;;;28389:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;28389:21:0;;:62;;;;28414:37;28431:5;28438:12;:10;:12::i;28414:37::-;28367:168;;;;-1:-1:-1;;;28367:168:0;;;;;;;:::i;:::-;28548:21;28557:2;28561:7;28548:8;:21::i;:::-;28166:411;;;:::o;41241:36::-;;;;:::o;43327:382::-;39872:12;:10;:12::i;:::-;-1:-1:-1;;;;;39861:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39861:23:0;;39853:68;;;;-1:-1:-1;;;39853:68:0;;;;;;;:::i;:::-;3980:1:::1;4578:7;;:19;;4570:63;;;;-1:-1:-1::0;;;4570:63:0::1;;;;;;;:::i;:::-;3980:1;4711:7;:18:::0;43446:8:::2;::::0;43417:11:::2;::::0;:25:::2;::::0;43431:4;;43417:25:::2;:::i;:::-;:37;;43409:67;;;;-1:-1:-1::0;;;43409:67:0::2;;;;;;;:::i;:::-;43492:9;43487:215;43507:15:::0;;::::2;43487:215;;;43544:31;43554:4;;43559:1;43554:7;;;;;-1:-1:-1::0;;;43554:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43563:11;;43544:9;:31::i;:::-;43590:11;:13:::0;;;:11:::2;:13;::::0;::::2;:::i;:::-;::::0;;;-1:-1:-1;;43622:13:0::2;::::0;:17;43618:73:::2;;43660:13;:15:::0;;;:13:::2;:15;::::0;::::2;:::i;:::-;;;;;;43618:73;43524:3:::0;::::2;::::0;::::2;:::i;:::-;;;;43487:215;;;-1:-1:-1::0;;3936:1:0::1;4890:7;:22:::0;-1:-1:-1;43327:382:0:o;41439:30::-;;;;:::o;41514:::-;;;;;;;;;:::o;29393:339::-;29588:41;29607:12;:10;:12::i;:::-;29621:7;29588:18;:41::i;:::-;29580:103;;;;-1:-1:-1;;;29580:103:0;;;;;;;:::i;:::-;29696:28;29706:4;29712:2;29716:7;29696:9;:28::i;41286:30::-;;;;:::o;41553:25::-;;;;:::o;44404:912::-;39872:12;:10;:12::i;:::-;-1:-1:-1;;;;;39861:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39861:23:0;;39853:68;;;;-1:-1:-1;;;39853:68:0;;;;;;;:::i;:::-;44471:21:::1;44519:42;44588;44657;44452:16;44519:42:::0;44788:4:::1;44770:14;44471:21:::0;44781:3:::1;44770:14;:::i;:::-;44769:23;;;;:::i;:::-;44728:79;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44712:95;;;44826:4;44818:32;;;;-1:-1:-1::0;;;44818:32:0::1;;;;;;;:::i;:::-;44864:9;-1:-1:-1::0;;;;;44879:19:0;::::1;44939:4;44921:14;:8:::0;44932:3:::1;44921:14;:::i;:::-;44920:23;;;;:::i;:::-;44879:79;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44863:95;;;44977:4;44969:32;;;;-1:-1:-1::0;;;44969:32:0::1;;;;;;;:::i;:::-;45015:9;-1:-1:-1::0;;;;;45030:19:0;::::1;45090:4;45072:14;:8:::0;45083:3:::1;45072:14;:::i;:::-;45071:23;;;;:::i;:::-;45030:79;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45014:95;;;45128:4;45120:32;;;;-1:-1:-1::0;;;45120:32:0::1;;;;;;;:::i;:::-;45166:9;45189:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;45181:26:0::1;45229:21;45181:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45165:100;;;45284:4;45276:32;;;;-1:-1:-1::0;;;45276:32:0::1;;;;;;;:::i;:::-;39932:1;;;;;;;;44404:912::o:0;41867:529::-;3980:1;4578:7;;:19;;4570:63;;;;-1:-1:-1;;;4570:63:0;;;;;;;:::i;:::-;3980:1;4711:7;:18;41958:10:::1;::::0;::::1;;::::0;;::::1;;:18;;:10;:18;41950:49;;;;-1:-1:-1::0;;;41950:49:0::1;;;;;;;:::i;:::-;42029:9;;42018:7;:20;;42010:49;;;;-1:-1:-1::0;;;42010:49:0::1;;;;;;;:::i;:::-;42129:13;;42118:8;;:24;;;;:::i;:::-;42106:7;42092:11;;:21;;;;:::i;:::-;:51;;42070:118;;;;-1:-1:-1::0;;;42070:118:0::1;;;;;;;:::i;:::-;42231:7;42220:8;;:18;;;;:::i;:::-;42207:9;:31;42199:59;;;;-1:-1:-1::0;;;42199:59:0::1;;;;;;;:::i;:::-;42274:9;42269:120;42293:7;42289:1;:11;42269:120;;;42322:27;42332:3;42337:11;;42322:9;:27::i;:::-;42364:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;;;;;;42302:3;;;;;:::i;:::-;;;;42269:120;;29803:185:::0;29941:39;29958:4;29964:2;29968:7;29941:39;;;;;;;;;;;;:16;:39::i;43717:179::-;43827:7;43859:21;43873:6;43859:13;:21::i;:::-;43881:6;43859:29;;;;;;-1:-1:-1;;;43859:29:0;;;;;;;;;;;;;;;43852:36;;43717:179;;;;:::o;45423:88::-;39872:12;:10;:12::i;:::-;-1:-1:-1;;;;;39861:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39861:23:0;;39853:68;;;;-1:-1:-1;;;39853:68:0;;;;;;;:::i;:::-;45493:10:::1;::::0;;-1:-1:-1;;45479:24:0;::::1;45493:10;::::0;;;::::1;;;45492:11;45479:24:::0;;::::1;;::::0;;45423:88::o;45519:104::-;39872:12;:10;:12::i;:::-;-1:-1:-1;;;;;39861:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39861:23:0;;39853:68;;;;-1:-1:-1;;;39853:68:0;;;;;;;:::i;:::-;45594:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;45519:104:::0;:::o;26778:239::-;26850:7;26886:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26886:16:0;26921:19;26913:73;;;;-1:-1:-1;;;26913:73:0;;;;;;;:::i;41622:51::-;;;;;;;;;;;;;:::o;42404:915::-;3980:1;4578:7;;:19;;4570:63;;;;-1:-1:-1;;;4570:63:0;;;;;;;:::i;:::-;3980:1;4711:7;:18;42562:11:::1;::::0;::::1;;:19;;:11:::0;:19:::1;42554:51;;;;-1:-1:-1::0;;;42554:51:0::1;;;;;;;:::i;:::-;42638:146;42675:5;;42638:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;42699:10:0::1;::::0;;-1:-1:-1;42755:12:0::1;::::0;-1:-1:-1;42755:10:0::1;:12::i;:::-;42738:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;42728:41;;;;;;42638:18;:146::i;:::-;42616:219;;;;-1:-1:-1::0;;;42616:219:0::1;;;;;;;:::i;:::-;42898:10;;42887:7;42854:16;:30;42871:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;42854:30:0::1;-1:-1:-1::0;;;;;42854:30:0::1;;;;;;;;;;;;;:40;;;;:::i;:::-;:54;;42846:84;;;;-1:-1:-1::0;;;42846:84:0::1;;;;;;;:::i;:::-;43000:13;;42989:8;;:24;;;;:::i;:::-;42977:7;42963:11;;:21;;;;:::i;:::-;:51;;42941:118;;;;-1:-1:-1::0;;;42941:118:0::1;;;;;;;:::i;:::-;43102:7;43091:8;;:18;;;;:::i;:::-;43078:9;:31;43070:59;;;;-1:-1:-1::0;;;43070:59:0::1;;;;;;;:::i;:::-;43145:9;43140:120;43164:7;43160:1;:11;43140:120;;;43193:27;43203:3;43208:11;;43193:9;:27::i;:::-;43235:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;;;;;;43173:3;;;;;:::i;:::-;;;;43140:120;;;;43304:7;43270:16;:30;43287:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43270:30:0::1;-1:-1:-1::0;;;;;43270:30:0::1;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;3936:1:0;4890:7;:22;-1:-1:-1;;;;42404:915:0:o;41587:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41476:31::-;;;;;;:::o;26508:208::-;26580:7;-1:-1:-1;;;;;26608:19:0;;26600:74;;;;-1:-1:-1;;;26600:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;26692:16:0;;;;;:9;:16;;;;;;;26508:208::o;40292:103::-;39872:12;:10;:12::i;:::-;-1:-1:-1;;;;;39861:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39861:23:0;;39853:68;;;;-1:-1:-1;;;39853:68:0;;;;;;;:::i;:::-;40357:30:::1;40384:1;40357:18;:30::i;:::-;40292:103::o:0;45735:104::-;39872:12;:10;:12::i;:::-;-1:-1:-1;;;;;39861:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39861:23:0;;39853:68;;;;-1:-1:-1;;;39853:68:0;;;;;;;:::i;:::-;45807:10:::1;:24:::0;45735:104::o;45631:96::-;39872:12;:10;:12::i;:::-;-1:-1:-1;;;;;39861:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39861:23:0;;39853:68;;;;-1:-1:-1;;;39853:68:0;;;;;;;:::i;:::-;45699:8:::1;:20:::0;45631:96::o;43904:492::-;43991:16;44025:19;44047:17;44057:6;44047:9;:17::i;:::-;44025:39;;44075:26;44118:11;44104:26;;;;;;-1:-1:-1;;;44104:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44104:26:0;;44075:55;;44141:19;44180:9;44175:187;44199:11;;44195:1;:15;44175:187;;;44250:6;-1:-1:-1;;;;;44236:20:0;:10;44244:1;44236:7;:10::i;:::-;-1:-1:-1;;;;;44236:20:0;;44232:119;;;44302:1;44277:9;44287:11;44277:22;;;;;;-1:-1:-1;;;44277:22:0;;;;;;;;;;;;;;;;;;:26;44322:13;;;;:::i;:::-;;;;44232:119;44212:3;;;;:::i;:::-;;;;44175:187;;;-1:-1:-1;44379:9:0;;43904:492;-1:-1:-1;;;;43904:492:0:o;39641:87::-;39687:7;39714:6;-1:-1:-1;;;;;39714:6:0;39641:87;:::o;27253:104::-;27309:13;27342:7;27335:14;;;;;:::i;28936:155::-;29031:52;29050:12;:10;:12::i;:::-;29064:8;29074;29031:18;:52::i;45324:91::-;39872:12;:10;:12::i;:::-;-1:-1:-1;;;;;39861:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39861:23:0;;39853:68;;;;-1:-1:-1;;;39853:68:0;;;;;;;:::i;:::-;45396:11:::1;::::0;;-1:-1:-1;;45381:26:0;::::1;45396:11;::::0;;::::1;45395:12;45381:26;::::0;;45324:91::o;30059:328::-;30234:41;30253:12;:10;:12::i;:::-;30267:7;30234:18;:41::i;:::-;30226:103;;;;-1:-1:-1;;;30226:103:0;;;;;;;:::i;:::-;30340:39;30354:4;30360:2;30364:7;30373:5;30340:13;:39::i;:::-;30059:328;;;;:::o;27428:334::-;27501:13;27535:16;27543:7;27535;:16::i;:::-;27527:76;;;;-1:-1:-1;;;27527:76:0;;;;;;;:::i;:::-;27616:21;27640:10;:8;:10::i;:::-;27616:34;;27692:1;27674:7;27668:21;:25;:86;;;;;;;;;;;;;;;;;27720:7;27729:18;:7;:16;:18::i;:::-;27703:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27668:86;27661:93;27428:334;-1:-1:-1;;;27428:334:0:o;41401:29::-;;;;:::o;41323:34::-;;;;:::o;41364:30::-;;;;:::o;45963:130::-;46007:13;46064:7;46047:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;46033:52;;45963:130;:::o;29162:164::-;-1:-1:-1;;;;;29283:25:0;;;29259:4;29283:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29162:164::o;40550:201::-;39872:12;:10;:12::i;:::-;-1:-1:-1;;;;;39861:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;39861:23:0;;39853:68;;;;-1:-1:-1;;;39853:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40639:22:0;::::1;40631:73;;;;-1:-1:-1::0;;;40631:73:0::1;;;;;;;:::i;:::-;40715:28;40734:8;40715:18;:28::i;:::-;40550:201:::0;:::o;18015:157::-;-1:-1:-1;;;;;;18124:40:0;;-1:-1:-1;;;18124:40:0;18015:157;;;:::o;31897:127::-;31962:4;31986:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31986:16:0;:30;;;31897:127::o;24533:98::-;24613:10;24533:98;:::o;35879:174::-;35954:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35954:29:0;-1:-1:-1;;;;;35954:29:0;;;;;;;;:24;;36008:23;35954:24;36008:14;:23::i;:::-;-1:-1:-1;;;;;35999:46:0;;;;;;;;;;;35879:174;;:::o;32881:110::-;32957:26;32967:2;32971:7;32957:26;;;;;;;;;;;;:9;:26::i;32191:348::-;32284:4;32309:16;32317:7;32309;:16::i;:::-;32301:73;;;;-1:-1:-1;;;32301:73:0;;;;;;;:::i;:::-;32385:13;32401:23;32416:7;32401:14;:23::i;:::-;32385:39;;32454:5;-1:-1:-1;;;;;32443:16:0;:7;-1:-1:-1;;;;;32443:16:0;;:51;;;;32487:7;-1:-1:-1;;;;;32463:31:0;:20;32475:7;32463:11;:20::i;:::-;-1:-1:-1;;;;;32463:31:0;;32443:51;:87;;;;32498:32;32515:5;32522:7;32498:16;:32::i;:::-;32435:96;32191:348;-1:-1:-1;;;;32191:348:0:o;35183:578::-;35342:4;-1:-1:-1;;;;;35315:31:0;:23;35330:7;35315:14;:23::i;:::-;-1:-1:-1;;;;;35315:31:0;;35307:85;;;;-1:-1:-1;;;35307:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35411:16:0;;35403:65;;;;-1:-1:-1;;;35403:65:0;;;;;;;:::i;:::-;35481:39;35502:4;35508:2;35512:7;35481:20;:39::i;:::-;35585:29;35602:1;35606:7;35585:8;:29::i;:::-;-1:-1:-1;;;;;35627:15:0;;;;;;:9;:15;;;;;:20;;35646:1;;35627:15;:20;;35646:1;;35627:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35658:13:0;;;;;;:9;:13;;;;;:18;;35675:1;;35658:13;:18;;35675:1;;35658:18;:::i;:::-;;;;-1:-1:-1;;35687:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35687:21:0;-1:-1:-1;;;;;35687:21:0;;;;;;;;;35726:27;;35687:16;;35726:27;;;;;;;35183:578;;;:::o;908:190::-;1033:4;1086;1057:25;1070:5;1077:4;1057:12;:25::i;:::-;:33;;908:190;-1:-1:-1;;;;908:190:0:o;40911:191::-;40985:16;41004:6;;-1:-1:-1;;;;;41021:17:0;;;-1:-1:-1;;;;;;41021:17:0;;;;;;41054:40;;41004:6;;;;;;;41054:40;;40985:16;41054:40;40911:191;;:::o;36195:315::-;36350:8;-1:-1:-1;;;;;36341:17:0;:5;-1:-1:-1;;;;;36341:17:0;;;36333:55;;;;-1:-1:-1;;;36333:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36399:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;:46;;-1:-1:-1;;36399:46:0;;;;;;;36461:41;;;;;36399:46;;36461:41;:::i;:::-;;;;;;;;36195:315;;;:::o;31269:::-;31426:28;31436:4;31442:2;31446:7;31426:9;:28::i;:::-;31473:48;31496:4;31502:2;31506:7;31515:5;31473:22;:48::i;:::-;31465:111;;;;-1:-1:-1;;;31465:111:0;;;;;;;:::i;45847:108::-;45907:13;45940:7;45933:14;;;;;:::i;5292:723::-;5348:13;5569:10;5565:53;;-1:-1:-1;5596:10:0;;;;;;;;;;;;-1:-1:-1;;;5596:10:0;;;;;;5565:53;5643:5;5628:12;5684:78;5691:9;;5684:78;;5717:8;;;;:::i;:::-;;-1:-1:-1;5740:10:0;;-1:-1:-1;5748:2:0;5740:10;;:::i;:::-;;;5684:78;;;5772:19;5804:6;5794:17;;;;;;-1:-1:-1;;;5794:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5794:17:0;;5772:39;;5822:154;5829:10;;5822:154;;5856:11;5866:1;5856:11;;:::i;:::-;;-1:-1:-1;5925:10:0;5933:2;5925:5;:10;:::i;:::-;5912:24;;:2;:24;:::i;:::-;5899:39;;5882:6;5889;5882:14;;;;;;-1:-1:-1;;;5882:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;5882:56:0;;;;;;;;-1:-1:-1;5953:11:0;5962:2;5953:11;;:::i;:::-;;;5822:154;;33218:321;33348:18;33354:2;33358:7;33348:5;:18::i;:::-;33399:54;33430:1;33434:2;33438:7;33447:5;33399:22;:54::i;:::-;33377:154;;;;-1:-1:-1;;;33377:154:0;;;;;;;:::i;1460:701::-;1543:7;1586:4;1543:7;1601:523;1625:5;:12;1621:1;:16;1601:523;;;1659:20;1682:5;1688:1;1682:8;;;;;;-1:-1:-1;;;1682:8:0;;;;;;;;;;;;;;;1659:31;;1725:12;1709;:28;1705:408;;1879:12;1893;1862:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1852:55;;;;;;1837:70;;1705:408;;;2069:12;2083;2052:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2042:55;;;;;;2027:70;;1705:408;-1:-1:-1;1639:3:0;;;;:::i;:::-;;;;1601:523;;;-1:-1:-1;2141:12:0;1460:701;-1:-1:-1;;;1460:701:0:o;37075:799::-;37230:4;37251:15;:2;-1:-1:-1;;;;;37251:13:0;;:15::i;:::-;37247:620;;;37303:2;-1:-1:-1;;;;;37287:36:0;;37324:12;:10;:12::i;:::-;37338:4;37344:7;37353:5;37287:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37287:72:0;;;;;;;;-1:-1:-1;;37287:72:0;;;;;;;;;;;;:::i;:::-;;;37283:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37529:13:0;;37525:272;;37572:60;;-1:-1:-1;;;37572:60:0;;;;;;;:::i;37525:272::-;37747:6;37741:13;37732:6;37728:2;37724:15;37717:38;37283:529;-1:-1:-1;;;;;;37410:51:0;-1:-1:-1;;;37410:51:0;;-1:-1:-1;37403:58:0;;37247:620;-1:-1:-1;37851:4:0;37075:799;;;;;;:::o;33875:382::-;-1:-1:-1;;;;;33955:16:0;;33947:61;;;;-1:-1:-1;;;33947:61:0;;;;;;;:::i;:::-;34028:16;34036:7;34028;:16::i;:::-;34027:17;34019:58;;;;-1:-1:-1;;;34019:58:0;;;;;;;:::i;:::-;34090:45;34119:1;34123:2;34127:7;34090:20;:45::i;:::-;-1:-1:-1;;;;;34148:13:0;;;;;;:9;:13;;;;;:18;;34165:1;;34148:13;:18;;34165:1;;34148:18;:::i;:::-;;;;-1:-1:-1;;34177:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34177:21:0;-1:-1:-1;;;;;34177:21:0;;;;;;;;34216:33;;34177:16;;;34216:33;;34177:16;;34216:33;33875:382;;:::o;7871:387::-;8194:20;8242:8;;;7871:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:400;;;939:3;932:4;924:6;920:17;916:27;906:2;;962:6;954;947:22;906:2;-1:-1:-1;990:20:1;;1033:18;1022:30;;1019:2;;;1072:8;1062;1055:26;1019:2;1116:4;1108:6;1104:17;1092:29;;1179:3;1172:4;1164;1156:6;1152:17;1144:6;1140:30;1136:41;1133:50;1130:2;;;1196:1;1193;1186:12;1130:2;896:310;;;;;:::o;1211:198::-;;1323:2;1311:9;1302:7;1298:23;1294:32;1291:2;;;1344:6;1336;1329:22;1291:2;1372:31;1393:9;1372:31;:::i;1414:274::-;;;1543:2;1531:9;1522:7;1518:23;1514:32;1511:2;;;1564:6;1556;1549:22;1511:2;1592:31;1613:9;1592:31;:::i;:::-;1582:41;;1642:40;1678:2;1667:9;1663:18;1642:40;:::i;:::-;1632:50;;1501:187;;;;;:::o;1693:342::-;;;;1839:2;1827:9;1818:7;1814:23;1810:32;1807:2;;;1860:6;1852;1845:22;1807:2;1888:31;1909:9;1888:31;:::i;:::-;1878:41;;1938:40;1974:2;1963:9;1959:18;1938:40;:::i;:::-;1928:50;;2025:2;2014:9;2010:18;1997:32;1987:42;;1797:238;;;;;:::o;2040:702::-;;;;;2212:3;2200:9;2191:7;2187:23;2183:33;2180:2;;;2234:6;2226;2219:22;2180:2;2262:31;2283:9;2262:31;:::i;:::-;2252:41;;2312:40;2348:2;2337:9;2333:18;2312:40;:::i;:::-;2302:50;;2399:2;2388:9;2384:18;2371:32;2361:42;;2454:2;2443:9;2439:18;2426:32;2481:18;2473:6;2470:30;2467:2;;;2518:6;2510;2503:22;2467:2;2546:22;;2599:4;2591:13;;2587:27;-1:-1:-1;2577:2:1;;2633:6;2625;2618:22;2577:2;2661:75;2728:7;2723:2;2710:16;2705:2;2701;2697:11;2661:75;:::i;:::-;2651:85;;;2170:572;;;;;;;:::o;2747:369::-;;;2873:2;2861:9;2852:7;2848:23;2844:32;2841:2;;;2894:6;2886;2879:22;2841:2;2922:31;2943:9;2922:31;:::i;:::-;2912:41;;3003:2;2992:9;2988:18;2975:32;3050:5;3043:13;3036:21;3029:5;3026:32;3016:2;;3077:6;3069;3062:22;3016:2;3105:5;3095:15;;;2831:285;;;;;:::o;3121:266::-;;;3250:2;3238:9;3229:7;3225:23;3221:32;3218:2;;;3271:6;3263;3256:22;3218:2;3299:31;3320:9;3299:31;:::i;:::-;3289:41;3377:2;3362:18;;;;3349:32;;-1:-1:-1;;;3208:179:1:o;3392:607::-;;;;;3573:2;3561:9;3552:7;3548:23;3544:32;3541:2;;;3594:6;3586;3579:22;3541:2;3622:31;3643:9;3622:31;:::i;:::-;3612:41;;3700:2;3689:9;3685:18;3672:32;3662:42;;3755:2;3744:9;3740:18;3727:32;3782:18;3774:6;3771:30;3768:2;;;3819:6;3811;3804:22;3768:2;3863:76;3931:7;3922:6;3911:9;3907:22;3863:76;:::i;:::-;3531:468;;;;-1:-1:-1;3958:8:1;-1:-1:-1;;;;3531:468:1:o;4004:463::-;;;4151:2;4139:9;4130:7;4126:23;4122:32;4119:2;;;4172:6;4164;4157:22;4119:2;4217:9;4204:23;4250:18;4242:6;4239:30;4236:2;;;4287:6;4279;4272:22;4236:2;4331:76;4399:7;4390:6;4379:9;4375:22;4331:76;:::i;:::-;4426:8;;4305:102;;-1:-1:-1;4109:358:1;-1:-1:-1;;;;4109:358:1:o;4472:190::-;;4584:2;4572:9;4563:7;4559:23;4555:32;4552:2;;;4605:6;4597;4590:22;4552:2;-1:-1:-1;4633:23:1;;4542:120;-1:-1:-1;4542:120:1:o;4667:257::-;;4778:2;4766:9;4757:7;4753:23;4749:32;4746:2;;;4799:6;4791;4784:22;4746:2;4843:9;4830:23;4862:32;4888:5;4862:32;:::i;4929:261::-;;5051:2;5039:9;5030:7;5026:23;5022:32;5019:2;;;5072:6;5064;5057:22;5019:2;5109:9;5103:16;5128:32;5154:5;5128:32;:::i;5195:482::-;;5317:2;5305:9;5296:7;5292:23;5288:32;5285:2;;;5338:6;5330;5323:22;5285:2;5383:9;5370:23;5416:18;5408:6;5405:30;5402:2;;;5453:6;5445;5438:22;5402:2;5481:22;;5534:4;5526:13;;5522:27;-1:-1:-1;5512:2:1;;5568:6;5560;5553:22;5512:2;5596:75;5663:7;5658:2;5645:16;5640:2;5636;5632:11;5596:75;:::i;5877:259::-;;5958:5;5952:12;5985:6;5980:3;5973:19;6001:63;6057:6;6050:4;6045:3;6041:14;6034:4;6027:5;6023:16;6001:63;:::i;:::-;6118:2;6097:15;-1:-1:-1;;6093:29:1;6084:39;;;;6125:4;6080:50;;5928:208;-1:-1:-1;;5928:208:1:o;6141:123::-;-1:-1:-1;;;6208:23:1;;6256:1;6247:11;;6198:66::o;6269:229::-;6418:2;6414:15;;;;-1:-1:-1;;6410:53:1;6398:66;;6489:2;6480:12;;6388:110::o;6503:247::-;6660:19;;;6704:2;6695:12;;6688:28;6741:2;6732:12;;6650:100::o;6755:470::-;;6972:6;6966:13;6988:53;7034:6;7029:3;7022:4;7014:6;7010:17;6988:53;:::i;:::-;7104:13;;7063:16;;;;7126:57;7104:13;7063:16;7160:4;7148:17;;7126:57;:::i;:::-;7199:20;;6942:283;-1:-1:-1;;;;6942:283:1:o;7230:1238::-;7517:13;;7230:1238;;;;7590:1;7575:17;;7611:1;7647:18;;;;7674:2;;7728:4;7720:6;7716:17;7706:27;;7674:2;7754;7802;7794:6;7791:14;7771:18;7768:38;7765:2;;;-1:-1:-1;;;7829:33:1;;7885:4;7882:1;7875:15;7915:4;7836:3;7903:17;7765:2;7946:18;7973:104;;;;8091:1;8086:324;;;;7939:471;;7973:104;-1:-1:-1;;8006:24:1;;7994:37;;8051:16;;;;-1:-1:-1;7973:104:1;;8086:324;8122:39;8154:6;8122:39;:::i;:::-;8183:3;8199:165;8213:6;8210:1;8207:13;8199:165;;;8291:14;;8278:11;;;8271:35;8334:16;;;;8228:10;;8199:165;;;8203:3;;8393:6;8388:3;8384:16;8377:23;;7939:471;;;;;;;8426:36;8458:3;8426:36;:::i;8473:205::-;8673:3;8664:14::o;8683:203::-;-1:-1:-1;;;;;8847:32:1;;;;8829:51;;8817:2;8802:18;;8784:102::o;8891:490::-;-1:-1:-1;;;;;9160:15:1;;;9142:34;;9212:15;;9207:2;9192:18;;9185:43;9259:2;9244:18;;9237:34;;;9307:3;9302:2;9287:18;;9280:31;;;8891:490;;9328:47;;9355:19;;9347:6;9328:47;:::i;:::-;9320:55;9094:287;-1:-1:-1;;;;;;9094:287:1:o;9386:635::-;9557:2;9609:21;;;9679:13;;9582:18;;;9701:22;;;9386:635;;9557:2;9780:15;;;;9754:2;9739:18;;;9386:635;9826:169;9840:6;9837:1;9834:13;9826:169;;;9901:13;;9889:26;;9970:15;;;;9935:12;;;;9862:1;9855:9;9826:169;;;-1:-1:-1;10012:3:1;;9537:484;-1:-1:-1;;;;;;9537:484:1:o;10026:187::-;10191:14;;10184:22;10166:41;;10154:2;10139:18;;10121:92::o;10218:177::-;10364:25;;;10352:2;10337:18;;10319:76::o;10400:221::-;;10549:2;10538:9;10531:21;10569:46;10611:2;10600:9;10596:18;10588:6;10569:46;:::i;10626:414::-;10828:2;10810:21;;;10867:2;10847:18;;;10840:30;10906:34;10901:2;10886:18;;10879:62;-1:-1:-1;;;10972:2:1;10957:18;;10950:48;11030:3;11015:19;;10800:240::o;11045:402::-;11247:2;11229:21;;;11286:2;11266:18;;;11259:30;11325:34;11320:2;11305:18;;11298:62;-1:-1:-1;;;11391:2:1;11376:18;;11369:36;11437:3;11422:19;;11219:228::o;11452:339::-;11654:2;11636:21;;;11693:2;11673:18;;;11666:30;-1:-1:-1;;;11727:2:1;11712:18;;11705:45;11782:2;11767:18;;11626:165::o;11796:352::-;11998:2;11980:21;;;12037:2;12017:18;;;12010:30;12076;12071:2;12056:18;;12049:58;12139:2;12124:18;;11970:178::o;12153:343::-;12355:2;12337:21;;;12394:2;12374:18;;;12367:30;-1:-1:-1;;;12428:2:1;12413:18;;12406:49;12487:2;12472:18;;12327:169::o;12501:347::-;12703:2;12685:21;;;12742:2;12722:18;;;12715:30;12781:25;12776:2;12761:18;;12754:53;12839:2;12824:18;;12675:173::o;12853:400::-;13055:2;13037:21;;;13094:2;13074:18;;;13067:30;13133:34;13128:2;13113:18;;13106:62;-1:-1:-1;;;13199:2:1;13184:18;;13177:34;13243:3;13228:19;;13027:226::o;13258:349::-;13460:2;13442:21;;;13499:2;13479:18;;;13472:30;13538:27;13533:2;13518:18;;13511:55;13598:2;13583:18;;13432:175::o;13612:408::-;13814:2;13796:21;;;13853:2;13833:18;;;13826:30;13892:34;13887:2;13872:18;;13865:62;-1:-1:-1;;;13958:2:1;13943:18;;13936:42;14010:3;13995:19;;13786:234::o;14025:339::-;14227:2;14209:21;;;14266:2;14246:18;;;14239:30;-1:-1:-1;;;14300:2:1;14285:18;;14278:45;14355:2;14340:18;;14199:165::o;14369:339::-;14571:2;14553:21;;;14610:2;14590:18;;;14583:30;-1:-1:-1;;;14644:2:1;14629:18;;14622:45;14699:2;14684:18;;14543:165::o;14713:341::-;14915:2;14897:21;;;14954:2;14934:18;;;14927:30;-1:-1:-1;;;14988:2:1;14973:18;;14966:47;15045:2;15030:18;;14887:167::o;15059:420::-;15261:2;15243:21;;;15300:2;15280:18;;;15273:30;15339:34;15334:2;15319:18;;15312:62;15410:26;15405:2;15390:18;;15383:54;15469:3;15454:19;;15233:246::o;15484:406::-;15686:2;15668:21;;;15725:2;15705:18;;;15698:30;15764:34;15759:2;15744:18;;15737:62;-1:-1:-1;;;15830:2:1;15815:18;;15808:40;15880:3;15865:19;;15658:232::o;15895:405::-;16097:2;16079:21;;;16136:2;16116:18;;;16109:30;16175:34;16170:2;16155:18;;16148:62;-1:-1:-1;;;16241:2:1;16226:18;;16219:39;16290:3;16275:19;;16069:231::o;16305:356::-;16507:2;16489:21;;;16526:18;;;16519:30;16585:34;16580:2;16565:18;;16558:62;16652:2;16637:18;;16479:182::o;16666:408::-;16868:2;16850:21;;;16907:2;16887:18;;;16880:30;16946:34;16941:2;16926:18;;16919:62;-1:-1:-1;;;17012:2:1;16997:18;;16990:42;17064:3;17049:19;;16840:234::o;17079:356::-;17281:2;17263:21;;;17300:18;;;17293:30;17359:34;17354:2;17339:18;;17332:62;17426:2;17411:18;;17253:182::o;17440:405::-;17642:2;17624:21;;;17681:2;17661:18;;;17654:30;17720:34;17715:2;17700:18;;17693:62;-1:-1:-1;;;17786:2:1;17771:18;;17764:39;17835:3;17820:19;;17614:231::o;17850:411::-;18052:2;18034:21;;;18091:2;18071:18;;;18064:30;18130:34;18125:2;18110:18;;18103:62;-1:-1:-1;;;18196:2:1;18181:18;;18174:45;18251:3;18236:19;;18024:237::o;18266:397::-;18468:2;18450:21;;;18507:2;18487:18;;;18480:30;18546:34;18541:2;18526:18;;18519:62;-1:-1:-1;;;18612:2:1;18597:18;;18590:31;18653:3;18638:19;;18440:223::o;18668:339::-;18870:2;18852:21;;;18909:2;18889:18;;;18882:30;-1:-1:-1;;;18943:2:1;18928:18;;18921:45;18998:2;18983:18;;18842:165::o;19012:339::-;19214:2;19196:21;;;19253:2;19233:18;;;19226:30;-1:-1:-1;;;19287:2:1;19272:18;;19265:45;19342:2;19327:18;;19186:165::o;19356:413::-;19558:2;19540:21;;;19597:2;19577:18;;;19570:30;19636:34;19631:2;19616:18;;19609:62;-1:-1:-1;;;19702:2:1;19687:18;;19680:47;19759:3;19744:19;;19530:239::o;19774:342::-;19976:2;19958:21;;;20015:2;19995:18;;;19988:30;-1:-1:-1;;;20049:2:1;20034:18;;20027:48;20107:2;20092:18;;19948:168::o;20121:355::-;20323:2;20305:21;;;20362:2;20342:18;;;20335:30;20401:33;20396:2;20381:18;;20374:61;20467:2;20452:18;;20295:181::o;20481:340::-;20683:2;20665:21;;;20722:2;20702:18;;;20695:30;-1:-1:-1;;;20756:2:1;20741:18;;20734:46;20812:2;20797:18;;20655:166::o;21008:129::-;;21076:17;;;21126:4;21110:21;;;21066:71::o;21142:128::-;;21213:1;21209:6;21206:1;21203:13;21200:2;;;21219:18;;:::i;:::-;-1:-1:-1;21255:9:1;;21190:80::o;21275:120::-;;21341:1;21331:2;;21346:18;;:::i;:::-;-1:-1:-1;21380:9:1;;21321:74::o;21400:168::-;;21506:1;21502;21498:6;21494:14;21491:1;21488:21;21483:1;21476:9;21469:17;21465:45;21462:2;;;21513:18;;:::i;:::-;-1:-1:-1;21553:9:1;;21452:116::o;21573:125::-;;21641:1;21638;21635:8;21632:2;;;21646:18;;:::i;:::-;-1:-1:-1;21683:9:1;;21622:76::o;21703:258::-;21775:1;21785:113;21799:6;21796:1;21793:13;21785:113;;;21875:11;;;21869:18;21856:11;;;21849:39;21821:2;21814:10;21785:113;;;21916:6;21913:1;21910:13;21907:2;;;-1:-1:-1;;21951:1:1;21933:16;;21926:27;21756:205::o;21966:136::-;;22033:5;22023:2;;22042:18;;:::i;:::-;-1:-1:-1;;;22078:18:1;;22013:89::o;22107:380::-;22192:1;22182:12;;22239:1;22229:12;;;22250:2;;22304:4;22296:6;22292:17;22282:27;;22250:2;22357;22349:6;22346:14;22326:18;22323:38;22320:2;;;22403:10;22398:3;22394:20;22391:1;22384:31;22438:4;22435:1;22428:15;22466:4;22463:1;22456:15;22320:2;;22162:325;;;:::o;22492:135::-;;-1:-1:-1;;22552:17:1;;22549:2;;;22572:18;;:::i;:::-;-1:-1:-1;22619:1:1;22608:13;;22539:88::o;22632:112::-;;22690:1;22680:2;;22695:18;;:::i;:::-;-1:-1:-1;22729:9:1;;22670:74::o;22749:127::-;22810:10;22805:3;22801:20;22798:1;22791:31;22841:4;22838:1;22831:15;22865:4;22862:1;22855:15;22881:127;22942:10;22937:3;22933:20;22930:1;22923:31;22973:4;22970:1;22963:15;22997:4;22994:1;22987:15;23013:127;23074:10;23069:3;23065:20;23062:1;23055:31;23105:4;23102:1;23095:15;23129:4;23126:1;23119:15;23145:133;-1:-1:-1;;;;;;23221:32:1;;23211:43;;23201:2;;23268:1;23265;23258:12

Swarm Source

ipfs://808aa39f3eb32da8254e3ffa98900c2af2ca2e10529ef8796700676b7f3352e4
Loading...
Loading
Loading...
Loading
[ 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.