S Price: $0.592645 (+5.26%)
    /

    Token

    NFTs2Me Owners (N2MOwners)

    Overview

    Max Total Supply

    0 N2MOwners

    Holders

    362

    Market

    Onchain Market Cap

    $0.00

    Circulating Supply Market Cap

    -
    Balance
    1 N2MOwners
    0x6B06b09a75C7ce3Ea37C88c1215b09EFCd0f734B
    Loading...
    Loading
    Loading...
    Loading
    Loading...
    Loading

    Click here to update the token information / general information
    This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

    Contract Source Code Verified (Exact Match)

    Contract Name:
    N2MFactory

    Compiler Version
    v0.8.27+commit.40a35a09

    Optimization Enabled:
    Yes with 151 runs

    Other Settings:
    cancun EvmVersion
    File 1 of 42 : N2MFactory.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 42 : README.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 42 : ICreatorToken.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 42 : ICreatorTokenTransferValidator.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 42 : IEOARegistry.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 42 : ITransferSecurityRegistry.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 42 : ITransferValidator.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 42 : ITransferValidatorSetTokenType.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 42 : TransferPolicyEnums.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 42 : IERC4907.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: CC0-1.0
    pragma solidity ^0.8.27;
    interface IERC4907 {
    /// Logged when the user of a token assigns a new user or updates expires
    /// @notice Emitted when the `user` of an NFT or the `expires` of the `user` is changed
    /// The zero address for user indicates that there is no user address
    event UpdateUser(uint256 indexed tokenId, address indexed user, uint64 expires);
    /// @notice set the user and expires of a NFT
    /// @dev The zero address indicates there is no user
    /// Throws if `tokenId` is not valid NFT
    /// @param user The new user of the NFT
    /// @param expires UNIX timestamp, The new user could use the NFT before expires
    function setUser(uint256 tokenId, address user, uint64 expires) external ;
    /// @notice Get the user address of an NFT
    /// @dev The zero address indicates that there is no user or the user is expired
    /// @param tokenId The NFT to get the user address for
    /// @return The user address for this NFT
    function userOf(uint256 tokenId) external view returns(address);
    /// @notice Get the user expires of an NFT
    /// @dev The zero value indicates that there is no user
    /// @param tokenId The NFT to get the user expires for
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 42 : IERC5192.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // SPDX-License-Identifier: CC0-1.0
    pragma solidity ^0.8.27;
    interface IERC5192 {
    /// @notice Emitted when the locking status is changed to locked.
    /// @dev If a token is minted and the status is locked, this event should be emitted.
    /// @param tokenId The identifier for a token.
    event Locked(uint256 tokenId);
    /// @notice Emitted when the locking status is changed to unlocked.
    /// @dev If a token is minted and the status is unlocked, this event should be emitted.
    /// @param tokenId The identifier for a token.
    event Unlocked(uint256 tokenId);
    /// @notice Returns the locking status of an Soulbound Token
    /// @dev SBTs assigned to zero address are considered invalid, and queries
    /// about them do throw.
    /// @param tokenId The identifier for an SBT.
    function locked(uint256 tokenId) external view returns (bool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 42 : IERC7496.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: CC0-1.0
    pragma solidity ^0.8.27;
    interface IERC7496 {
    /// Events
    event TraitUpdated(bytes32 indexed traitKey, uint256 tokenId, bytes32 traitValue);
    event TraitUpdatedRange(bytes32 indexed traitKey, uint256 fromTokenId, uint256 toTokenId);
    event TraitUpdatedRangeUniformValue(
    bytes32 indexed traitKey, uint256 fromTokenId, uint256 toTokenId, bytes32 traitValue
    );
    event TraitUpdatedList(bytes32 indexed traitKey, uint256[] tokenIds);
    event TraitUpdatedListUniformValue(bytes32 indexed traitKey, uint256[] tokenIds, bytes32 traitValue);
    event TraitMetadataURIUpdated();
    /// Getters
    function getTraitValue(uint256 tokenId, bytes32 traitKey) external view returns (bytes32 traitValue);
    function getTraitValues(uint256 tokenId, bytes32[] calldata traitKeys)
    external
    view
    returns (bytes32[] memory traitValues);
    function getTraitMetadataURI() external view returns (string memory uri);
    /// Setters
    function setTrait(uint256 tokenId, bytes32 traitKey, bytes32 traitValue) external;
    /// Errors
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 42 : IERC7572.sol
    1
    2
    3
    4
    5
    6
    7
    8
    // SPDX-License-Identifier: CC0-1.0
    pragma solidity ^0.8.27;
    interface IERC7572 {
    function contractURI() external view returns (string memory);
    event ContractURIUpdated();
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 42 : IN2MCommon.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 42 : IN2MCommonStorage.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 42 : IN2MCrossFactory.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 42 : IN2MFactory.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 42 : N2MVersion.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
    /** ---------------------------------------------------------------------------- //
    * //
    * Smart contract generated by https://nfts2me.com //
    * //
    * .::. //
    * ...... //
    * .... ::. //
    * .:.. :: ... //
    * ..:. :: ... //
    * ::. ..:-- ::. ... //
    * .: ..:::::-==: :::::.. : //
    * .: :::::::-====: :::::::: : //
    * .: :::::::-======. :::::::: : //
    * .: :::::::-=======-:::::::: : //
    * .: :::::::-========-::::::: : //
    * .: ::::::::========-::::::: : //
    * .: :::::::. .======-::::::: : //
    * .: :::::::. :====-::::::: : //
    * .: .:::::. -==-:::::. : //
    * .:. .:. .--:.. ... //
    * .:. :. ... //
    * .... :. .... //
    * .:. .:. //
    * .::::. //
    * :--. //
    * //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 42 : draft-IERC6093.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 v5.1.0) (interfaces/draft-IERC6093.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Standard ERC-20 Errors
    * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
    */
    interface IERC20Errors {
    /**
    * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
    * @param sender Address whose tokens are being transferred.
    * @param balance Current balance for the interacting account.
    * @param needed Minimum amount required to perform a transfer.
    */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    /**
    * @dev Indicates a failure with the token `sender`. Used in transfers.
    * @param sender Address whose tokens are being transferred.
    */
    error ERC20InvalidSender(address sender);
    /**
    * @dev Indicates a failure with the token `receiver`. Used in transfers.
    * @param receiver Address to which tokens are being transferred.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 42 : IERC2981.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 v5.1.0) (interfaces/IERC2981.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../utils/introspection/IERC165.sol";
    /**
    * @dev Interface for the NFT Royalty Standard.
    *
    * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
    * support for royalty payments across all NFT marketplaces and ecosystem participants.
    */
    interface IERC2981 is IERC165 {
    /**
    * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
    * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
    *
    * NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the
    * royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers.
    */
    function royaltyInfo(
    uint256 tokenId,
    uint256 salePrice
    ) external view returns (address receiver, uint256 royaltyAmount);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 42 : IERC721.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721.sol)
    pragma solidity ^0.8.20;
    import {IERC721} from "../token/ERC721/IERC721.sol";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 42 : IERC20.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 v5.1.0) (token/ERC20/IERC20.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC-20 standard as defined in the ERC.
    */
    interface IERC20 {
    /**
    * @dev Emitted when `value` tokens are moved from one account (`from`) to
    * another (`to`).
    *
    * Note that `value` may be zero.
    */
    event Transfer(address indexed from, address indexed to, uint256 value);
    /**
    * @dev Emitted when the allowance of a `spender` for an `owner` is set by
    * a call to {approve}. `value` is the new allowance.
    */
    event Approval(address indexed owner, address indexed spender, uint256 value);
    /**
    * @dev Returns the value of tokens in existence.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 23 of 42 : 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 v5.1.0) (token/ERC721/ERC721.sol)
    pragma solidity ^0.8.20;
    import {IERC721} from "./IERC721.sol";
    import {IERC721Metadata} from "./extensions/IERC721Metadata.sol";
    import {ERC721Utils} from "./utils/ERC721Utils.sol";
    import {Context} from "../../utils/Context.sol";
    import {Strings} from "../../utils/Strings.sol";
    import {IERC165, ERC165} from "../../utils/introspection/ERC165.sol";
    import {IERC721Errors} from "../../interfaces/draft-IERC6093.sol";
    /**
    * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including
    * the Metadata extension, but not including the Enumerable extension, which is available separately as
    * {ERC721Enumerable}.
    */
    abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors {
    using Strings for uint256;
    // Token name
    string private _name;
    // Token symbol
    string private _symbol;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 24 of 42 : 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 (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)
    pragma solidity ^0.8.20;
    import {IERC721} from "../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 25 of 42 : 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 v5.1.0) (token/ERC721/IERC721.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../../utils/introspection/IERC165.sol";
    /**
    * @dev Required interface of an ERC-721 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 26 of 42 : 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 v5.1.0) (token/ERC721/IERC721Receiver.sol)
    pragma solidity ^0.8.20;
    /**
    * @title ERC-721 token receiver interface
    * @dev Interface for any contract that wants to support safeTransfers
    * from ERC-721 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
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 27 of 42 : ERC721Utils.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 v5.1.0) (token/ERC721/utils/ERC721Utils.sol)
    pragma solidity ^0.8.20;
    import {IERC721Receiver} from "../IERC721Receiver.sol";
    import {IERC721Errors} from "../../../interfaces/draft-IERC6093.sol";
    /**
    * @dev Library that provide common ERC-721 utility functions.
    *
    * See https://eips.ethereum.org/EIPS/eip-721[ERC-721].
    *
    * _Available since v5.1._
    */
    library ERC721Utils {
    /**
    * @dev Performs an acceptance check for the provided `operator` by calling {IERC721-onERC721Received}
    * on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).
    *
    * The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).
    * Otherwise, the recipient must implement {IERC721Receiver-onERC721Received} and return the acceptance magic value to accept
    * the transfer.
    */
    function checkOnERC721Received(
    address operator,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 28 of 42 : 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 v5.0.1) (utils/Context.sol)
    pragma solidity ^0.8.20;
    /**
    * @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 29 of 42 : 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 (last updated v5.1.0) (utils/introspection/ERC165.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "./IERC165.sol";
    /**
    * @dev Implementation of the {IERC165} interface.
    *
    * Contracts that want to implement ERC-165 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);
    * }
    * ```
    */
    abstract contract ERC165 is IERC165 {
    /**
    * @dev See {IERC165-supportsInterface}.
    */
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
    return interfaceId == type(IERC165).interfaceId;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 30 of 42 : 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 (last updated v5.1.0) (utils/introspection/IERC165.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC-165 standard, as defined in the
    * https://eips.ethereum.org/EIPS/eip-165[ERC].
    *
    * 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[ERC 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 31 of 42 : 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 v5.1.0) (utils/math/Math.sol)
    pragma solidity ^0.8.20;
    import {Panic} from "../Panic.sol";
    import {SafeCast} from "./SafeCast.sol";
    /**
    * @dev Standard math utilities missing in the Solidity language.
    */
    library Math {
    enum Rounding {
    Floor, // Toward negative infinity
    Ceil, // Toward positive infinity
    Trunc, // Toward zero
    Expand // Away from zero
    }
    /**
    * @dev Returns the addition of two unsigned integers, with an success flag (no overflow).
    */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
    unchecked {
    uint256 c = a + b;
    if (c < a) return (false, 0);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 32 of 42 : SafeCast.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 v5.1.0) (utils/math/SafeCast.sol)
    // This file was procedurally generated from scripts/generate/templates/SafeCast.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow
    * checks.
    *
    * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
    * easily result in undesired exploitation or bugs, since developers usually
    * assume that overflows raise errors. `SafeCast` restores this intuition by
    * reverting the transaction when such an operation overflows.
    *
    * Using this library instead of the unchecked operations eliminates an entire
    * class of bugs, so it's recommended to use it always.
    */
    library SafeCast {
    /**
    * @dev Value doesn't fit in an uint of `bits` size.
    */
    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);
    /**
    * @dev An int value doesn't fit in an uint of `bits` size.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 33 of 42 : 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 v5.1.0) (utils/math/SignedMath.sol)
    pragma solidity ^0.8.20;
    import {SafeCast} from "./SafeCast.sol";
    /**
    * @dev Standard signed math utilities missing in the Solidity language.
    */
    library SignedMath {
    /**
    * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.
    *
    * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.
    * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute
    * one branch when needed, making this function more expensive.
    */
    function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) {
    unchecked {
    // branchless ternary works because:
    // b ^ (a ^ b) == a
    // b ^ 0 == b
    return b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 34 of 42 : Panic.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 v5.1.0) (utils/Panic.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Helper library for emitting standardized panic codes.
    *
    * ```solidity
    * contract Example {
    * using Panic for uint256;
    *
    * // Use any of the declared internal constants
    * function foo() { Panic.GENERIC.panic(); }
    *
    * // Alternatively
    * function foo() { Panic.panic(Panic.GENERIC); }
    * }
    * ```
    *
    * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
    *
    * _Available since v5.1._
    */
    // slither-disable-next-line unused-state
    library Panic {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 35 of 42 : 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 v5.1.0) (utils/Strings.sol)
    pragma solidity ^0.8.20;
    import {Math} from "./math/Math.sol";
    import {SignedMath} from "./math/SignedMath.sol";
    /**
    * @dev String operations.
    */
    library Strings {
    bytes16 private constant HEX_DIGITS = "0123456789abcdef";
    uint8 private constant ADDRESS_LENGTH = 20;
    /**
    * @dev The `value` string doesn't fit in the specified `length`.
    */
    error StringsInsufficientHexLength(uint256 value, uint256 length);
    /**
    * @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;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 36 of 42 : 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
    pragma solidity ^0.8.4;
    /// @notice Simple single owner authorization mixin.
    /// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
    ///
    /// @dev Note:
    /// This implementation does NOT auto-initialize the owner to `msg.sender`.
    /// You MUST call the `_initializeOwner` in the constructor / initializer.
    ///
    /// While the ownable portion follows
    /// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,
    /// the nomenclature for the 2-step ownership handover may be unique to this codebase.
    abstract contract Ownable {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /* CUSTOM ERRORS */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
    /// @dev The caller is not authorized to call the function.
    error Unauthorized();
    /// @dev The `newOwner` cannot be the zero address.
    error NewOwnerIsZeroAddress();
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /* EVENTS */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 37 of 42 : CREATE3.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.4;
    /// @notice Deterministic deployments agnostic to the initialization code.
    /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/CREATE3.sol)
    /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/CREATE3.sol)
    /// @author Modified from 0xSequence (https://github.com/0xSequence/create3/blob/master/contracts/Create3.sol)
    library CREATE3 {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /* CUSTOM ERRORS */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
    /// @dev Unable to deploy the contract.
    error DeploymentFailed();
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /* BYTECODE CONSTANTS */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
    /**
    * -------------------------------------------------------------------+
    * Opcode | Mnemonic | Stack | Memory |
    * -------------------------------------------------------------------|
    * 36 | CALLDATASIZE | cds | |
    * 3d | RETURNDATASIZE | 0 cds | |
    * 3d | RETURNDATASIZE | 0 0 cds | |
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 38 of 42 : 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
    pragma solidity ^0.8.4;
    /// @notice Gas optimized ECDSA wrapper.
    /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ECDSA.sol)
    /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/ECDSA.sol)
    /// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/ECDSA.sol)
    ///
    /// @dev Note:
    /// - The recovery functions use the ecrecover precompile (0x1).
    /// - As of Solady version 0.0.68, the `recover` variants will revert upon recovery failure.
    /// This is for more safety by default.
    /// Use the `tryRecover` variants if you need to get the zero address back
    /// upon recovery failure instead.
    /// - As of Solady version 0.0.134, all `bytes signature` variants accept both
    /// regular 65-byte `(r, s, v)` and EIP-2098 `(r, vs)` short form signatures.
    /// See: https://eips.ethereum.org/EIPS/eip-2098
    /// This is for calldata efficiency on smart accounts prevalent on L2s.
    ///
    /// WARNING! Do NOT directly use signatures as unique identifiers:
    /// - The recovery operations do NOT check if a signature is non-malleable.
    /// - Use a nonce in the digest to prevent replay attacks on the same contract.
    /// - Use EIP-712 for the digest to prevent replay attacks across different chains and contracts.
    /// EIP-712 also enables readable signing of typed data for better user safety.
    /// - If you need a unique hash from a signature, please use the `canonicalHash` functions.
    library ECDSA {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 39 of 42 : LibBytes.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.4;
    /// @notice Library for byte related operations.
    /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibBytes.sol)
    library LibBytes {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /* STRUCTS */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
    /// @dev Goated bytes storage struct that totally MOGs, no cap, fr.
    /// Uses less gas and bytecode than Solidity's native bytes storage. It's meta af.
    /// Packs length with the first 31 bytes if <255 bytes, so it’s mad tight.
    struct BytesStorage {
    bytes32 _spacer;
    }
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /* CONSTANTS */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
    /// @dev The constant returned when the `search` is not found in the bytes.
    uint256 internal constant NOT_FOUND = type(uint256).max;
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /* BYTE STORAGE OPERATIONS */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 40 of 42 : LibClone.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.4;
    /// @notice Minimal proxy library.
    /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibClone.sol)
    /// @author Minimal proxy by 0age (https://github.com/0age)
    /// @author Clones with immutable args by wighawag, zefram.eth, Saw-mon & Natalie
    /// (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)
    /// @author Minimal ERC1967 proxy by jtriley-eth (https://github.com/jtriley-eth/minimum-viable-proxy)
    ///
    /// @dev Minimal proxy:
    /// Although the sw0nt pattern saves 5 gas over the ERC1167 pattern during runtime,
    /// it is not supported out-of-the-box on Etherscan. Hence, we choose to use the 0age pattern,
    /// which saves 4 gas over the ERC1167 pattern during runtime, and has the smallest bytecode.
    /// - Automatically verified on Etherscan.
    ///
    /// @dev Minimal proxy (PUSH0 variant):
    /// This is a new minimal proxy that uses the PUSH0 opcode introduced during Shanghai.
    /// It is optimized first for minimal runtime gas, then for minimal bytecode.
    /// The PUSH0 clone functions are intentionally postfixed with a jarring "_PUSH0" as
    /// many EVM chains may not support the PUSH0 opcode in the early months after Shanghai.
    /// Please use with caution.
    /// - Automatically verified on Etherscan.
    ///
    /// @dev Clones with immutable args (CWIA):
    /// The implementation of CWIA here is does NOT append the immutable args into the calldata
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 41 of 42 : LibString.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.4;
    import {LibBytes} from "./LibBytes.sol";
    /// @notice Library for converting numbers into strings and other string operations.
    /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/LibString.sol)
    /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/LibString.sol)
    ///
    /// @dev Note:
    /// For performance and bytecode compactness, most of the string operations are restricted to
    /// byte strings (7-bit ASCII), except where otherwise specified.
    /// Usage of byte string operations on charsets with runes spanning two or more bytes
    /// can lead to undefined behavior.
    library LibString {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /* STRUCTS */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
    /// @dev Goated string storage struct that totally MOGs, no cap, fr.
    /// Uses less gas and bytecode than Solidity's native string storage. It's meta af.
    /// Packs length with the first 31 bytes if <255 bytes, so it’s mad tight.
    struct StringStorage {
    bytes32 _spacer;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 42 of 42 : SafeTransferLib.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.4;
    /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
    /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeTransferLib.sol)
    /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol)
    /// @author Permit2 operations from (https://github.com/Uniswap/permit2/blob/main/src/libraries/Permit2Lib.sol)
    ///
    /// @dev Note:
    /// - For ETH transfers, please use `forceSafeTransferETH` for DoS protection.
    library SafeTransferLib {
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
    /* CUSTOM ERRORS */
    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
    /// @dev The ETH transfer has failed.
    error ETHTransferFailed();
    /// @dev The ERC20 `transferFrom` has failed.
    error TransferFromFailed();
    /// @dev The ERC20 `transfer` has failed.
    error TransferFailed();
    /// @dev The ERC20 `approve` has failed.
    error ApproveFailed();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    Contract Security Audit

    Contract ABI

    API
    [{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"delegatedCreationSigner","type":"address"},{"internalType":"bytes32","name":"type1","type":"bytes32"},{"internalType":"bytes32","name":"type2","type":"bytes32"},{"internalType":"address","name":"type1Address","type":"address"},{"internalType":"address","name":"type2Address","type":"address"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"BalanceInvariant","type":"error"},{"inputs":[],"name":"CreatorTokenBase__InvalidTransferValidatorContract","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"},{"inputs":[],"name":"FactoryBalanceDecreased","type":"error"},{"inputs":[],"name":"FailedToDeploy","type":"error"},{"inputs":[],"name":"InvalidLengths","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"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":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldValidator","type":"address"},{"indexed":false,"internalType":"address","name":"newValidator","type":"address"}],"name":"TransferValidatorUpdated","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":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"initCode","type":"bytes"}],"name":"create3","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"collectionInformation","type":"bytes"},{"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"internalType":"bytes32","name":"implementationType","type":"bytes32"}],"name":"createCollection","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"collectionInformation","type":"bytes"},{"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"internalType":"bytes32","name":"implementationType","type":"bytes32"}],"name":"createCollectionN2M_000oEFvt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"collectionInformation","type":"bytes"},{"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"internalType":"bytes32","name":"implementationType","type":"bytes32"}],"name":"createCrossCollection","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"dynamicAddress","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"initData","type":"bytes"}],"name":"createNewDynamic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"collectionInformation","type":"bytes"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes32","name":"collectionId","type":"bytes32"},{"internalType":"bytes32","name":"implementationType","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"delegatedCreation","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"CIDHash","type":"bytes32"}],"name":"getIPFSURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"implementationType","type":"bytes32"}],"name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransferValidationFunction","outputs":[{"internalType":"bytes4","name":"functionSignature","type":"bytes4"},{"internalType":"bool","name":"isViewFunction","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getTransferValidator","outputs":[{"internalType":"address","name":"validator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isApproved","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"collectionAndSelfcalls","type":"uint256"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"collectionsAndCalls","type":"uint256[]"},{"internalType":"uint256[]","name":"collectionsValues","type":"uint256[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicallMulticollection","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"collectionAndSelfcalls","type":"uint256"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicallN2M_001Taw5z","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"n2mVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"implementationTypesAndAddresses","type":"bytes32[]"},{"internalType":"address","name":"delegatedCreationSigner_","type":"address"},{"internalType":"string","name":"ownerTokenURI","type":"string"}],"name":"newContractImplementationsAndSigner","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","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":"bytes32","name":"implementationType","type":"bytes32"},{"internalType":"bytes32","name":"collectionId","type":"bytes32"}],"name":"predictDeterministicAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"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":"address","name":"transferValidator","type":"address"},{"internalType":"bytes[]","name":"customSecurityPolicies","type":"bytes[]"}],"name":"setTransferValidatorAndSecurityPolicy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"to","type":"address"}],"name":"transferCollectionOwnership","outputs":[],"stateMutability":"payable","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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"erc20","type":"address"}],"name":"withdrawTo","outputs":[],"stateMutability":"payable","type":"function"}]

    608060405261278a60c081380391826100178161041d565b9384928339810103126104195761002d81610442565b9061003a60208201610442565b90604081015160608201519261005e60a061005760808601610442565b9401610442565b94610069602061041d565b5f8152610076602061041d565b5f8152815190916001600160401b03821161034a5781906100975f54610456565b601f81116103cc575b50602090601f8311600114610369575f9261035e575b50508160011b915f199060031b1c1916175f555b8051906001600160401b03821161034a5781906100e8600154610456565b601f81116102f1575b50602090601f831160011461028b575f92610280575b50508160011b915f199060031b1c1916176001555b610127600954610456565b601f8111610237575b50605f60099081555f9081527f68747470733a2f2f6d657461646174612e6e667473326d652e636f6d2f6170695f51602061276a5f395f51905f52556e2f6f776e6572546f6b656e5552492f60881b7f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b0556001600160a01b0391909116638b78c6d819819055907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600780546001600160a01b03199081166001600160a01b03938416179091555f9283526006602052604080842080548316958416959095179094559382529082902080549093169316929092179055516122c590816104a58239f35b60095f5261027a90601f0160051c5f51602061276a5f395f51905f52017f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b161048e565b5f610130565b015190505f80610107565b60015f9081528281209350601f198516905b8181106102d957509084600195949392106102c1575b505050811b0160015561011c565b01515f1960f88460031b161c191690555f80806102b3565b9293602060018192878601518155019501930161029d565b60015f5261033a907fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f850160051c81019160208610610340575b601f0160051c019061048e565b5f6100f1565b909150819061032d565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100b6565b5f8080528281209350601f198516905b8181106103b4575090846001959493921061039c575b505050811b015f556100ca565b01515f1960f88460031b161c191690555f808061038f565b92936020600181928786015181550195019301610379565b5f8052610413907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f850160051c8101916020861061034057601f0160051c019061048e565b5f6100a0565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761034a57604052565b51906001600160a01b038216820361041957565b90600182811c92168015610484575b602083101461047057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610465565b818110610499575050565b5f815560010161048e56fe60806040526004361015610011575f80fd5b5f3560e01c80156101dd57806001146101ec57806301ffc9a71461023257806303f30d081461022d57806304dad9351461022857806306fdde0314610223578063081812fc1461021e578063095ea7b314610219578063098144d4146102145780630d705df61461020f57806323b872dd1461020a5780632a55205a146102055780632af252381461020057806338395f19146101fb5780633c2e0828146101f657806342842e0e146101f15780635ae401dc146101ec5780636352211e146101e757806367c0e310146101e25780636a064fce146101dd5780636d07dbf8146101d85780636dce4ab0146101d357806370a08231146101ce5780637ce27a27146101c95780638da5cb5b146101c457806395905e21146101bf57806395d89b41146101ba578063a22cb465146101b5578063b88d4fde146101b0578063c87b56dd146101ab578063c91df5cc146101a6578063cb93c48f146101a1578063d805a4601461019c578063e985e9c5146101975763f2fde38b14610192575f80fd5b611451565b611425565b611325565b611309565b611285565b611190565b611142565b61108a565b611035565b610f46565b610f1a565b610da2565b610d4c565b610c8b565b610bf8565b61029e565b610b7c565b610b4c565b6102ef565b610b23565b610af1565b610a36565b6109f5565b610903565b6108ec565b61088b565b610863565b610789565b61074d565b6106f9565b610674565b61044d565b61041c565b9181601f84011215610264578235916001600160401b038311610264576020838186019501011161026457565b5f80fd5b606060031982011261026457600435906001600160401b0382116102645761029291600401610237565b90916024359060443590565b6102bd6102aa36610268565b926102b89291923384611b2c565b6114fc565b005b9181601f84011215610264578235916001600160401b038311610264576020808501948460051b01011161026457565b6040366003190112610264576004356024356001600160401b0381116102645761031d9036906004016102bf565b5f926001600160a01b0381169060a01c5b8085106103cf57508061033d57005b61036e610362610355835f52600260205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b33036103c157925b81811061037f57005b5f8061038c83858761156b565b9061039c604051809381936114c0565b039082885af16103aa6114cd565b90156103b95750600101610376565b602081519101fd5b6282b42960e81b5f5260045ffd5b935f806103dd83868861156b565b906103ed604051809381936114c0565b0390305af46103fa6114cd565b90156103b957506001019361032e565b6001600160e01b031981160361026457565b3461026457602036600319011261026457602061044360043561043e8161040a565b6115b1565b6040519015158152f35b6060366003190112610264576004356001600160401b038111610264576104789036906004016102bf565b6024356001600160401b038111610264576104979036906004016102bf565b92906044356001600160401b038111610264576104b89036906004016102bf565b92908561060f575b5f925f955f5b8181106104ed575050505050036104de57036104de57005b631df89e8b60e01b5f5260045ffd5b6104f8818387611642565b356001600160a01b0381169060a01c908061056557505f5b8181106105235750506001905b016104c6565b5f806105396105318b611652565b9a8c8a61156b565b90610549604051809381936114c0565b0390305af46105566114cd565b90156103b95750600101610510565b61057d610362610355835f52600260205260405f2090565b33036103c1579088915f5b82811061059b575050505060019061051d565b909192985f908d8d106105f1575b5f916105c1826105ba859491611652565b9d8c61156b565b906105d1604051809381936114c0565b0391865af16105de6114cd565b90156103b9575060010190899291610588565b90508c6105fd8d611652565b9c6106089189611642565b35906105a9565b6106193447611635565b80610625575b506104c0565b5f80808093736db16927dbc38aa39f0ee2cb545e15efd813fb995af1505f61061f565b600435906001600160a01b038216820361026457565b602435906001600160a01b038216820361026457565b602036600319011261026457610688610648565b6001600160a01b039061069c903390611b8f565b16156106a457005b637e27328960e01b5f523360045260245ffd5b5f91031261026457565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060206106f69281815201906106c1565b90565b34610264575f3660031901126102645761074960405161071a60408261096e565b600e81526d4e465473324d65204f776e65727360901b60208201526040519182916020835260208301906106c1565b0390f35b346102645760203660031901126102645760043561076a81611cb6565b505f526004602052602060018060a01b0360405f205416604051908152f35b34610264576040366003190112610264576107a2610648565b602435906107af82611cb6565b33151580610850575b8061083f575b61082a576102bd9261080b9181906001600160a01b0385811691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a45f52600460205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b63a9fbf51f60e01b5f90815233600452602490fd5b5061084a3382611a8a565b156107be565b506001600160a01b0381163314156107b8565b34610264575f366003190112610264576008546040516001600160a01b039091168152602090f35b34610264575f366003190112610264576040805163657711f560e11b815260016020820152f35b6060906003190112610264576004356001600160a01b038116810361026457906024356001600160a01b0381168103610264579060443590565b34610264576102bd6108fd366108b2565b91611660565b34610264576040366003190112610264576024356101f48102908082046101f414901517156109555760408051736db16927dbc38aa39f0ee2cb545e15efd813fb998152612710909204602083015290f35b611621565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761098f57604052565b61095a565b6001600160401b03811161098f57601f01601f191660200190565b81601f82011215610264578035906109c682610994565b926109d4604051948561096e565b8284526020838301011161026457815f926020809301838601378301015290565b6040366003190112610264576024356004356001600160401b03821161026457610a266102bd9236906004016109af565b610a303383611b2c565b34611d43565b610ab05f80610a4436610268565b610a52969293963383611b2c565b8452600660205260408085205481516c5af43d3d93803e602a57fd5bf360581b818401526001600160a01b03909116602882015273602c3d8160093d39f33d3d3d3d363d3d37363d7360148201526035815260608101909152611cea565b93610ac0604051809381936114c0565b039082855af190610acf6114cd565b9115610ae8576102bd906001600160a01b031633611b52565b50602081519101fd5b34610264576020366003190112610264576004355f526006602052602060018060a01b0360405f205416604051908152f35b34610264576102bd610b34366108b2565b9060405192610b4460208561096e565b5f8452611845565b34610264576020366003190112610264576020610b6a600435611cb6565b6040516001600160a01b039091168152f35b606036600319011261026457610b90610648565b602435906044356001600160401b03811161026457610bb6610bc8913690600401610237565b939092610bc33383611b2c565b6120ae565b82610bcf57005b825f9392849360405192839283378101848152039134905af1610bf06114cd565b90156103b957005b3461026457604036600319011261026457600435602435905f52600660205260018060a01b0360405f2054166c5af43d3d93803e602a57fd5bf360215260145273602c3d8160093d39f33d3d3d3d363d3d37363d735f526035600c205f60215260ff5f5360359081523060601b60015260159190915260555f90812091526040516001600160a01b039091168152602090f35b604036600319011261026457610c9f610648565b610ca761065e565b610caf611d8e565b5f80808047865af1506001600160a01b0381169182610cca57005b610d0f92610cdb6020933090611daa565b60405163a9059cbb60e01b81526001600160a01b0390931660048401526024830152909283919082905f9082906044820190565b03925af18015610d4757610d1f57005b6102bd9060203d602011610d40575b610d38818361096e565b8101906117df565b503d610d2e565b6117f4565b34610264576020366003190112610264576001600160a01b03610d6d610648565b168015610d8f575f52600360205260405f205460405190815260208180030190f35b6322718ad960e21b5f525f60045260245ffd5b60a0366003190112610264576004356001600160401b03811161026457610dcd903690600401610237565b610dd561065e565b90604435606435916084356001600160401b03811161026457610dff610e6a913690600401610237565b90610e0a8786611b2c565b610e658886610e388a610e2a8b6040519485938c6020860198468a6117ff565b03601f19810183528261096e565b5190206020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b611dcf565b600754610e7f906001600160a01b0316610362565b6001600160a01b03909116908114159081610f06575b50610ef757610eb65f9392610bc361035586955f52600660205260405f2090565b94610ec6604051809381936114c0565b039082865af191610ed56114cd565b9215610eef576102bd92506001600160a01b031690611b52565b825160208401fd5b638baa579f60e01b5f5260045ffd5b6001600160a01b038616141590505f610e95565b34610264575f36600319011261026457638b78c6d819546040516001600160a01b039091168152602090f35b6060366003190112610264576004356001600160401b03811161026457610f719036906004016102bf565b610f7961065e565b6044356001600160401b03811161026457610f98903690600401610237565b929093610fa3611d8e565b5f5b828110610ff4575050506001600160a01b038116610fcf575b5080610fc657005b6102bd91611e9f565b600780546001600160a01b0319166001600160a01b039092169190911790555f610fbe565b8061102f6110056001938686611642565b3561080b611014848888611642565b3591858060a01b03169160a01c5f52600660205260405f2090565b01610fa5565b34610264575f3660031901126102645761074960405161105660408261096e565b60098152684e324d4f776e65727360b81b60208201526040519182916020835260208301906106c1565b8015150361026457565b34610264576040366003190112610264576110a3610648565b6024356110af81611080565b6001600160a01b03821691821561112f57335f9081526005602090815260408083206001600160a01b0390941683529290522060ff1981541660ff831515161790557f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c316040518061112a339482919091602081019215159052565b0390a3005b82630b61174360e31b5f5260045260245ffd5b346102645760803660031901126102645761115b610648565b61116361065e565b90604435606435926001600160401b0384116102645761118a6102bd9436906004016109af565b92611845565b34610264576020366003190112610264576004356040516329ffa82360e11b81526020816004816001600160a01b0386165afa908115610d47576020610e2a61123f6107499561123961123f6112399761124c975f91611258575b5061123961123f6111fb46611fc6565b9561123961123f61122b61122561122061036261036261121a88611fc6565b97611cb6565b611fc6565b96611fc6565b986040519e8f9d8e01611987565b90611a0e565b602f60f81b815260010190565b604051918291826106e5565b6112789150873d891161127e575b611270818361096e565b810190611940565b5f6111eb565b503d611266565b3461026457602036600319011261026457604051620b809160e51b602082015260043560248201525f6044820152602581526112c260458261096e565b6112ca611a20565b905f5b603a81106112e15761074961124c84611a53565b806112f66112f16001938561200b565b61206c565b5f1a6113028286611a42565b53016112cd565b34610264575f36600319011261026457602060405161084a8152f35b604036600319011261026457611339610648565b6024356001600160401b038111610264576113589036906004016102bf565b91611361611d8e565b803b1561141657600854604080516001600160a01b038084168252841660208201529192917fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac9190a16001600160a01b03166001600160a01b031991909116176008555f5b8281106113cf57005b6008545f9081906001600160a01b0316816113eb85888861156b565b9190826040519384928337810182815203925af16114076114cd565b90156103b957506001016113c6565b6332483afb60e01b5f5260045ffd5b34610264576040366003190112610264576020610443611443610648565b61144b61065e565b90611a8a565b602036600319011261026457611465610648565b61146d611d8e565b8060601b156114b35760018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d81955005b637448fbae5f526004601cfd5b908092918237015f815290565b3d156114f7573d906114de82610994565b916114ec604051938461096e565b82523d5f602084013e565b606090565b929061151e5f9384938452600660205260018060a01b036040852054166120ae565b938160405192839283378101838152039082855af161153b6114cd565b90156103b95750611555906001600160a01b031633611b52565b565b634e487b7160e01b5f52603260045260245ffd5b91908110156115ac5760051b81013590601e19813603018212156102645701908135916001600160401b038311610264576020018236038113610264579190565b611557565b6001600160e01b0319166301ffc9a760e01b811461161b576307f5828d60e41b811461161b576380ac58cd60e01b811461161b57635b5e139f60e01b811461161b5763152a902d60e11b811461161b57632b435fdb60e21b811461161b5763503e914d60e11b1490565b50600190565b634e487b7160e01b5f52601160045260245ffd5b9190820391821161095557565b91908110156115ac5760051b0190565b5f1981146109555760010190565b9091906001600160a01b038316156117cc5761167d3383856120ec565b6001600160a01b03811693846116bd575b50506001600160a01b03168083036116a557505050565b6364283d7b60e01b5f5260045260245260445260645ffd5b6001600160a01b038416803b1561026457604051637699c77f60e01b81526001600160a01b03848116600483015283166024820152905f908290604490829084905af18015610d47576117b8575b506008546001600160a01b03168080611726575b505061168e565b336001600160a01b039091160361173e575b8061171f565b6001600160a01b031691823b156102645760405163657711f560e11b81523360048201526001600160a01b0391821660248201529116604482015260648101849052905f90829060849082905afa8015610d475761179e575b8080611738565b806117ac5f6117b29361096e565b806106b7565b5f611797565b806117ac5f6117c69361096e565b5f61170b565b633250574960e11b5f525f60045260245ffd5b9081602091031261026457516106f681611080565b6040513d5f823e3d90fd5b90928092607897959694637ce27a2760e01b84526004840152602483013701926bffffffffffffffffffffffff199060601b166024840152603883015260588201520190565b909291611853818584611660565b833b611860575b50505050565b6020916118826040519485938493630a85bd0160e11b85523360048601611f95565b03815f6001600160a01b0387165af15f918161190f575b506118d357506118a76114cd565b80519190826118cc57633250574960e11b5f526001600160a01b03821660045260245ffd5b9050602001fd5b6001600160e01b03191663757a42ff60e11b016118f457505f80808061185a565b633250574960e11b5f526001600160a01b031660045260245ffd5b61193291925060203d602011611939575b61192a818361096e565b810190611f80565b905f611899565b503d611920565b90816020910312610264575190565b90600182811c9216801561197d575b602083101461196957565b634e487b7160e01b5f52602260045260245ffd5b91607f169161195e565b6009545f92916119968261194f565b91600181169081156119fc57506001146119ae575050565b60095f90815292935090917f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af5b8382106119e85750500190565b6001816020925484860152019101906119db565b60ff1916825250811515909102019150565b805191908290602001825e015f815290565b60405160609190611a31838261096e565b603a815291601f1901366020840137565b9081518110156115ac570160200190565b90611555611a7c926040519384916734b833399d1797b160c11b60208401526028830190611a0e565b03601f19810184528361096e565b6001600160a01b039081165f9081526005602090815260408083209385168352929052205460ff1691908215611abd5750565b600854919250906001600160a01b03168015159081611b19575b5061161b576001600160a01b0316731e0049783f008a0085193e00003d00cd54003c71811461161b577388899dc0b84c6e726840e00dfb94abc6248825ec1490565b6001600160a01b0383161490505f611ad7565b60601c80156001600160a01b03909216141715611b4557565b630c4549ef5f526004601cfd5b906001600160a01b038216156117cc576001600160a01b0391611b759190611b8f565b16611b7c57565b6339e3563760e11b5f525f60045260245ffd5b9190611b9c5f82856120ec565b926001600160a01b038416611baf575050565b6001600160a01b038216803b1561026457604051637699c77f60e01b81526001600160a01b03868116600483015283166024820152905f908290604490829084905af18015610d4757611ca2575b506008546001600160a01b03168080611c165750505050565b336001600160a01b0390911603611c2e575b8061185a565b6001600160a01b031691823b156102645760405163657711f560e11b81523360048201526001600160a01b0386811660248301529290921660448301526064820152905f90829060849082905afa8015610d4757611c8e575b8080611c28565b806117ac5f611c9c9361096e565b5f611c87565b806117ac5f611cb09361096e565b5f611bfd565b5f818152600260205260409020546001600160a01b0316908115611cd8575090565b637e27328960e01b5f5260045260245ffd5b91906f67363d3d37363d34f03d5260086018f35f526010805ff5918215611d36575f80918460145261d694825260016034536017601e209482602083519301915af1823b0215611d3657565b63301164255f526004601cfd5b92916f67363d3d37363d34f03d5260086018f35f526010805ff58015611d36575f9181839260145261d694835260016034536017601e2095602083519301915af1823b0215611d3657565b638b78c6d819543303611d9d57565b6382b429005f526004601cfd5b602460106020939284936014526370a0823160601b5f525afa601f3d11166020510290565b909291926040519380604014611e2857604114611df857505050505b638baa579f5f526004601cfd5b806040809201355f1a60205281375b5f526020600160805f825afa51915f6060526040523d611555575050611deb565b5060208181013560ff81901c601b0190915290356040526001600160ff1b0316606052611e07565b601f8211611e5d57505050565b5f5260205f20906020601f840160051c83019310611e95575b601f0160051c01905b818110611e8a575050565b5f8155600101611e7f565b9091508190611e76565b91906001600160401b03811161098f57611ec581611ebe60095461194f565b6009611e50565b5f601f8211600114611f03578190611ef393945f92611ef8575b50508160011b915f199060031b1c19161790565b600955565b013590505f80611edf565b60095f52601f198216937f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af915f5b868110611f685750836001959610611f4f575b505050811b01600955565b01355f19600384901b60f8161c191690555f8080611f44565b90926020600181928686013581550194019101611f31565b9081602091031261026457516106f68161040a565b6001600160a01b0391821681529116602082015260408101919091526080606082018190526106f6929101906106c1565b90604051600a608082019360a083016040525f8552935b5f190193603082820601855304928315611ff957600a90611fdd565b809350608091030191601f1901918252565b9060058102908082046005149015171561095557600381901c906001600160f81b03196120388385611a42565b511691600181018091116109555761205460079160ff95611a42565b5160081c60f085901b169290921791161b60fb1c1690565b60ff16601a8110156120935760610160ff81116109555760f81b6001600160f81b03191690565b60180160ff81116109555760f81b6001600160f81b03191690565b6c5af43d3d93803e602a57fd5bf360215260145273602c3d8160093d39f33d3d3d3d363d3d37363d735f526035600c5ff5908115611d36575f602152565b5f828152600260205260409020546001600160a01b03908116939081166121bc575b506001600160a01b03831680612190575b6001600160a01b03821691612146908361216d575b61080b855f52600260205260405f2090565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a490565b6001600160a01b0381165f90815260036020526040902060018154019055612134565b6121998361226d565b6001600160a01b0384165f90815260036020526040902080545f1901905561211f565b6121d76001600160a01b038216801515908161221d57501590565b1561210e57826001600160a01b0385166121fd57637e27328960e01b5f5260045260245ffd5b63177e802f60e01b5f526001600160a01b0390911660045260245260445ffd5b6001600160a01b03871681149150811561225b575b811561223d57501590565b5f868152600460205260409020546001600160a01b03161415919050565b90506122678387611a8a565b90612232565b61227f905f52600460205260405f2090565b80546001600160a01b031916905556fea2646970667358221220ac0ee8949a500029c7c225c9aefbe7ad5055b53d320630ddc002b165ca08447264736f6c634300081b00336e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af000000000000000000000000c5557771673109cab9d05358e1d280fab522597700000000000000000000000000000000156d54b85de04c897356026a5ff2cbc9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000a248a99f797ec03160a76b184150740000000000000000000000000000000000bfd16d286a2ec182c471fb712f65de

    Deployed Bytecode

    0x60806040526004361015610011575f80fd5b5f3560e01c80156101dd57806001146101ec57806301ffc9a71461023257806303f30d081461022d57806304dad9351461022857806306fdde0314610223578063081812fc1461021e578063095ea7b314610219578063098144d4146102145780630d705df61461020f57806323b872dd1461020a5780632a55205a146102055780632af252381461020057806338395f19146101fb5780633c2e0828146101f657806342842e0e146101f15780635ae401dc146101ec5780636352211e146101e757806367c0e310146101e25780636a064fce146101dd5780636d07dbf8146101d85780636dce4ab0146101d357806370a08231146101ce5780637ce27a27146101c95780638da5cb5b146101c457806395905e21146101bf57806395d89b41146101ba578063a22cb465146101b5578063b88d4fde146101b0578063c87b56dd146101ab578063c91df5cc146101a6578063cb93c48f146101a1578063d805a4601461019c578063e985e9c5146101975763f2fde38b14610192575f80fd5b611451565b611425565b611325565b611309565b611285565b611190565b611142565b61108a565b611035565b610f46565b610f1a565b610da2565b610d4c565b610c8b565b610bf8565b61029e565b610b7c565b610b4c565b6102ef565b610b23565b610af1565b610a36565b6109f5565b610903565b6108ec565b61088b565b610863565b610789565b61074d565b6106f9565b610674565b61044d565b61041c565b9181601f84011215610264578235916001600160401b038311610264576020838186019501011161026457565b5f80fd5b606060031982011261026457600435906001600160401b0382116102645761029291600401610237565b90916024359060443590565b6102bd6102aa36610268565b926102b89291923384611b2c565b6114fc565b005b9181601f84011215610264578235916001600160401b038311610264576020808501948460051b01011161026457565b6040366003190112610264576004356024356001600160401b0381116102645761031d9036906004016102bf565b5f926001600160a01b0381169060a01c5b8085106103cf57508061033d57005b61036e610362610355835f52600260205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b33036103c157925b81811061037f57005b5f8061038c83858761156b565b9061039c604051809381936114c0565b039082885af16103aa6114cd565b90156103b95750600101610376565b602081519101fd5b6282b42960e81b5f5260045ffd5b935f806103dd83868861156b565b906103ed604051809381936114c0565b0390305af46103fa6114cd565b90156103b957506001019361032e565b6001600160e01b031981160361026457565b3461026457602036600319011261026457602061044360043561043e8161040a565b6115b1565b6040519015158152f35b6060366003190112610264576004356001600160401b038111610264576104789036906004016102bf565b6024356001600160401b038111610264576104979036906004016102bf565b92906044356001600160401b038111610264576104b89036906004016102bf565b92908561060f575b5f925f955f5b8181106104ed575050505050036104de57036104de57005b631df89e8b60e01b5f5260045ffd5b6104f8818387611642565b356001600160a01b0381169060a01c908061056557505f5b8181106105235750506001905b016104c6565b5f806105396105318b611652565b9a8c8a61156b565b90610549604051809381936114c0565b0390305af46105566114cd565b90156103b95750600101610510565b61057d610362610355835f52600260205260405f2090565b33036103c1579088915f5b82811061059b575050505060019061051d565b909192985f908d8d106105f1575b5f916105c1826105ba859491611652565b9d8c61156b565b906105d1604051809381936114c0565b0391865af16105de6114cd565b90156103b9575060010190899291610588565b90508c6105fd8d611652565b9c6106089189611642565b35906105a9565b6106193447611635565b80610625575b506104c0565b5f80808093736db16927dbc38aa39f0ee2cb545e15efd813fb995af1505f61061f565b600435906001600160a01b038216820361026457565b602435906001600160a01b038216820361026457565b602036600319011261026457610688610648565b6001600160a01b039061069c903390611b8f565b16156106a457005b637e27328960e01b5f523360045260245ffd5b5f91031261026457565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060206106f69281815201906106c1565b90565b34610264575f3660031901126102645761074960405161071a60408261096e565b600e81526d4e465473324d65204f776e65727360901b60208201526040519182916020835260208301906106c1565b0390f35b346102645760203660031901126102645760043561076a81611cb6565b505f526004602052602060018060a01b0360405f205416604051908152f35b34610264576040366003190112610264576107a2610648565b602435906107af82611cb6565b33151580610850575b8061083f575b61082a576102bd9261080b9181906001600160a01b0385811691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a45f52600460205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b63a9fbf51f60e01b5f90815233600452602490fd5b5061084a3382611a8a565b156107be565b506001600160a01b0381163314156107b8565b34610264575f366003190112610264576008546040516001600160a01b039091168152602090f35b34610264575f366003190112610264576040805163657711f560e11b815260016020820152f35b6060906003190112610264576004356001600160a01b038116810361026457906024356001600160a01b0381168103610264579060443590565b34610264576102bd6108fd366108b2565b91611660565b34610264576040366003190112610264576024356101f48102908082046101f414901517156109555760408051736db16927dbc38aa39f0ee2cb545e15efd813fb998152612710909204602083015290f35b611621565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761098f57604052565b61095a565b6001600160401b03811161098f57601f01601f191660200190565b81601f82011215610264578035906109c682610994565b926109d4604051948561096e565b8284526020838301011161026457815f926020809301838601378301015290565b6040366003190112610264576024356004356001600160401b03821161026457610a266102bd9236906004016109af565b610a303383611b2c565b34611d43565b610ab05f80610a4436610268565b610a52969293963383611b2c565b8452600660205260408085205481516c5af43d3d93803e602a57fd5bf360581b818401526001600160a01b03909116602882015273602c3d8160093d39f33d3d3d3d363d3d37363d7360148201526035815260608101909152611cea565b93610ac0604051809381936114c0565b039082855af190610acf6114cd565b9115610ae8576102bd906001600160a01b031633611b52565b50602081519101fd5b34610264576020366003190112610264576004355f526006602052602060018060a01b0360405f205416604051908152f35b34610264576102bd610b34366108b2565b9060405192610b4460208561096e565b5f8452611845565b34610264576020366003190112610264576020610b6a600435611cb6565b6040516001600160a01b039091168152f35b606036600319011261026457610b90610648565b602435906044356001600160401b03811161026457610bb6610bc8913690600401610237565b939092610bc33383611b2c565b6120ae565b82610bcf57005b825f9392849360405192839283378101848152039134905af1610bf06114cd565b90156103b957005b3461026457604036600319011261026457600435602435905f52600660205260018060a01b0360405f2054166c5af43d3d93803e602a57fd5bf360215260145273602c3d8160093d39f33d3d3d3d363d3d37363d735f526035600c205f60215260ff5f5360359081523060601b60015260159190915260555f90812091526040516001600160a01b039091168152602090f35b604036600319011261026457610c9f610648565b610ca761065e565b610caf611d8e565b5f80808047865af1506001600160a01b0381169182610cca57005b610d0f92610cdb6020933090611daa565b60405163a9059cbb60e01b81526001600160a01b0390931660048401526024830152909283919082905f9082906044820190565b03925af18015610d4757610d1f57005b6102bd9060203d602011610d40575b610d38818361096e565b8101906117df565b503d610d2e565b6117f4565b34610264576020366003190112610264576001600160a01b03610d6d610648565b168015610d8f575f52600360205260405f205460405190815260208180030190f35b6322718ad960e21b5f525f60045260245ffd5b60a0366003190112610264576004356001600160401b03811161026457610dcd903690600401610237565b610dd561065e565b90604435606435916084356001600160401b03811161026457610dff610e6a913690600401610237565b90610e0a8786611b2c565b610e658886610e388a610e2a8b6040519485938c6020860198468a6117ff565b03601f19810183528261096e565b5190206020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b611dcf565b600754610e7f906001600160a01b0316610362565b6001600160a01b03909116908114159081610f06575b50610ef757610eb65f9392610bc361035586955f52600660205260405f2090565b94610ec6604051809381936114c0565b039082865af191610ed56114cd565b9215610eef576102bd92506001600160a01b031690611b52565b825160208401fd5b638baa579f60e01b5f5260045ffd5b6001600160a01b038616141590505f610e95565b34610264575f36600319011261026457638b78c6d819546040516001600160a01b039091168152602090f35b6060366003190112610264576004356001600160401b03811161026457610f719036906004016102bf565b610f7961065e565b6044356001600160401b03811161026457610f98903690600401610237565b929093610fa3611d8e565b5f5b828110610ff4575050506001600160a01b038116610fcf575b5080610fc657005b6102bd91611e9f565b600780546001600160a01b0319166001600160a01b039092169190911790555f610fbe565b8061102f6110056001938686611642565b3561080b611014848888611642565b3591858060a01b03169160a01c5f52600660205260405f2090565b01610fa5565b34610264575f3660031901126102645761074960405161105660408261096e565b60098152684e324d4f776e65727360b81b60208201526040519182916020835260208301906106c1565b8015150361026457565b34610264576040366003190112610264576110a3610648565b6024356110af81611080565b6001600160a01b03821691821561112f57335f9081526005602090815260408083206001600160a01b0390941683529290522060ff1981541660ff831515161790557f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c316040518061112a339482919091602081019215159052565b0390a3005b82630b61174360e31b5f5260045260245ffd5b346102645760803660031901126102645761115b610648565b61116361065e565b90604435606435926001600160401b0384116102645761118a6102bd9436906004016109af565b92611845565b34610264576020366003190112610264576004356040516329ffa82360e11b81526020816004816001600160a01b0386165afa908115610d47576020610e2a61123f6107499561123961123f6112399761124c975f91611258575b5061123961123f6111fb46611fc6565b9561123961123f61122b61122561122061036261036261121a88611fc6565b97611cb6565b611fc6565b96611fc6565b986040519e8f9d8e01611987565b90611a0e565b602f60f81b815260010190565b604051918291826106e5565b6112789150873d891161127e575b611270818361096e565b810190611940565b5f6111eb565b503d611266565b3461026457602036600319011261026457604051620b809160e51b602082015260043560248201525f6044820152602581526112c260458261096e565b6112ca611a20565b905f5b603a81106112e15761074961124c84611a53565b806112f66112f16001938561200b565b61206c565b5f1a6113028286611a42565b53016112cd565b34610264575f36600319011261026457602060405161084a8152f35b604036600319011261026457611339610648565b6024356001600160401b038111610264576113589036906004016102bf565b91611361611d8e565b803b1561141657600854604080516001600160a01b038084168252841660208201529192917fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac9190a16001600160a01b03166001600160a01b031991909116176008555f5b8281106113cf57005b6008545f9081906001600160a01b0316816113eb85888861156b565b9190826040519384928337810182815203925af16114076114cd565b90156103b957506001016113c6565b6332483afb60e01b5f5260045ffd5b34610264576040366003190112610264576020610443611443610648565b61144b61065e565b90611a8a565b602036600319011261026457611465610648565b61146d611d8e565b8060601b156114b35760018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d81955005b637448fbae5f526004601cfd5b908092918237015f815290565b3d156114f7573d906114de82610994565b916114ec604051938461096e565b82523d5f602084013e565b606090565b929061151e5f9384938452600660205260018060a01b036040852054166120ae565b938160405192839283378101838152039082855af161153b6114cd565b90156103b95750611555906001600160a01b031633611b52565b565b634e487b7160e01b5f52603260045260245ffd5b91908110156115ac5760051b81013590601e19813603018212156102645701908135916001600160401b038311610264576020018236038113610264579190565b611557565b6001600160e01b0319166301ffc9a760e01b811461161b576307f5828d60e41b811461161b576380ac58cd60e01b811461161b57635b5e139f60e01b811461161b5763152a902d60e11b811461161b57632b435fdb60e21b811461161b5763503e914d60e11b1490565b50600190565b634e487b7160e01b5f52601160045260245ffd5b9190820391821161095557565b91908110156115ac5760051b0190565b5f1981146109555760010190565b9091906001600160a01b038316156117cc5761167d3383856120ec565b6001600160a01b03811693846116bd575b50506001600160a01b03168083036116a557505050565b6364283d7b60e01b5f5260045260245260445260645ffd5b6001600160a01b038416803b1561026457604051637699c77f60e01b81526001600160a01b03848116600483015283166024820152905f908290604490829084905af18015610d47576117b8575b506008546001600160a01b03168080611726575b505061168e565b336001600160a01b039091160361173e575b8061171f565b6001600160a01b031691823b156102645760405163657711f560e11b81523360048201526001600160a01b0391821660248201529116604482015260648101849052905f90829060849082905afa8015610d475761179e575b8080611738565b806117ac5f6117b29361096e565b806106b7565b5f611797565b806117ac5f6117c69361096e565b5f61170b565b633250574960e11b5f525f60045260245ffd5b9081602091031261026457516106f681611080565b6040513d5f823e3d90fd5b90928092607897959694637ce27a2760e01b84526004840152602483013701926bffffffffffffffffffffffff199060601b166024840152603883015260588201520190565b909291611853818584611660565b833b611860575b50505050565b6020916118826040519485938493630a85bd0160e11b85523360048601611f95565b03815f6001600160a01b0387165af15f918161190f575b506118d357506118a76114cd565b80519190826118cc57633250574960e11b5f526001600160a01b03821660045260245ffd5b9050602001fd5b6001600160e01b03191663757a42ff60e11b016118f457505f80808061185a565b633250574960e11b5f526001600160a01b031660045260245ffd5b61193291925060203d602011611939575b61192a818361096e565b810190611f80565b905f611899565b503d611920565b90816020910312610264575190565b90600182811c9216801561197d575b602083101461196957565b634e487b7160e01b5f52602260045260245ffd5b91607f169161195e565b6009545f92916119968261194f565b91600181169081156119fc57506001146119ae575050565b60095f90815292935090917f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af5b8382106119e85750500190565b6001816020925484860152019101906119db565b60ff1916825250811515909102019150565b805191908290602001825e015f815290565b60405160609190611a31838261096e565b603a815291601f1901366020840137565b9081518110156115ac570160200190565b90611555611a7c926040519384916734b833399d1797b160c11b60208401526028830190611a0e565b03601f19810184528361096e565b6001600160a01b039081165f9081526005602090815260408083209385168352929052205460ff1691908215611abd5750565b600854919250906001600160a01b03168015159081611b19575b5061161b576001600160a01b0316731e0049783f008a0085193e00003d00cd54003c71811461161b577388899dc0b84c6e726840e00dfb94abc6248825ec1490565b6001600160a01b0383161490505f611ad7565b60601c80156001600160a01b03909216141715611b4557565b630c4549ef5f526004601cfd5b906001600160a01b038216156117cc576001600160a01b0391611b759190611b8f565b16611b7c57565b6339e3563760e11b5f525f60045260245ffd5b9190611b9c5f82856120ec565b926001600160a01b038416611baf575050565b6001600160a01b038216803b1561026457604051637699c77f60e01b81526001600160a01b03868116600483015283166024820152905f908290604490829084905af18015610d4757611ca2575b506008546001600160a01b03168080611c165750505050565b336001600160a01b0390911603611c2e575b8061185a565b6001600160a01b031691823b156102645760405163657711f560e11b81523360048201526001600160a01b0386811660248301529290921660448301526064820152905f90829060849082905afa8015610d4757611c8e575b8080611c28565b806117ac5f611c9c9361096e565b5f611c87565b806117ac5f611cb09361096e565b5f611bfd565b5f818152600260205260409020546001600160a01b0316908115611cd8575090565b637e27328960e01b5f5260045260245ffd5b91906f67363d3d37363d34f03d5260086018f35f526010805ff5918215611d36575f80918460145261d694825260016034536017601e209482602083519301915af1823b0215611d3657565b63301164255f526004601cfd5b92916f67363d3d37363d34f03d5260086018f35f526010805ff58015611d36575f9181839260145261d694835260016034536017601e2095602083519301915af1823b0215611d3657565b638b78c6d819543303611d9d57565b6382b429005f526004601cfd5b602460106020939284936014526370a0823160601b5f525afa601f3d11166020510290565b909291926040519380604014611e2857604114611df857505050505b638baa579f5f526004601cfd5b806040809201355f1a60205281375b5f526020600160805f825afa51915f6060526040523d611555575050611deb565b5060208181013560ff81901c601b0190915290356040526001600160ff1b0316606052611e07565b601f8211611e5d57505050565b5f5260205f20906020601f840160051c83019310611e95575b601f0160051c01905b818110611e8a575050565b5f8155600101611e7f565b9091508190611e76565b91906001600160401b03811161098f57611ec581611ebe60095461194f565b6009611e50565b5f601f8211600114611f03578190611ef393945f92611ef8575b50508160011b915f199060031b1c19161790565b600955565b013590505f80611edf565b60095f52601f198216937f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af915f5b868110611f685750836001959610611f4f575b505050811b01600955565b01355f19600384901b60f8161c191690555f8080611f44565b90926020600181928686013581550194019101611f31565b9081602091031261026457516106f68161040a565b6001600160a01b0391821681529116602082015260408101919091526080606082018190526106f6929101906106c1565b90604051600a608082019360a083016040525f8552935b5f190193603082820601855304928315611ff957600a90611fdd565b809350608091030191601f1901918252565b9060058102908082046005149015171561095557600381901c906001600160f81b03196120388385611a42565b511691600181018091116109555761205460079160ff95611a42565b5160081c60f085901b169290921791161b60fb1c1690565b60ff16601a8110156120935760610160ff81116109555760f81b6001600160f81b03191690565b60180160ff81116109555760f81b6001600160f81b03191690565b6c5af43d3d93803e602a57fd5bf360215260145273602c3d8160093d39f33d3d3d3d363d3d37363d735f526035600c5ff5908115611d36575f602152565b5f828152600260205260409020546001600160a01b03908116939081166121bc575b506001600160a01b03831680612190575b6001600160a01b03821691612146908361216d575b61080b855f52600260205260405f2090565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a490565b6001600160a01b0381165f90815260036020526040902060018154019055612134565b6121998361226d565b6001600160a01b0384165f90815260036020526040902080545f1901905561211f565b6121d76001600160a01b038216801515908161221d57501590565b1561210e57826001600160a01b0385166121fd57637e27328960e01b5f5260045260245ffd5b63177e802f60e01b5f526001600160a01b0390911660045260245260445ffd5b6001600160a01b03871681149150811561225b575b811561223d57501590565b5f868152600460205260409020546001600160a01b03161415919050565b90506122678387611a8a565b90612232565b61227f905f52600460205260405f2090565b80546001600160a01b031916905556fea2646970667358221220ac0ee8949a500029c7c225c9aefbe7ad5055b53d320630ddc002b165ca08447264736f6c634300081b0033

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

    000000000000000000000000c5557771673109cab9d05358e1d280fab522597700000000000000000000000000000000156d54b85de04c897356026a5ff2cbc9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000a248a99f797ec03160a76b184150740000000000000000000000000000000000bfd16d286a2ec182c471fb712f65de

    -----Decoded View---------------
    Arg [0] : owner (address): 0xC5557771673109CAB9d05358E1D280fab5225977
    Arg [1] : delegatedCreationSigner (address): 0x00000000156D54b85de04c897356026a5ff2cBc9
    Arg [2] : type1 (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000
    Arg [3] : type2 (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000001
    Arg [4] : type1Address (address): 0x0000000000a248a99F797ec03160a76b18415074
    Arg [5] : type2Address (address): 0x0000000000bFD16d286a2ec182c471FB712f65de

    -----Encoded View---------------
    6 Constructor Arguments found :
    Arg [0] : 000000000000000000000000c5557771673109cab9d05358e1d280fab5225977
    Arg [1] : 00000000000000000000000000000000156d54b85de04c897356026a5ff2cbc9
    Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
    Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
    Arg [4] : 0000000000000000000000000000000000a248a99f797ec03160a76b18415074
    Arg [5] : 0000000000000000000000000000000000bfd16d286a2ec182c471fb712f65de


    [ Download: CSV Export  ]
    [ Download: CSV Export  ]

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