APE Price: $0.62 (+3.23%)
    /

    Monke (MNK)

    Overview

    TokenID

    1070

    Total Transfers

    -

    Market

    Onchain Market Cap

    $0.00

    Circulating Supply Market Cap

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

    Click here to update the token information / general information

    Contract Source Code Verified (Exact Match)

    Contract Name:
    Monke

    Compiler Version
    v0.8.9+commit.e5eed63a

    Optimization Enabled:
    Yes with 1000 runs

    Other Settings:
    default evmVersion
    File 1 of 22 : Monke.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.9;
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
    import "@openzeppelin/contracts/access/Ownable.sol";
    import "@openzeppelin/contracts/utils/Counters.sol";
    import "@openzeppelin/contracts/utils/Strings.sol";
    import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
    import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
    contract Monke is ERC721URIStorage, Ownable, ERC721Enumerable {
    using Counters for Counters.Counter;
    using Strings for uint256;
    using ECDSA for bytes32;
    Counters.Counter private _tokenIds;
    bytes32 private _whitelistMerkleRoot;
    bool private _whitelistMint;
    uint256 private _maxSupply;
    uint256 private _tokensAvailable;
    bool private _isPaused;
    string private _customUriPrefix;
    string private _customUriExtension;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 22 : Ownable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
    pragma solidity ^0.8.0;
    import "../utils/Context.sol";
    /**
    * @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.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 22 : IERC165.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)
    pragma solidity ^0.8.0;
    import "../utils/introspection/IERC165.sol";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 22 : IERC4906.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC4906.sol)
    pragma solidity ^0.8.0;
    import "./IERC165.sol";
    import "./IERC721.sol";
    /// @title EIP-721 Metadata Update Extension
    interface IERC4906 is IERC165, IERC721 {
    /// @dev This event emits when the metadata of a token is changed.
    /// So that the third-party platforms such as NFT market could
    /// timely update the images and related attributes of the NFT.
    event MetadataUpdate(uint256 _tokenId);
    /// @dev This event emits when the metadata of a range of tokens is changed.
    /// So that the third-party platforms such as NFT market could
    /// timely update the images and related attributes of the NFTs.
    event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 22 : IERC721.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721.sol)
    pragma solidity ^0.8.0;
    import "../token/ERC721/IERC721.sol";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 22 : ERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/ERC721.sol)
    pragma solidity ^0.8.0;
    import "./IERC721.sol";
    import "./IERC721Receiver.sol";
    import "./extensions/IERC721Metadata.sol";
    import "../../utils/Address.sol";
    import "../../utils/Context.sol";
    import "../../utils/Strings.sol";
    import "../../utils/introspection/ERC165.sol";
    /**
    * @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
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 22 : ERC721Enumerable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/extensions/ERC721Enumerable.sol)
    pragma solidity ^0.8.0;
    import "../ERC721.sol";
    import "./IERC721Enumerable.sol";
    /**
    * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
    * enumerability of all the token ids in the contract as well as all token ids owned by each
    * account.
    */
    abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;
    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;
    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 22 : ERC721URIStorage.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/extensions/ERC721URIStorage.sol)
    pragma solidity ^0.8.0;
    import "../ERC721.sol";
    import "../../../interfaces/IERC4906.sol";
    /**
    * @dev ERC721 token with storage based token URI management.
    */
    abstract contract ERC721URIStorage is IERC4906, ERC721 {
    using Strings for uint256;
    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;
    /**
    * @dev See {IERC165-supportsInterface}
    */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, IERC165) returns (bool) {
    return interfaceId == bytes4(0x49064906) || super.supportsInterface(interfaceId);
    }
    /**
    * @dev See {IERC721Metadata-tokenURI}.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 22 : IERC721Enumerable.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
    pragma solidity ^0.8.0;
    import "../IERC721.sol";
    /**
    * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
    * @dev See https://eips.ethereum.org/EIPS/eip-721
    */
    interface IERC721Enumerable is IERC721 {
    /**
    * @dev Returns the total amount of tokens stored by the contract.
    */
    function totalSupply() external view returns (uint256);
    /**
    * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
    * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
    */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
    /**
    * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
    * Use along with {totalSupply} to enumerate all tokens.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 22 : IERC721Metadata.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
    pragma solidity ^0.8.0;
    import "../IERC721.sol";
    /**
    * @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);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 22 : IERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)
    pragma solidity ^0.8.0;
    import "../../utils/introspection/IERC165.sol";
    /**
    * @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);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 22 : IERC721Receiver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.onERC721Received.selector`.
    */
    function onERC721Received(
    address operator,
    address from,
    uint256 tokenId,
    bytes calldata data
    ) external returns (bytes4);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 22 : Address.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
    pragma solidity ^0.8.1;
    /**
    * @dev Collection of functions related to the address type
    */
    library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    * - an externally-owned account
    * - a contract in construction
    * - an address where a contract will be created
    * - an address where a contract lived, but was destroyed
    *
    * Furthermore, `isContract` will also return true if the target contract within
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 22 : Context.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.4) (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;
    }
    function _contextSuffixLength() internal view virtual returns (uint256) {
    return 0;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 22 : Counters.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
    pragma solidity ^0.8.0;
    /**
    * @title Counters
    * @author Matt Condon (@shrugs)
    * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
    * of elements in a mapping, issuing ERC721 ids, or counting request ids.
    *
    * Include with `using Counters for Counters.Counter;`
    */
    library Counters {
    struct Counter {
    // This variable should never be directly accessed by users of the library: interactions must be restricted to
    // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
    // this feature: see https://github.com/ethereum/solidity/issues/4637
    uint256 _value; // default: 0
    }
    function current(Counter storage counter) internal view returns (uint256) {
    return counter._value;
    }
    function increment(Counter storage counter) internal {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 22 : ECDSA.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)
    pragma solidity ^0.8.0;
    import "../Strings.sol";
    /**
    * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
    *
    * These functions can be used to verify that a message was signed by the holder
    * of the private keys of a given address.
    */
    library ECDSA {
    enum RecoverError {
    NoError,
    InvalidSignature,
    InvalidSignatureLength,
    InvalidSignatureS,
    InvalidSignatureV // Deprecated in v4.8
    }
    function _throwError(RecoverError error) private pure {
    if (error == RecoverError.NoError) {
    return; // no error: do nothing
    } else if (error == RecoverError.InvalidSignature) {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 22 : MerkleProof.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.2) (utils/cryptography/MerkleProof.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev These functions deal with verification of Merkle Tree proofs.
    *
    * The tree and the proofs can be generated using our
    * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
    * You will find a quickstart guide in the readme.
    *
    * WARNING: You should avoid using leaf values that are 64 bytes long prior to
    * hashing, or use a hash function other than keccak256 for hashing leaves.
    * This is because the concatenation of a sorted pair of internal nodes in
    * the merkle tree could be reinterpreted as a leaf value.
    * OpenZeppelin's JavaScript library generates merkle trees that are safe
    * against this attack out of the box.
    */
    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.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 22 : ERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
    pragma solidity ^0.8.0;
    import "./IERC165.sol";
    /**
    * @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) {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 22 : IERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: MIT
    // 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);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 22 : Math.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev Standard math utilities missing in the Solidity language.
    */
    library Math {
    enum Rounding {
    Down, // Toward negative infinity
    Up, // Toward infinity
    Zero // Toward zero
    }
    /**
    * @dev Returns the largest of two numbers.
    */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
    return a > b ? a : b;
    }
    /**
    * @dev Returns the smallest of two numbers.
    */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 22 : SignedMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)
    pragma solidity ^0.8.0;
    /**
    * @dev Standard signed math utilities missing in the Solidity language.
    */
    library SignedMath {
    /**
    * @dev Returns the largest of two signed numbers.
    */
    function max(int256 a, int256 b) internal pure returns (int256) {
    return a > b ? a : b;
    }
    /**
    * @dev Returns the smallest of two signed numbers.
    */
    function min(int256 a, int256 b) internal pure returns (int256) {
    return a < b ? a : b;
    }
    /**
    * @dev Returns the average of two signed numbers without overflow.
    * The result is rounded towards zero.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 22 : Strings.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)
    pragma solidity ^0.8.0;
    import "./math/Math.sol";
    import "./math/SignedMath.sol";
    /**
    * @dev String operations.
    */
    library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;
    /**
    * @dev Converts a `uint256` to its ASCII `string` decimal representation.
    */
    function toString(uint256 value) internal pure returns (string memory) {
    unchecked {
    uint256 length = Math.log10(value) + 1;
    string memory buffer = new string(length);
    uint256 ptr;
    /// @solidity memory-safe-assembly
    assembly {
    ptr := add(buffer, add(32, length))
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    {
    "optimizer": {
    "enabled": true,
    "runs": 1000
    },
    "outputSelection": {
    "*": {
    "*": [
    "evm.bytecode",
    "evm.deployedBytecode",
    "devdoc",
    "userdoc",
    "metadata",
    "abi"
    ]
    }
    },
    "libraries": {}
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    [{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address payable","name":"ownerWallet","type":"address"},{"internalType":"address payable","name":"ownerWallet2","type":"address"},{"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":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"address","name":"nftOwner","type":"address"}],"name":"NewMint","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":"string","name":"newUriExtension","type":"string"}],"name":"_setUriExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseUri","type":"string"}],"name":"_setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelistMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"tip","type":"bool"}],"name":"pay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newWhitelist","type":"bytes32"}],"name":"setWhitelist","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":"toggleContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhitelistMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"}]

    60806040523480156200001157600080fd5b50604051620031da380380620031da833981016040819052620000349162000375565b60408051808201825260058152644d6f6e6b6560d81b6020808301918252835180850190945260038452624d4e4b60e81b9084015281519192916200007c91600091620002b2565b50805162000092906001906020840190620002b2565b505050620000af620000a96200025c60201b60201c565b62000260565b610d05600f819055601055600d819055600e805460ff19908116909155601180549091169055601480546001600160a01b038086166001600160a01b03199283161790925560158054928516929091169190911790556040805160808101909152605180825262003189602083013980516200013491601291602090910190620002b2565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200016391601391620002b2565b505060007ff3794665d3af9b6fb6f858b70185898134f96768ef31c325d52e04f0ac195a4d81905566038d7ea4c680007f2bacf7cca723d030d12aee795132f2c5f2d14ad131f16f3f27eeba3e79d18b8c5560017f4c4dc693d7db52f85fe052106f4b4b920e78e8ef37dee82878a60ab8585faf4981905560c87fcaff291fe014adc6b72a172705750b4cabe8f8667664d2924a166caab288564881905560176020527ff36d6bc9642eb6fb6ee9998b09ce990566df752ab06e11f8de7ab633bbd57b8f9190915560029091527fc52df653038b2ad477d8d97f1ddd63cfd138847b628ad8a7b89c109c3f8782ca5550620003fb915050565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620002c090620003be565b90600052602060002090601f016020900481019282620002e457600085556200032f565b82601f10620002ff57805160ff19168380011785556200032f565b828001600101855582156200032f579182015b828111156200032f57825182559160200191906001019062000312565b506200033d92915062000341565b5090565b5b808211156200033d576000815560010162000342565b80516001600160a01b03811681146200037057600080fd5b919050565b600080600080608085870312156200038c57600080fd5b845193506200039e6020860162000358565b9250620003ae6040860162000358565b6060959095015193969295505050565b600181811c90821680620003d357607f821691505b60208210811415620003f557634e487b7160e01b600052602260045260246000fd5b50919050565b612d7e806200040b6000396000f3fe6080604052600436106101e35760003560e01c806370a0823111610102578063b4b7754011610095578063e58306f911610064578063e58306f914610530578063e985e9c514610550578063f2fde38b14610599578063f6a0a05f146105b957600080fd5b8063b4b77540146104c8578063b88d4fde146104dd578063c87b56dd146104fd578063ce6df2b91461051d57600080fd5b806395d89b41116100d157806395d89b411461046b5780639df90028146104805780639ee6ec1d14610495578063a22cb465146104a857600080fd5b806370a0823114610400578063715018a61461042057806387cac30d146104355780638da5cb5b1461044d57600080fd5b8063440bc7f31161017a578063559e775b11610149578063559e775b146103805780636352211e146103a057806366f70c91146103c05780636f8b44b0146103e057600080fd5b8063440bc7f3146103185780634b11faaf146103385780634c0f38c21461034b5780634f6ccce71461036057600080fd5b806318160ddd116101b657806318160ddd1461029957806323b872dd146102b85780632f745c59146102d857806342842e0e146102f857600080fd5b806301ffc9a7146101e857806306fdde031461021d578063081812fc1461023f578063095ea7b314610277575b600080fd5b3480156101f457600080fd5b5061020861020336600461271e565b6105d9565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b506102326105ea565b6040516102149190612793565b34801561024b57600080fd5b5061025f61025a3660046127a6565b61067c565b6040516001600160a01b039091168152602001610214565b34801561028357600080fd5b506102976102923660046127db565b6106a3565b005b3480156102a557600080fd5b50600a545b604051908152602001610214565b3480156102c457600080fd5b506102976102d3366004612805565b6107da565b3480156102e457600080fd5b506102aa6102f33660046127db565b610851565b34801561030457600080fd5b50610297610313366004612805565b6108f9565b34801561032457600080fd5b506102976103333660046127a6565b610914565b610297610346366004612888565b610921565b34801561035757600080fd5b50600f546102aa565b34801561036c57600080fd5b506102aa61037b3660046127a6565b610c89565b34801561038c57600080fd5b506102aa61039b3660046127a6565b610d2d565b3480156103ac57600080fd5b5061025f6103bb3660046127a6565b610d38565b3480156103cc57600080fd5b506102976103db3660046129a2565b610d9d565b3480156103ec57600080fd5b506102976103fb3660046127a6565b610dbc565b34801561040c57600080fd5b506102aa61041b3660046129eb565b610e5a565b34801561042c57600080fd5b50610297610ef4565b34801561044157600080fd5b50600e5460ff16610208565b34801561045957600080fd5b506007546001600160a01b031661025f565b34801561047757600080fd5b50610232610f08565b34801561048c57600080fd5b50610297610f17565b6102976104a3366004612a16565b610f33565b3480156104b457600080fd5b506102976104c3366004612a42565b61111d565b3480156104d457600080fd5b50610297611128565b3480156104e957600080fd5b506102976104f8366004612a6c565b611144565b34801561050957600080fd5b506102326105183660046127a6565b6111bc565b61029761052b3660046127db565b611282565b34801561053c57600080fd5b5061029761054b3660046127db565b611530565b34801561055c57600080fd5b5061020861056b366004612ae8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156105a557600080fd5b506102976105b43660046129eb565b61155e565b3480156105c557600080fd5b506102976105d43660046129a2565b6115ee565b60006105e482611609565b92915050565b6060600080546105f990612b12565b80601f016020809104026020016040519081016040528092919081815260200182805461062590612b12565b80156106725780601f1061064757610100808354040283529160200191610672565b820191906000526020600020905b81548152906001019060200180831161065557829003601f168201915b5050505050905090565b600061068782611647565b506000908152600460205260409020546001600160a01b031690565b60006106ae82610d38565b9050806001600160a01b0316836001600160a01b0316141561073d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b03821614806107595750610759813361056b565b6107cb5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610734565b6107d583836116ab565b505050565b6107e43382611726565b6108465760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608401610734565b6107d58383836117a5565b600061085c83610e5a565b82106108d05760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610734565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b6107d583838360405180602001604052806000815250611144565b61091c6119b8565b600d55565b60115460ff16156109745760405162461bcd60e51b815260206004820152601960248201527f4d696e742069732063757272656e746c79207061757365642e000000000000006044820152606401610734565b336001600160a01b038416146109cc5760405162461bcd60e51b815260206004820152601a60248201527f53656e646572206d75737420626520746865206d696e7465722e0000000000006044820152606401610734565b600e5460ff16610a445760405162461bcd60e51b815260206004820152603960248201527f57686974656c697374206d696e742077696e646f772068617320656e6465642e60448201527f20557365207075626c6963206d696e7420696e73746561642e000000000000006064820152608401610734565b610a4d82611a12565b341015610a9c5760405162461bcd60e51b815260206004820152601460248201527f4e6f7420656e6f756768204554482073656e742e0000000000000000000000006044820152606401610734565b816010541015610aee5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f75676820746f6b656e73206c6566742e0000000000000000006044820152606401610734565b610af782611a3a565b821115610b525760405162461bcd60e51b815260206004820152602360248201527f44657369726564207175616e74697479206973206f76657220746865206c696d60448201526234ba1760e91b6064820152608401610734565b610b5b82611a5c565b82610b6585610e5a565b610b6f9190612b5d565b1115610bbd5760405162461bcd60e51b815260206004820152601e60248201527f5175616e7469747920657863656564732077616c6c6574206c696d69742e00006044820152606401610734565b600d546040516bffffffffffffffffffffffff19606086901b166020820152610c0091839160340160405160208183030381529060405280519060200120611a7e565b610c4c5760405162461bcd60e51b815260206004820152601760248201527f57616c6c6574206e6f742077686974656c69737465642e0000000000000000006044820152606401610734565b3415610c5d57610c5d346001610f33565b60005b82811015610c8357610c7184611a94565b80610c7b81612b75565b915050610c60565b50505050565b6000610c94600a5490565b8210610d085760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610734565b600a8281548110610d1b57610d1b612b90565b90600052602060002001549050919050565b60006105e482611a12565b6000818152600260205260408120546001600160a01b0316806105e45760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610734565b610da56119b8565b8051610db890601290602084019061266f565b5050565b610dc46119b8565b80610dce600c5490565b1115610e425760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d617820737570706c79206c6f776572207468616e60448201527f2063757272656e742e00000000000000000000000000000000000000000000006064820152608401610734565b600f819055600c54610e549082612ba6565b60105550565b60006001600160a01b038216610ed85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610734565b506001600160a01b031660009081526003602052604090205490565b610efc6119b8565b610f066000611bb8565b565b6060600180546105f990612b12565b610f1f6119b8565b6011805460ff19811660ff90911615179055565b818115610ffe576000610f47602885612bbd565b9050610f538185612ba6565b6014546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610fa5576040519150601f19603f3d011682016040523d82523d6000602084013e610faa565b606091505b5050905080610ffb5760405162461bcd60e51b815260206004820152601360248201527f4661696c656420746f2073656e64207469702e000000000000000000000000006044820152606401610734565b50505b600061100b600283612bbd565b6014546040519192506000916001600160a01b039091169083908381818185875af1925050503d806000811461105d576040519150601f19603f3d011682016040523d82523d6000602084013e611062565b606091505b50506015546040519192506000916001600160a01b039091169084908381818185875af1925050503d80600081146110b6576040519150601f19603f3d011682016040523d82523d6000602084013e6110bb565b606091505b505090508180156110c95750805b6111155760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f2073656e64207061796d656e742e0000000000000000006044820152606401610734565b505050505050565b610db8338383611c17565b6111306119b8565b600e805460ff19811660ff90911615179055565b61114e3383611726565b6111b05760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608401610734565b610c8384848484611ce6565b6000818152600260205260409020546060906001600160a01b03166112235760405162461bcd60e51b815260206004820181905260248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e2e6044820152606401610734565b600061122d611d6f565b9050600081511161124d576040518060200160405280600081525061127b565b8061125784611d7e565b601360405160200161126b93929190612bdf565b6040516020818303038152906040525b9392505050565b60115460ff16156112d55760405162461bcd60e51b815260206004820152601960248201527f4d696e742069732063757272656e746c79207061757365642e000000000000006044820152606401610734565b336001600160a01b0383161461132d5760405162461bcd60e51b815260206004820152601a60248201527f53656e646572206d75737420626520746865206d696e7465722e0000000000006044820152606401610734565b600e5460ff16156113805760405162461bcd60e51b815260206004820181905260248201527f57686974656c697374206d696e74206973207374696c6c206f6e676f696e672e6044820152606401610734565b61138981611a12565b3410156113d85760405162461bcd60e51b815260206004820152601460248201527f4e6f7420656e6f756768204554482073656e742e0000000000000000000000006044820152606401610734565b80601054101561142a5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f75676820746f6b656e73206c6566742e0000000000000000006044820152606401610734565b61143381611a3a565b81111561148e5760405162461bcd60e51b815260206004820152602360248201527f44657369726564207175616e74697479206973206f76657220746865206c696d60448201526234ba1760e91b6064820152608401610734565b61149781611a5c565b816114a184610e5a565b6114ab9190612b5d565b11156114f95760405162461bcd60e51b815260206004820152601e60248201527f5175616e7469747920657863656564732077616c6c6574206c696d69742e00006044820152606401610734565b341561150a5761150a346001610f33565b60005b818110156107d55761151e83611a94565b8061152881612b75565b91505061150d565b6115386119b8565b60005b818110156107d55761154c83611a94565b8061155681612b75565b91505061153b565b6115666119b8565b6001600160a01b0381166115e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610734565b6115eb81611bb8565b50565b6115f66119b8565b8051610db890601390602084019061266f565b60006001600160e01b031982167f780e9d630000000000000000000000000000000000000000000000000000000014806105e457506105e482611e28565b6000818152600260205260409020546001600160a01b03166115eb5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610734565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906116ed82610d38565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061173283610d38565b9050806001600160a01b0316846001600160a01b0316148061177957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061179d5750836001600160a01b03166117928461067c565b6001600160a01b0316145b949350505050565b826001600160a01b03166117b882610d38565b6001600160a01b03161461181c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610734565b6001600160a01b0382166118975760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610734565b6118a48383836001611e66565b826001600160a01b03166118b782610d38565b6001600160a01b03161461191b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610734565b6000818152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6007546001600160a01b03163314610f065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610734565b600080611a1e83611e72565b60008181526018602052604090205490915061179d8482612ca3565b600080611a4683611e72565b6000908152601660205260409020549392505050565b600080611a6883611e72565b6000908152601760205260409020549392505050565b600082611a8b8584611eac565b14949350505050565b60115460ff1615611ae75760405162461bcd60e51b815260206004820152601960248201527f4d696e742069732063757272656e746c79207061757365642e000000000000006044820152606401610734565b600060105411611b395760405162461bcd60e51b815260206004820152601c60248201527f416c6c20746f6b656e732068617665206265656e206d696e7465642e000000006044820152606401610734565b611b47600c80546001019055565b6000611b52600c5490565b9050611b5e8282611ef1565b60108054906000611b6e83612cc2565b9091555050604080518281526001600160a01b03841660208201527f291d3f6c3ecab98acd02709c8abf1e57e33ba0c761ff7f68bcbe5af06b346fed910160405180910390a15050565b600780546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611c795760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610734565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611cf18484846117a5565b611cfd84848484612097565b610c835760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610734565b6060601280546105f990612b12565b60606000611d8b836121fa565b600101905060008167ffffffffffffffff811115611dab57611dab612841565b6040519080825280601f01601f191660200182016040528015611dd5576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611e1b57611e20565b611ddf565b509392505050565b60006001600160e01b031982167f490649060000000000000000000000000000000000000000000000000000000014806105e457506105e4826122dc565b610c8384848484612377565b60008082611e7f600c5490565b611e899190612b5d565b905061014d8111611e9d5750600192915050565b50600292915050565b50919050565b600081815b8451811015611e2057611edd82868381518110611ed057611ed0612b90565b60200260200101516124b3565b915080611ee981612b75565b915050611eb1565b6001600160a01b038216611f475760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610734565b6000818152600260205260409020546001600160a01b031615611fac5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610734565b611fba600083836001611e66565b6000818152600260205260409020546001600160a01b03161561201f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610734565b6001600160a01b0382166000818152600360209081526040808320805460010190558483526002909152808220805473ffffffffffffffffffffffffffffffffffffffff19168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156121ef57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906120db903390899088908890600401612cd9565b602060405180830381600087803b1580156120f557600080fd5b505af1925050508015612125575060408051601f3d908101601f1916820190925261212291810190612d15565b60015b6121d5573d808015612153576040519150601f19603f3d011682016040523d82523d6000602084013e612158565b606091505b5080516121cd5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610734565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061179d565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612243577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061226f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061228d57662386f26fc10000830492506010015b6305f5e10083106122a5576305f5e100830492506008015b61271083106122b957612710830492506004015b606483106122cb576064830492506002015b600a83106105e45760010192915050565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061233f57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105e457507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146105e4565b60018111156123ee5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f7274656400000000000000000000006064820152608401610734565b816001600160a01b03851661244a5761244581600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b61246d565b836001600160a01b0316856001600160a01b03161461246d5761246d85826124df565b6001600160a01b038416612489576124848161257c565b6124ac565b846001600160a01b0316846001600160a01b0316146124ac576124ac848261262b565b5050505050565b60008183106124cf57600082815260208490526040902061127b565b5060009182526020526040902090565b600060016124ec84610e5a565b6124f69190612ba6565b600083815260096020526040902054909150808214612549576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a5460009061258e90600190612ba6565b6000838152600b6020526040812054600a80549394509092849081106125b6576125b6612b90565b9060005260206000200154905080600a83815481106125d7576125d7612b90565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a80548061260f5761260f612d32565b6001900381819060005260206000200160009055905550505050565b600061263683610e5a565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b82805461267b90612b12565b90600052602060002090601f01602090048101928261269d57600085556126e3565b82601f106126b657805160ff19168380011785556126e3565b828001600101855582156126e3579182015b828111156126e35782518255916020019190600101906126c8565b506126ef9291506126f3565b5090565b5b808211156126ef57600081556001016126f4565b6001600160e01b0319811681146115eb57600080fd5b60006020828403121561273057600080fd5b813561127b81612708565b60005b8381101561275657818101518382015260200161273e565b83811115610c835750506000910152565b6000815180845261277f81602086016020860161273b565b601f01601f19169290920160200192915050565b60208152600061127b6020830184612767565b6000602082840312156127b857600080fd5b5035919050565b80356001600160a01b03811681146127d657600080fd5b919050565b600080604083850312156127ee57600080fd5b6127f7836127bf565b946020939093013593505050565b60008060006060848603121561281a57600080fd5b612823846127bf565b9250612831602085016127bf565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561288057612880612841565b604052919050565b60008060006060848603121561289d57600080fd5b6128a6846127bf565b92506020808501359250604085013567ffffffffffffffff808211156128cb57600080fd5b818701915087601f8301126128df57600080fd5b8135818111156128f1576128f1612841565b8060051b9150612902848301612857565b818152918301840191848101908a84111561291c57600080fd5b938501935b8385101561293a57843582529385019390850190612921565b8096505050505050509250925092565b600067ffffffffffffffff83111561296457612964612841565b612977601f8401601f1916602001612857565b905082815283838301111561298b57600080fd5b828260208301376000602084830101529392505050565b6000602082840312156129b457600080fd5b813567ffffffffffffffff8111156129cb57600080fd5b8201601f810184136129dc57600080fd5b61179d8482356020840161294a565b6000602082840312156129fd57600080fd5b61127b826127bf565b803580151581146127d657600080fd5b60008060408385031215612a2957600080fd5b82359150612a3960208401612a06565b90509250929050565b60008060408385031215612a5557600080fd5b612a5e836127bf565b9150612a3960208401612a06565b60008060008060808587031215612a8257600080fd5b612a8b856127bf565b9350612a99602086016127bf565b925060408501359150606085013567ffffffffffffffff811115612abc57600080fd5b8501601f81018713612acd57600080fd5b612adc8782356020840161294a565b91505092959194509250565b60008060408385031215612afb57600080fd5b612b04836127bf565b9150612a39602084016127bf565b600181811c90821680612b2657607f821691505b60208210811415611ea657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612b7057612b70612b47565b500190565b6000600019821415612b8957612b89612b47565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600082821015612bb857612bb8612b47565b500390565b600082612bda57634e487b7160e01b600052601260045260246000fd5b500490565b600084516020612bf28285838a0161273b565b855191840191612c058184848a0161273b565b8554920191600090600181811c9080831680612c2257607f831692505b858310811415612c4057634e487b7160e01b85526022600452602485fd5b808015612c545760018114612c6557612c92565b60ff19851688528388019550612c92565b60008b81526020902060005b85811015612c8a5781548a820152908401908801612c71565b505083880195505b50939b9a5050505050505050505050565b6000816000190483118215151615612cbd57612cbd612b47565b500290565b600081612cd157612cd1612b47565b506000190190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612d0b6080830184612767565b9695505050505050565b600060208284031215612d2757600080fd5b815161127b81612708565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220641eb518943f1069296ea6f94fa368351561096a6a9219bd2a5e4756c6d498a364736f6c6343000809003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d646547357568316f63615451565942726d485757453967486876713554627a546b6f3335375753376a54644c2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5302258484c06c9512c3bc45cac54a031c48e0f000000000000000000000000ce26abeebab22e59fe50d634c5ad4c902c733d9e0000000000000000000000000000000000000000000000000000000000000000

    Deployed Bytecode

    0x6080604052600436106101e35760003560e01c806370a0823111610102578063b4b7754011610095578063e58306f911610064578063e58306f914610530578063e985e9c514610550578063f2fde38b14610599578063f6a0a05f146105b957600080fd5b8063b4b77540146104c8578063b88d4fde146104dd578063c87b56dd146104fd578063ce6df2b91461051d57600080fd5b806395d89b41116100d157806395d89b411461046b5780639df90028146104805780639ee6ec1d14610495578063a22cb465146104a857600080fd5b806370a0823114610400578063715018a61461042057806387cac30d146104355780638da5cb5b1461044d57600080fd5b8063440bc7f31161017a578063559e775b11610149578063559e775b146103805780636352211e146103a057806366f70c91146103c05780636f8b44b0146103e057600080fd5b8063440bc7f3146103185780634b11faaf146103385780634c0f38c21461034b5780634f6ccce71461036057600080fd5b806318160ddd116101b657806318160ddd1461029957806323b872dd146102b85780632f745c59146102d857806342842e0e146102f857600080fd5b806301ffc9a7146101e857806306fdde031461021d578063081812fc1461023f578063095ea7b314610277575b600080fd5b3480156101f457600080fd5b5061020861020336600461271e565b6105d9565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b506102326105ea565b6040516102149190612793565b34801561024b57600080fd5b5061025f61025a3660046127a6565b61067c565b6040516001600160a01b039091168152602001610214565b34801561028357600080fd5b506102976102923660046127db565b6106a3565b005b3480156102a557600080fd5b50600a545b604051908152602001610214565b3480156102c457600080fd5b506102976102d3366004612805565b6107da565b3480156102e457600080fd5b506102aa6102f33660046127db565b610851565b34801561030457600080fd5b50610297610313366004612805565b6108f9565b34801561032457600080fd5b506102976103333660046127a6565b610914565b610297610346366004612888565b610921565b34801561035757600080fd5b50600f546102aa565b34801561036c57600080fd5b506102aa61037b3660046127a6565b610c89565b34801561038c57600080fd5b506102aa61039b3660046127a6565b610d2d565b3480156103ac57600080fd5b5061025f6103bb3660046127a6565b610d38565b3480156103cc57600080fd5b506102976103db3660046129a2565b610d9d565b3480156103ec57600080fd5b506102976103fb3660046127a6565b610dbc565b34801561040c57600080fd5b506102aa61041b3660046129eb565b610e5a565b34801561042c57600080fd5b50610297610ef4565b34801561044157600080fd5b50600e5460ff16610208565b34801561045957600080fd5b506007546001600160a01b031661025f565b34801561047757600080fd5b50610232610f08565b34801561048c57600080fd5b50610297610f17565b6102976104a3366004612a16565b610f33565b3480156104b457600080fd5b506102976104c3366004612a42565b61111d565b3480156104d457600080fd5b50610297611128565b3480156104e957600080fd5b506102976104f8366004612a6c565b611144565b34801561050957600080fd5b506102326105183660046127a6565b6111bc565b61029761052b3660046127db565b611282565b34801561053c57600080fd5b5061029761054b3660046127db565b611530565b34801561055c57600080fd5b5061020861056b366004612ae8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156105a557600080fd5b506102976105b43660046129eb565b61155e565b3480156105c557600080fd5b506102976105d43660046129a2565b6115ee565b60006105e482611609565b92915050565b6060600080546105f990612b12565b80601f016020809104026020016040519081016040528092919081815260200182805461062590612b12565b80156106725780601f1061064757610100808354040283529160200191610672565b820191906000526020600020905b81548152906001019060200180831161065557829003601f168201915b5050505050905090565b600061068782611647565b506000908152600460205260409020546001600160a01b031690565b60006106ae82610d38565b9050806001600160a01b0316836001600160a01b0316141561073d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b03821614806107595750610759813361056b565b6107cb5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610734565b6107d583836116ab565b505050565b6107e43382611726565b6108465760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608401610734565b6107d58383836117a5565b600061085c83610e5a565b82106108d05760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610734565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b6107d583838360405180602001604052806000815250611144565b61091c6119b8565b600d55565b60115460ff16156109745760405162461bcd60e51b815260206004820152601960248201527f4d696e742069732063757272656e746c79207061757365642e000000000000006044820152606401610734565b336001600160a01b038416146109cc5760405162461bcd60e51b815260206004820152601a60248201527f53656e646572206d75737420626520746865206d696e7465722e0000000000006044820152606401610734565b600e5460ff16610a445760405162461bcd60e51b815260206004820152603960248201527f57686974656c697374206d696e742077696e646f772068617320656e6465642e60448201527f20557365207075626c6963206d696e7420696e73746561642e000000000000006064820152608401610734565b610a4d82611a12565b341015610a9c5760405162461bcd60e51b815260206004820152601460248201527f4e6f7420656e6f756768204554482073656e742e0000000000000000000000006044820152606401610734565b816010541015610aee5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f75676820746f6b656e73206c6566742e0000000000000000006044820152606401610734565b610af782611a3a565b821115610b525760405162461bcd60e51b815260206004820152602360248201527f44657369726564207175616e74697479206973206f76657220746865206c696d60448201526234ba1760e91b6064820152608401610734565b610b5b82611a5c565b82610b6585610e5a565b610b6f9190612b5d565b1115610bbd5760405162461bcd60e51b815260206004820152601e60248201527f5175616e7469747920657863656564732077616c6c6574206c696d69742e00006044820152606401610734565b600d546040516bffffffffffffffffffffffff19606086901b166020820152610c0091839160340160405160208183030381529060405280519060200120611a7e565b610c4c5760405162461bcd60e51b815260206004820152601760248201527f57616c6c6574206e6f742077686974656c69737465642e0000000000000000006044820152606401610734565b3415610c5d57610c5d346001610f33565b60005b82811015610c8357610c7184611a94565b80610c7b81612b75565b915050610c60565b50505050565b6000610c94600a5490565b8210610d085760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610734565b600a8281548110610d1b57610d1b612b90565b90600052602060002001549050919050565b60006105e482611a12565b6000818152600260205260408120546001600160a01b0316806105e45760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610734565b610da56119b8565b8051610db890601290602084019061266f565b5050565b610dc46119b8565b80610dce600c5490565b1115610e425760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d617820737570706c79206c6f776572207468616e60448201527f2063757272656e742e00000000000000000000000000000000000000000000006064820152608401610734565b600f819055600c54610e549082612ba6565b60105550565b60006001600160a01b038216610ed85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610734565b506001600160a01b031660009081526003602052604090205490565b610efc6119b8565b610f066000611bb8565b565b6060600180546105f990612b12565b610f1f6119b8565b6011805460ff19811660ff90911615179055565b818115610ffe576000610f47602885612bbd565b9050610f538185612ba6565b6014546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610fa5576040519150601f19603f3d011682016040523d82523d6000602084013e610faa565b606091505b5050905080610ffb5760405162461bcd60e51b815260206004820152601360248201527f4661696c656420746f2073656e64207469702e000000000000000000000000006044820152606401610734565b50505b600061100b600283612bbd565b6014546040519192506000916001600160a01b039091169083908381818185875af1925050503d806000811461105d576040519150601f19603f3d011682016040523d82523d6000602084013e611062565b606091505b50506015546040519192506000916001600160a01b039091169084908381818185875af1925050503d80600081146110b6576040519150601f19603f3d011682016040523d82523d6000602084013e6110bb565b606091505b505090508180156110c95750805b6111155760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f2073656e64207061796d656e742e0000000000000000006044820152606401610734565b505050505050565b610db8338383611c17565b6111306119b8565b600e805460ff19811660ff90911615179055565b61114e3383611726565b6111b05760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608401610734565b610c8384848484611ce6565b6000818152600260205260409020546060906001600160a01b03166112235760405162461bcd60e51b815260206004820181905260248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e2e6044820152606401610734565b600061122d611d6f565b9050600081511161124d576040518060200160405280600081525061127b565b8061125784611d7e565b601360405160200161126b93929190612bdf565b6040516020818303038152906040525b9392505050565b60115460ff16156112d55760405162461bcd60e51b815260206004820152601960248201527f4d696e742069732063757272656e746c79207061757365642e000000000000006044820152606401610734565b336001600160a01b0383161461132d5760405162461bcd60e51b815260206004820152601a60248201527f53656e646572206d75737420626520746865206d696e7465722e0000000000006044820152606401610734565b600e5460ff16156113805760405162461bcd60e51b815260206004820181905260248201527f57686974656c697374206d696e74206973207374696c6c206f6e676f696e672e6044820152606401610734565b61138981611a12565b3410156113d85760405162461bcd60e51b815260206004820152601460248201527f4e6f7420656e6f756768204554482073656e742e0000000000000000000000006044820152606401610734565b80601054101561142a5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f75676820746f6b656e73206c6566742e0000000000000000006044820152606401610734565b61143381611a3a565b81111561148e5760405162461bcd60e51b815260206004820152602360248201527f44657369726564207175616e74697479206973206f76657220746865206c696d60448201526234ba1760e91b6064820152608401610734565b61149781611a5c565b816114a184610e5a565b6114ab9190612b5d565b11156114f95760405162461bcd60e51b815260206004820152601e60248201527f5175616e7469747920657863656564732077616c6c6574206c696d69742e00006044820152606401610734565b341561150a5761150a346001610f33565b60005b818110156107d55761151e83611a94565b8061152881612b75565b91505061150d565b6115386119b8565b60005b818110156107d55761154c83611a94565b8061155681612b75565b91505061153b565b6115666119b8565b6001600160a01b0381166115e25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610734565b6115eb81611bb8565b50565b6115f66119b8565b8051610db890601390602084019061266f565b60006001600160e01b031982167f780e9d630000000000000000000000000000000000000000000000000000000014806105e457506105e482611e28565b6000818152600260205260409020546001600160a01b03166115eb5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610734565b6000818152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03841690811790915581906116ed82610d38565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061173283610d38565b9050806001600160a01b0316846001600160a01b0316148061177957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061179d5750836001600160a01b03166117928461067c565b6001600160a01b0316145b949350505050565b826001600160a01b03166117b882610d38565b6001600160a01b03161461181c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610734565b6001600160a01b0382166118975760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610734565b6118a48383836001611e66565b826001600160a01b03166118b782610d38565b6001600160a01b03161461191b5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610734565b6000818152600460209081526040808320805473ffffffffffffffffffffffffffffffffffffffff199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6007546001600160a01b03163314610f065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610734565b600080611a1e83611e72565b60008181526018602052604090205490915061179d8482612ca3565b600080611a4683611e72565b6000908152601660205260409020549392505050565b600080611a6883611e72565b6000908152601760205260409020549392505050565b600082611a8b8584611eac565b14949350505050565b60115460ff1615611ae75760405162461bcd60e51b815260206004820152601960248201527f4d696e742069732063757272656e746c79207061757365642e000000000000006044820152606401610734565b600060105411611b395760405162461bcd60e51b815260206004820152601c60248201527f416c6c20746f6b656e732068617665206265656e206d696e7465642e000000006044820152606401610734565b611b47600c80546001019055565b6000611b52600c5490565b9050611b5e8282611ef1565b60108054906000611b6e83612cc2565b9091555050604080518281526001600160a01b03841660208201527f291d3f6c3ecab98acd02709c8abf1e57e33ba0c761ff7f68bcbe5af06b346fed910160405180910390a15050565b600780546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611c795760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610734565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611cf18484846117a5565b611cfd84848484612097565b610c835760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610734565b6060601280546105f990612b12565b60606000611d8b836121fa565b600101905060008167ffffffffffffffff811115611dab57611dab612841565b6040519080825280601f01601f191660200182016040528015611dd5576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611e1b57611e20565b611ddf565b509392505050565b60006001600160e01b031982167f490649060000000000000000000000000000000000000000000000000000000014806105e457506105e4826122dc565b610c8384848484612377565b60008082611e7f600c5490565b611e899190612b5d565b905061014d8111611e9d5750600192915050565b50600292915050565b50919050565b600081815b8451811015611e2057611edd82868381518110611ed057611ed0612b90565b60200260200101516124b3565b915080611ee981612b75565b915050611eb1565b6001600160a01b038216611f475760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610734565b6000818152600260205260409020546001600160a01b031615611fac5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610734565b611fba600083836001611e66565b6000818152600260205260409020546001600160a01b03161561201f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610734565b6001600160a01b0382166000818152600360209081526040808320805460010190558483526002909152808220805473ffffffffffffffffffffffffffffffffffffffff19168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156121ef57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906120db903390899088908890600401612cd9565b602060405180830381600087803b1580156120f557600080fd5b505af1925050508015612125575060408051601f3d908101601f1916820190925261212291810190612d15565b60015b6121d5573d808015612153576040519150601f19603f3d011682016040523d82523d6000602084013e612158565b606091505b5080516121cd5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610734565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061179d565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612243577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061226f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061228d57662386f26fc10000830492506010015b6305f5e10083106122a5576305f5e100830492506008015b61271083106122b957612710830492506004015b606483106122cb576064830492506002015b600a83106105e45760010192915050565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061233f57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105e457507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146105e4565b60018111156123ee5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f7274656400000000000000000000006064820152608401610734565b816001600160a01b03851661244a5761244581600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b61246d565b836001600160a01b0316856001600160a01b03161461246d5761246d85826124df565b6001600160a01b038416612489576124848161257c565b6124ac565b846001600160a01b0316846001600160a01b0316146124ac576124ac848261262b565b5050505050565b60008183106124cf57600082815260208490526040902061127b565b5060009182526020526040902090565b600060016124ec84610e5a565b6124f69190612ba6565b600083815260096020526040902054909150808214612549576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a5460009061258e90600190612ba6565b6000838152600b6020526040812054600a80549394509092849081106125b6576125b6612b90565b9060005260206000200154905080600a83815481106125d7576125d7612b90565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a80548061260f5761260f612d32565b6001900381819060005260206000200160009055905550505050565b600061263683610e5a565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b82805461267b90612b12565b90600052602060002090601f01602090048101928261269d57600085556126e3565b82601f106126b657805160ff19168380011785556126e3565b828001600101855582156126e3579182015b828111156126e35782518255916020019190600101906126c8565b506126ef9291506126f3565b5090565b5b808211156126ef57600081556001016126f4565b6001600160e01b0319811681146115eb57600080fd5b60006020828403121561273057600080fd5b813561127b81612708565b60005b8381101561275657818101518382015260200161273e565b83811115610c835750506000910152565b6000815180845261277f81602086016020860161273b565b601f01601f19169290920160200192915050565b60208152600061127b6020830184612767565b6000602082840312156127b857600080fd5b5035919050565b80356001600160a01b03811681146127d657600080fd5b919050565b600080604083850312156127ee57600080fd5b6127f7836127bf565b946020939093013593505050565b60008060006060848603121561281a57600080fd5b612823846127bf565b9250612831602085016127bf565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561288057612880612841565b604052919050565b60008060006060848603121561289d57600080fd5b6128a6846127bf565b92506020808501359250604085013567ffffffffffffffff808211156128cb57600080fd5b818701915087601f8301126128df57600080fd5b8135818111156128f1576128f1612841565b8060051b9150612902848301612857565b818152918301840191848101908a84111561291c57600080fd5b938501935b8385101561293a57843582529385019390850190612921565b8096505050505050509250925092565b600067ffffffffffffffff83111561296457612964612841565b612977601f8401601f1916602001612857565b905082815283838301111561298b57600080fd5b828260208301376000602084830101529392505050565b6000602082840312156129b457600080fd5b813567ffffffffffffffff8111156129cb57600080fd5b8201601f810184136129dc57600080fd5b61179d8482356020840161294a565b6000602082840312156129fd57600080fd5b61127b826127bf565b803580151581146127d657600080fd5b60008060408385031215612a2957600080fd5b82359150612a3960208401612a06565b90509250929050565b60008060408385031215612a5557600080fd5b612a5e836127bf565b9150612a3960208401612a06565b60008060008060808587031215612a8257600080fd5b612a8b856127bf565b9350612a99602086016127bf565b925060408501359150606085013567ffffffffffffffff811115612abc57600080fd5b8501601f81018713612acd57600080fd5b612adc8782356020840161294a565b91505092959194509250565b60008060408385031215612afb57600080fd5b612b04836127bf565b9150612a39602084016127bf565b600181811c90821680612b2657607f821691505b60208210811415611ea657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612b7057612b70612b47565b500190565b6000600019821415612b8957612b89612b47565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600082821015612bb857612bb8612b47565b500390565b600082612bda57634e487b7160e01b600052601260045260246000fd5b500490565b600084516020612bf28285838a0161273b565b855191840191612c058184848a0161273b565b8554920191600090600181811c9080831680612c2257607f831692505b858310811415612c4057634e487b7160e01b85526022600452602485fd5b808015612c545760018114612c6557612c92565b60ff19851688528388019550612c92565b60008b81526020902060005b85811015612c8a5781548a820152908401908801612c71565b505083880195505b50939b9a5050505050505050505050565b6000816000190483118215151615612cbd57612cbd612b47565b500290565b600081612cd157612cd1612b47565b506000190190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612d0b6080830184612767565b9695505050505050565b600060208284031215612d2757600080fd5b815161127b81612708565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220641eb518943f1069296ea6f94fa368351561096a6a9219bd2a5e4756c6d498a364736f6c63430008090033

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

    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5302258484c06c9512c3bc45cac54a031c48e0f000000000000000000000000ce26abeebab22e59fe50d634c5ad4c902c733d9e0000000000000000000000000000000000000000000000000000000000000000

    -----Decoded View---------------
    Arg [0] : (uint256): 0
    Arg [1] : ownerWallet (address): 0xd5302258484C06c9512C3bc45CAc54A031C48E0F
    Arg [2] : ownerWallet2 (address): 0xce26aBEEBAB22E59fe50D634c5ad4C902c733d9e
    Arg [3] : merkleRoot (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000

    -----Encoded View---------------
    4 Constructor Arguments found :
    Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
    Arg [1] : 000000000000000000000000d5302258484c06c9512c3bc45cac54a031c48e0f
    Arg [2] : 000000000000000000000000ce26abeebab22e59fe50d634c5ad4c902c733d9e
    Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000


    [ 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.