ETH Price: $2,507.74 (+0.30%)

Token

QuantumUnlocked (QKU)
 

Overview

Max Total Supply

0 QKU

Holders

1,478

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
ivys.eth
Balance
4 QKU
0xfb04e8a2a5f0b2b89ef390a5aa8777d9f5ed1c1a
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Digital Culture, Curated. Quantum is an NFT platform for artists and collectors to share their work with the world.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
QuantumUnlocked

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion
File 1 of 6 : QuantumUnlocked.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

import {ERC721 as ERC721S} from "@rari-capital/solmate/src/tokens/ERC721.sol";
import "@rari-capital/solmate/src/auth/Auth.sol";
import "@openzeppelin/contracts/utils/structs/BitMaps.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "./ERC2981V2.sol";


/// @title The Quantum Unlocked. Speciality drops for the quantum keys are released here
/// @author jcbdev
contract QuantumUnlocked is ERC721S, ERC2981, Auth {
    using Strings for uint256;
    using BitMaps for BitMaps.BitMap;

    /// >>>>>>>>>>>>>>>>>>>>>>>  EVENTS  <<<<<<<<<<<<<<<<<<<<<<<<<< ///

    event DropMint(address indexed to, uint256 indexed dropId, uint256 indexed variant, uint256 id);

    /// >>>>>>>>>>>>>>>>>>>>>>>  STATE  <<<<<<<<<<<<<<<<<<<<<<<<<< ///

    mapping (uint128 => string) public dropCID;
    mapping (uint128 => uint128) public dropSupply;
    mapping (uint256 => uint256) public tokenVariant;

    string private _baseURI = "https://core-api.quantum.art/v1/metadata/unlocked/";
    string private _ipfsURI = "ipfs://";
    address private _minter;

    /// >>>>>>>>>>>>>>>>>>>>>  CONSTRUCTOR  <<<<<<<<<<<<<<<<<<<<<< ///

	/// @notice Deploys QuantumUnlocked
    /// @dev Initiates the Auth module with no authority and the sender as the owner
    /// @param owner The owner of the contract
    /// @param authority address of the deployed authority
    constructor(address owner, address authority) ERC721S("QuantumUnlocked", "QKU") Auth(owner, Authority(authority)) {
        _baseURI = "https://core-api.quantum.art/v1/metadata/unlocked/";
        _ipfsURI = "ipfs://";
    }

    /// >>>>>>>>>>>>>>>>>>>>>  INTERNAL  <<<<<<<<<<<<<<<<<<<<<< ///
    /// @notice get the token id from the drop id and sequence number
    /// @param dropId The drop id
    /// @param sequence the sequence number of the minted token within the drop 
    /// @return tokenId the combined token id 
    function _tokenId(uint128 dropId, uint128 sequence) internal pure returns (uint256 tokenId) {
        tokenId |= uint256(dropId) << 128;
        tokenId |= uint256(sequence);
        return tokenId;
    }

    /// @notice extract the drop id and the sequence number from the token id
    /// @param tokenId The token id to extract the values from
    /// @return uint128 the drop id
    /// @return uint128 the sequence number
    function _splitTokenId(uint256 tokenId) internal pure returns (uint128, uint128) {
        return (uint128(tokenId >> 128), uint128(tokenId));
    }

    /// >>>>>>>>>>>>>>>>>>>>>  RESTRICTED  <<<<<<<<<<<<<<<<<<<<<< ///

    /// @notice set address of the minter
    /// @param minter The address of the minter - should be Sales Platform
    function setMinter(address minter) public requiresAuth {
        _minter = minter;
    }

    /// @notice set the baseURI
    /// @param baseURI new base
    function setBaseURI(string calldata baseURI) public requiresAuth {
        _baseURI = baseURI;
    }

    /// @notice set the base ipfs URI
    /// @param ipfsURI new base
    function setIpfsURI(string calldata ipfsURI) public requiresAuth {
        _ipfsURI = ipfsURI;
    }

    /// @notice set the IPFS CID
    /// @param dropId The drop id
    /// @param cid cid
    function setCID(uint128 dropId, string calldata cid) public requiresAuth {
        dropCID[dropId] = cid;
    }

    /// @notice sets the recipient of the royalties
    /// @param recipient address of the recipient
    function setRoyaltyRecipient(address recipient) public requiresAuth {
        _royaltyRecipient = recipient;
    }

    /// @notice sets the fee of royalties
    /// @dev The fee denominator is 10000 in BPS.
    /// @param fee fee
    /*
        Example

        This would set the fee at 5%
        ```
        KeyUnlocks.setRoyaltyFee(500)
        ```
    */
    function setRoyaltyFee(uint256 fee) public requiresAuth {
        _royaltyFee = fee;
    }

    /// @notice Mints new tokens
    /// @dev there is no check regarding limiting supply
    /// @param to recipient of newly minted tokens
    /// @param dropId id of the key
    function mint(address to, uint128 dropId, uint256 variant) public returns (uint256) {
        require(msg.sender == owner || msg.sender == _minter, "NOT_AUTHORIZED");

        dropSupply[dropId] += 1;
        uint256 tokenId = _tokenId(dropId, uint128(dropSupply[dropId]));
        _safeMint(to, tokenId);
        if (variant > 0) {
            tokenVariant[tokenId] = variant;
        }
        emit DropMint(to, dropId, variant, tokenId);
        return tokenId;
    }

    /// @notice Burns token that has been redeemed for something else
    /// @dev Sales platform only
    /// @param tokenId id of the tokens
    function redeemBurn(uint256 tokenId) public requiresAuth {
        _burn(tokenId);
    }

    /// >>>>>>>>>>>>>>>>>>>>>  VIEW  <<<<<<<<<<<<<<<<<<<<<< ///

    /// @notice Returns the URI of the token
    /// @param tokenId id of the token
    /// @return URI for the token ; expected to be ipfs://<cid>
    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        (uint128 dropId, uint128 sequenceNumber) = _splitTokenId(tokenId);
        uint256 actualSequence = tokenVariant[tokenId] > 0 ? tokenVariant[tokenId] : sequenceNumber;
        if (bytes(dropCID[dropId]).length > 0)
            return string(abi.encodePacked(_ipfsURI, dropCID[dropId], "/" , actualSequence.toString()));
        else
            return string(abi.encodePacked(_baseURI, uint256(dropId).toString(), "/" , actualSequence.toString()));
    }

    /// >>>>>>>>>>>>>>>>>>>>>  EXTERNAL  <<<<<<<<<<<<<<<<<<<<<< ///

    /// @notice Burns token
    /// @dev Can be called by the owner or approved operator
    /// @param tokenId id of the tokens
    function burn(uint256 tokenId) public {
        address owner = ownerOf[tokenId];
        require(
            msg.sender == owner || msg.sender == getApproved[tokenId] || isApprovedForAll[owner][msg.sender],
            "NOT_AUTHORIZED"
        );
        _burn(tokenId);
    }

    function supportsInterface(bytes4 interfaceId) public pure virtual override(ERC721S, ERC2981) returns (bool) {
        return ERC721S.supportsInterface(interfaceId) || ERC2981.supportsInterface(interfaceId);
    }
}

File 2 of 6 : ERC721.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern, minimalist, and gas efficient ERC-721 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
/// @dev Note that balanceOf does not revert if passed the zero address, in defiance of the ERC.
abstract contract ERC721 {
    /*///////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 indexed id);

    event Approval(address indexed owner, address indexed spender, uint256 indexed id);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /*///////////////////////////////////////////////////////////////
                          METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    function tokenURI(uint256 id) public view virtual returns (string memory);

    /*///////////////////////////////////////////////////////////////
                            ERC721 STORAGE                        
    //////////////////////////////////////////////////////////////*/

    mapping(address => uint256) public balanceOf;

    mapping(uint256 => address) public ownerOf;

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*///////////////////////////////////////////////////////////////
                              CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    /*///////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 id) public virtual {
        address owner = ownerOf[id];

        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED");

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        require(from == ownerOf[id], "WRONG_FROM");

        require(to != address(0), "INVALID_RECIPIENT");

        require(
            msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender],
            "NOT_AUTHORIZED"
        );

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            balanceOf[from]--;

            balanceOf[to]++;
        }

        ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes memory data
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    /*///////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 id) internal virtual {
        require(to != address(0), "INVALID_RECIPIENT");

        require(ownerOf[id] == address(0), "ALREADY_MINTED");

        // Counter overflow is incredibly unrealistic.
        unchecked {
            balanceOf[to]++;
        }

        ownerOf[id] = to;

        emit Transfer(address(0), to, id);
    }

    function _burn(uint256 id) internal virtual {
        address owner = ownerOf[id];

        require(ownerOf[id] != address(0), "NOT_MINTED");

        // Ownership check above ensures no underflow.
        unchecked {
            balanceOf[owner]--;
        }

        delete ownerOf[id];

        delete getApproved[id];

        emit Transfer(owner, address(0), id);
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL SAFE MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    function _safeMint(address to, uint256 id) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _safeMint(
        address to,
        uint256 id,
        bytes memory data
    ) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
interface ERC721TokenReceiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 id,
        bytes calldata data
    ) external returns (bytes4);
}

File 3 of 6 : Auth.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Provides a flexible and updatable auth pattern which is completely separate from application logic.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
abstract contract Auth {
    event OwnerUpdated(address indexed user, address indexed newOwner);

    event AuthorityUpdated(address indexed user, Authority indexed newAuthority);

    address public owner;

    Authority public authority;

    constructor(address _owner, Authority _authority) {
        owner = _owner;
        authority = _authority;

        emit OwnerUpdated(msg.sender, _owner);
        emit AuthorityUpdated(msg.sender, _authority);
    }

    modifier requiresAuth() {
        require(isAuthorized(msg.sender, msg.sig), "UNAUTHORIZED");

        _;
    }

    function isAuthorized(address user, bytes4 functionSig) internal view virtual returns (bool) {
        Authority auth = authority; // Memoizing authority saves us a warm SLOAD, around 100 gas.

        // Checking if the caller is the owner only after calling the authority saves gas in most cases, but be
        // aware that this makes protected functions uncallable even to the owner if the authority is out of order.
        return (address(auth) != address(0) && auth.canCall(user, address(this), functionSig)) || user == owner;
    }

    function setAuthority(Authority newAuthority) public virtual {
        // We check if the caller is the owner first because we want to ensure they can
        // always swap out the authority even if it's reverting or using up a lot of gas.
        require(msg.sender == owner || authority.canCall(msg.sender, address(this), msg.sig));

        authority = newAuthority;

        emit AuthorityUpdated(msg.sender, newAuthority);
    }

    function setOwner(address newOwner) public virtual requiresAuth {
        owner = newOwner;

        emit OwnerUpdated(msg.sender, newOwner);
    }
}

/// @notice A generic interface for a contract which provides authorization data to an Auth instance.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
interface Authority {
    function canCall(
        address user,
        address target,
        bytes4 functionSig
    ) external view returns (bool);
}

File 4 of 6 : BitMaps.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/structs/BitMaps.sol)
pragma solidity ^0.8.0;

/**
 * @dev Library for managing uint256 to bool mapping in a compact and efficient way, providing the keys are sequential.
 * Largelly inspired by Uniswap's https://github.com/Uniswap/merkle-distributor/blob/master/contracts/MerkleDistributor.sol[merkle-distributor].
 */
library BitMaps {
    struct BitMap {
        mapping(uint256 => uint256) _data;
    }

    /**
     * @dev Returns whether the bit at `index` is set.
     */
    function get(BitMap storage bitmap, uint256 index) internal view returns (bool) {
        uint256 bucket = index >> 8;
        uint256 mask = 1 << (index & 0xff);
        return bitmap._data[bucket] & mask != 0;
    }

    /**
     * @dev Sets the bit at `index` to the boolean `value`.
     */
    function setTo(
        BitMap storage bitmap,
        uint256 index,
        bool value
    ) internal {
        if (value) {
            set(bitmap, index);
        } else {
            unset(bitmap, index);
        }
    }

    /**
     * @dev Sets the bit at `index`.
     */
    function set(BitMap storage bitmap, uint256 index) internal {
        uint256 bucket = index >> 8;
        uint256 mask = 1 << (index & 0xff);
        bitmap._data[bucket] |= mask;
    }

    /**
     * @dev Unsets the bit at `index`.
     */
    function unset(BitMap storage bitmap, uint256 index) internal {
        uint256 bucket = index >> 8;
        uint256 mask = 1 << (index & 0xff);
        bitmap._data[bucket] &= ~mask;
    }
}

File 5 of 6 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

File 6 of 6 : ERC2981V2.sol
pragma solidity >=0.8.0;

/// @title Minimalist ERC2981 implementation.
/// @notice To be used within Quantum, as it was written for its needs.
/// @author exp.table
abstract contract ERC2981 {

    /// @dev one global fee for all royalties.
    uint256 internal _royaltyFee;
    /// @dev one global recipient for all royalties.
    address internal _royaltyRecipient;

    function royaltyInfo(uint256 tokenId, uint256 salePrice) public view virtual returns (
        address receiver,
        uint256 royaltyAmount
    ) {
        receiver = _royaltyRecipient;
        royaltyAmount = (salePrice * _royaltyFee) / 10000;
    }

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x2a55205a; // ERC165 Interface ID for ERC2981
    }

}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 10000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","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":"user","type":"address"},{"indexed":true,"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"dropId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"variant","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"DropMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerUpdated","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract Authority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"","type":"uint128"}],"name":"dropCID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"","type":"uint128"}],"name":"dropSupply","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint128","name":"dropId","type":"uint128"},{"internalType":"uint256","name":"variant","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"redeemBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","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":"id","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":"id","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":"contract Authority","name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"dropId","type":"uint128"},{"internalType":"string","name":"cid","type":"string"}],"name":"setCID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ipfsURI","type":"string"}],"name":"setIpfsURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRoyaltyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"setRoyaltyRecipient","outputs":[],"stateMutability":"nonpayable","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":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenVariant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052603260808181529062002bdc60a03980516200002991600d91602090910190620001f7565b5060408051808201909152600780825266697066733a2f2f60c81b60209092019182526200005a91600e91620001f7565b503480156200006857600080fd5b5060405162002c0e38038062002c0e8339810160408190526200008b91620002ba565b604080518082018252600f81526e145d585b9d1d5b555b9b1bd8dad959608a1b602080830191825283518085019094526003845262514b5560e81b90840152815185938593929091620000e191600091620001f7565b508051620000f7906001906020840190620001f7565b5050600880546001600160a01b038086166001600160a01b03199283168117909355600980549186169190921617905560405190915033907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a3505060405180606001604052806032815260200162002bdc603291398051620001bd91600d91602090910190620001f7565b5060408051808201909152600780825266697066733a2f2f60c81b6020909201918252620001ee91600e91620001f7565b5050506200032f565b8280546200020590620002f2565b90600052602060002090601f01602090048101928262000229576000855562000274565b82601f106200024457805160ff191683800117855562000274565b8280016001018555821562000274579182015b828111156200027457825182559160200191906001019062000257565b506200028292915062000286565b5090565b5b8082111562000282576000815560010162000287565b80516001600160a01b0381168114620002b557600080fd5b919050565b60008060408385031215620002ce57600080fd5b620002d9836200029d565b9150620002e9602084016200029d565b90509250929050565b600181811c908216806200030757607f821691505b602082108114156200032957634e487b7160e01b600052602260045260246000fd5b50919050565b61289d806200033f6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80636352211e11610104578063bf7e214f116100a2578063e985e9c511610071578063e985e9c5146104f4578063f6e384e414610522578063fc7d864914610535578063fca3b5aa1461054857600080fd5b8063bf7e214f1461048e578063c87b56dd146104ae578063dd46edb8146104c1578063de5ac894146104e157600080fd5b80638da5cb5b116100de5780638da5cb5b1461044057806395d89b4114610460578063a22cb46514610468578063b88d4fde1461047b57600080fd5b80636352211e146103c957806370a08231146103ff5780637a9e5e4b1461042d57600080fd5b80632a55205a1161017c57806342842e0e1161014b57806342842e0e1461037d57806342966c68146103905780635443e82c146103a357806355f804b3146103b657600080fd5b80632a55205a1461030557806331690734146103445780633e4086e51461035757806341e42f301461036a57600080fd5b8063081812fc116101b8578063081812fc1461026f578063095ea7b3146102ca57806313af4035146102df57806323b872dd146102f257600080fd5b806301ffc9a7146101df57806302efee211461020757806306fdde031461025a575b600080fd5b6101f26101ed366004611ff2565b61055b565b60405190151581526020015b60405180910390f35b61023961021536600461203b565b600b602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016101fe565b61026261057b565b6040516101fe91906120cc565b6102a561027d3660046120df565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fe565b6102dd6102d836600461211a565b610609565b005b6102dd6102ed366004612146565b61073e565b6102dd610300366004612163565b610829565b6103186103133660046121a4565b610aa2565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101fe565b6102dd61035236600461220f565b610ae5565b6102dd6103653660046120df565b610b70565b6102dd610378366004612146565b610bef565b6102dd61038b366004612163565b610cb0565b6102dd61039e3660046120df565b610dfb565b6102dd6103b1366004612251565b610ee5565b6102dd6103c436600461220f565b610f91565b6102a56103d73660046120df565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b61041f61040d366004612146565b60026020526000908152604090205481565b6040519081526020016101fe565b6102dd61043b366004612146565b611017565b6008546102a59073ffffffffffffffffffffffffffffffffffffffff1681565b610262611174565b6102dd6104763660046122b2565b611181565b6102dd61048936600461231a565b611218565b6009546102a59073ffffffffffffffffffffffffffffffffffffffff1681565b6102626104bc3660046120df565b61134f565b61041f6104cf3660046120df565b600c6020526000908152604090205481565b6102626104ef36600461203b565b61145f565b6101f2610502366004612418565b600560209081526000928352604080842090915290825290205460ff1681565b61041f610530366004612446565b611478565b6102dd6105433660046120df565b611631565b6102dd610556366004612146565b6116b7565b600061056682611778565b80610575575061057582611859565b92915050565b6000805461058890612484565b80601f01602080910402602001604051908101604052809291908181526020018280546105b490612484565b80156106015780601f106105d657610100808354040283529160200191610601565b820191906000526020600020905b8154815290600101906020018083116105e457829003601f168201915b505050505081565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff163381148061066c575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b6106bd5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b60008281526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61076c336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6107b85760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff84811691161461089f5760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d0000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff82166109025760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016106b4565b3373ffffffffffffffffffffffffffffffffffffffff84161480610949575060008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610984575073ffffffffffffffffffffffffffffffffffffffff8316600090815260056020908152604080832033845290915290205460ff165b6109d05760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055938616808352848320805460010190558583526003825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60075460065473ffffffffffffffffffffffffffffffffffffffff9091169060009061271090610ad29085612507565b610adc9190612573565b90509250929050565b610b13336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610b5f5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b610b6b600e8383611f0d565b505050565b610b9e336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610bea5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600655565b610c1d336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610c695760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610cbb838383610829565b73ffffffffffffffffffffffffffffffffffffffff82163b1580610daf57506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610b6b5760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610e51575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610e8c575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b610ed85760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b610ee1826119ff565b5050565b610f13336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610f5f5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b6fffffffffffffffffffffffffffffffff83166000908152600a60205260409020610f8b908383611f0d565b50505050565b610fbf336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b61100b5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b610b6b600d8383611f0d565b60085473ffffffffffffffffffffffffffffffffffffffff163314806110fa57506009546040517fb70096130000000000000000000000000000000000000000000000000000000081523360048201523060248201526000357fffffffff0000000000000000000000000000000000000000000000000000000016604482015273ffffffffffffffffffffffffffffffffffffffff9091169063b700961390606401602060405180830381865afa1580156110d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fa91906125a4565b61110357600080fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b6001805461058890612484565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611223848484610829565b73ffffffffffffffffffffffffffffffffffffffff83163b158061130357506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061129c9033908990889088906004016125c1565b6020604051808303816000875af11580156112bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112df9190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610f8b5760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b6000818152600c6020526040812054606091608084901c9184919061138657816fffffffffffffffffffffffffffffffff16611396565b6000858152600c60205260409020545b6fffffffffffffffffffffffffffffffff84166000908152600a60205260408120805492935090916113c790612484565b90501115611427576fffffffffffffffffffffffffffffffff83166000908152600a60205260409020600e906113fc83611b2f565b60405160200161140e939291906126db565b6040516020818303038152906040529350505050919050565b600d611444846fffffffffffffffffffffffffffffffff16611b2f565b61144d83611b2f565b60405160200161140e93929190612733565b600a602052600090815260409020805461058890612484565b60085460009073ffffffffffffffffffffffffffffffffffffffff163314806114b85750600f5473ffffffffffffffffffffffffffffffffffffffff1633145b6115045760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b6fffffffffffffffffffffffffffffffff8084166000908152600b60205260408120805460019391929161153a91859116612788565b82546101009290920a6fffffffffffffffffffffffffffffffff8181021990931691831602179091558481166000908152600b6020526040812054909250167fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086901b161790506115ad8582611c61565b82156115c5576000818152600c602052604090208390555b82846fffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6d5335192a1efe736f886245fc1f6dbf882294247353ca1a57cb804607898b898460405161162191815260200190565b60405180910390a4949350505050565b61165f336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6116ab5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b6116b4816119ff565b50565b6116e5336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6117315760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061180b57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806105755750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806105755750507fffffffff00000000000000000000000000000000000000000000000000000000167f2a55205a000000000000000000000000000000000000000000000000000000001490565b60095460009073ffffffffffffffffffffffffffffffffffffffff1680158015906119d257506040517fb700961300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527fffffffff000000000000000000000000000000000000000000000000000000008516604483015282169063b700961390606401602060405180830381865afa1580156119ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d291906125a4565b806119f7575060085473ffffffffffffffffffffffffffffffffffffffff8581169116145b949350505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1680611a715760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e5445440000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558583526003825280832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560049092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606081611b6f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611b995780611b83816127bc565b9150611b929050600a83612573565b9150611b73565b60008167ffffffffffffffff811115611bb457611bb46122eb565b6040519080825280601f01601f191660200182016040528015611bde576020820181803683370190505b5090505b84156119f757611bf36001836127f5565b9150611c00600a8661280c565b611c0b906030612820565b60f81b818381518110611c2057611c20612838565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611c5a600a86612573565b9450611be2565b611c6b8282611da8565b73ffffffffffffffffffffffffffffffffffffffff82163b1580611d5c57506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252336004830152600060248301819052604483018490526080606484015260848301529073ffffffffffffffffffffffffffffffffffffffff84169063150b7a029060a4016020604051808303816000875af1158015611d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d389190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610ee15760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8216611e0b5760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016106b4565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611e7d5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e54454400000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080546001019055848352600390915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f1990612484565b90600052602060002090601f016020900481019282611f3b5760008555611f9f565b82601f10611f72578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611f9f565b82800160010185558215611f9f579182015b82811115611f9f578235825591602001919060010190611f84565b50611fab929150611faf565b5090565b5b80821115611fab5760008155600101611fb0565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146116b457600080fd5b60006020828403121561200457600080fd5b813561200f81611fc4565b9392505050565b80356fffffffffffffffffffffffffffffffff8116811461203657600080fd5b919050565b60006020828403121561204d57600080fd5b61200f82612016565b60005b83811015612071578181015183820152602001612059565b83811115610f8b5750506000910152565b6000815180845261209a816020860160208601612056565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061200f6020830184612082565b6000602082840312156120f157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146116b457600080fd5b6000806040838503121561212d57600080fd5b8235612138816120f8565b946020939093013593505050565b60006020828403121561215857600080fd5b813561200f816120f8565b60008060006060848603121561217857600080fd5b8335612183816120f8565b92506020840135612193816120f8565b929592945050506040919091013590565b600080604083850312156121b757600080fd5b50508035926020909101359150565b60008083601f8401126121d857600080fd5b50813567ffffffffffffffff8111156121f057600080fd5b60208301915083602082850101111561220857600080fd5b9250929050565b6000806020838503121561222257600080fd5b823567ffffffffffffffff81111561223957600080fd5b612245858286016121c6565b90969095509350505050565b60008060006040848603121561226657600080fd5b61226f84612016565b9250602084013567ffffffffffffffff81111561228b57600080fd5b612297868287016121c6565b9497909650939450505050565b80151581146116b457600080fd5b600080604083850312156122c557600080fd5b82356122d0816120f8565b915060208301356122e0816122a4565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561233057600080fd5b843561233b816120f8565b9350602085013561234b816120f8565b925060408501359150606085013567ffffffffffffffff8082111561236f57600080fd5b818701915087601f83011261238357600080fd5b813581811115612395576123956122eb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156123db576123db6122eb565b816040528281528a60208487010111156123f457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561242b57600080fd5b8235612436816120f8565b915060208301356122e0816120f8565b60008060006060848603121561245b57600080fd5b8335612466816120f8565b925061247460208501612016565b9150604084013590509250925092565b600181811c9082168061249857607f821691505b602082108114156124d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561253f5761253f6124d8565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261258257612582612544565b500490565b60006020828403121561259957600080fd5b815161200f81611fc4565b6000602082840312156125b657600080fd5b815161200f816122a4565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526126006080830184612082565b9695505050505050565b8054600090600181811c908083168061262457607f831692505b602080841082141561265f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b81801561267357600181146126a2576126cf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506126cf565b60008881526020902060005b868110156126c75781548b8201529085019083016126ae565b505084890196505b50505050505092915050565b60006126f06126ea838761260a565b8561260a565b7f2f0000000000000000000000000000000000000000000000000000000000000081528351612726816001840160208801612056565b0160010195945050505050565b600061273f828661260a565b845161274f818360208901612056565b7f2f0000000000000000000000000000000000000000000000000000000000000091019081528351612726816001840160208801612056565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156127b3576127b36124d8565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127ee576127ee6124d8565b5060010190565b600082821015612807576128076124d8565b500390565b60008261281b5761281b612544565b500690565b60008219821115612833576128336124d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212209f52495de295bee914760b58cbd34aa3d31885e36004ed564c817e16c1ed9eed64736f6c634300080b003368747470733a2f2f636f72652d6170692e7175616e74756d2e6172742f76312f6d657461646174612f756e6c6f636b65642f000000000000000000000000c5c721caa3cad959818e891b533a34c37946e9bf0000000000000000000000008c1927427eaaca6a64e238544adfb95451cc05a1

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80636352211e11610104578063bf7e214f116100a2578063e985e9c511610071578063e985e9c5146104f4578063f6e384e414610522578063fc7d864914610535578063fca3b5aa1461054857600080fd5b8063bf7e214f1461048e578063c87b56dd146104ae578063dd46edb8146104c1578063de5ac894146104e157600080fd5b80638da5cb5b116100de5780638da5cb5b1461044057806395d89b4114610460578063a22cb46514610468578063b88d4fde1461047b57600080fd5b80636352211e146103c957806370a08231146103ff5780637a9e5e4b1461042d57600080fd5b80632a55205a1161017c57806342842e0e1161014b57806342842e0e1461037d57806342966c68146103905780635443e82c146103a357806355f804b3146103b657600080fd5b80632a55205a1461030557806331690734146103445780633e4086e51461035757806341e42f301461036a57600080fd5b8063081812fc116101b8578063081812fc1461026f578063095ea7b3146102ca57806313af4035146102df57806323b872dd146102f257600080fd5b806301ffc9a7146101df57806302efee211461020757806306fdde031461025a575b600080fd5b6101f26101ed366004611ff2565b61055b565b60405190151581526020015b60405180910390f35b61023961021536600461203b565b600b602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016101fe565b61026261057b565b6040516101fe91906120cc565b6102a561027d3660046120df565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fe565b6102dd6102d836600461211a565b610609565b005b6102dd6102ed366004612146565b61073e565b6102dd610300366004612163565b610829565b6103186103133660046121a4565b610aa2565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101fe565b6102dd61035236600461220f565b610ae5565b6102dd6103653660046120df565b610b70565b6102dd610378366004612146565b610bef565b6102dd61038b366004612163565b610cb0565b6102dd61039e3660046120df565b610dfb565b6102dd6103b1366004612251565b610ee5565b6102dd6103c436600461220f565b610f91565b6102a56103d73660046120df565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b61041f61040d366004612146565b60026020526000908152604090205481565b6040519081526020016101fe565b6102dd61043b366004612146565b611017565b6008546102a59073ffffffffffffffffffffffffffffffffffffffff1681565b610262611174565b6102dd6104763660046122b2565b611181565b6102dd61048936600461231a565b611218565b6009546102a59073ffffffffffffffffffffffffffffffffffffffff1681565b6102626104bc3660046120df565b61134f565b61041f6104cf3660046120df565b600c6020526000908152604090205481565b6102626104ef36600461203b565b61145f565b6101f2610502366004612418565b600560209081526000928352604080842090915290825290205460ff1681565b61041f610530366004612446565b611478565b6102dd6105433660046120df565b611631565b6102dd610556366004612146565b6116b7565b600061056682611778565b80610575575061057582611859565b92915050565b6000805461058890612484565b80601f01602080910402602001604051908101604052809291908181526020018280546105b490612484565b80156106015780601f106105d657610100808354040283529160200191610601565b820191906000526020600020905b8154815290600101906020018083116105e457829003601f168201915b505050505081565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff163381148061066c575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b6106bd5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b60008281526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61076c336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6107b85760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff84811691161461089f5760405162461bcd60e51b815260206004820152600a60248201527f57524f4e475f46524f4d0000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff82166109025760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016106b4565b3373ffffffffffffffffffffffffffffffffffffffff84161480610949575060008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610984575073ffffffffffffffffffffffffffffffffffffffff8316600090815260056020908152604080832033845290915290205460ff165b6109d05760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055938616808352848320805460010190558583526003825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60075460065473ffffffffffffffffffffffffffffffffffffffff9091169060009061271090610ad29085612507565b610adc9190612573565b90509250929050565b610b13336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610b5f5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b610b6b600e8383611f0d565b505050565b610b9e336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610bea5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600655565b610c1d336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610c695760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610cbb838383610829565b73ffffffffffffffffffffffffffffffffffffffff82163b1580610daf57506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610b6b5760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610e51575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b80610e8c575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b610ed85760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b610ee1826119ff565b5050565b610f13336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b610f5f5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b6fffffffffffffffffffffffffffffffff83166000908152600a60205260409020610f8b908383611f0d565b50505050565b610fbf336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b61100b5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b610b6b600d8383611f0d565b60085473ffffffffffffffffffffffffffffffffffffffff163314806110fa57506009546040517fb70096130000000000000000000000000000000000000000000000000000000081523360048201523060248201526000357fffffffff0000000000000000000000000000000000000000000000000000000016604482015273ffffffffffffffffffffffffffffffffffffffff9091169063b700961390606401602060405180830381865afa1580156110d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fa91906125a4565b61110357600080fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b6001805461058890612484565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611223848484610829565b73ffffffffffffffffffffffffffffffffffffffff83163b158061130357506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061129c9033908990889088906004016125c1565b6020604051808303816000875af11580156112bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112df9190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610f8b5760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b6000818152600c6020526040812054606091608084901c9184919061138657816fffffffffffffffffffffffffffffffff16611396565b6000858152600c60205260409020545b6fffffffffffffffffffffffffffffffff84166000908152600a60205260408120805492935090916113c790612484565b90501115611427576fffffffffffffffffffffffffffffffff83166000908152600a60205260409020600e906113fc83611b2f565b60405160200161140e939291906126db565b6040516020818303038152906040529350505050919050565b600d611444846fffffffffffffffffffffffffffffffff16611b2f565b61144d83611b2f565b60405160200161140e93929190612733565b600a602052600090815260409020805461058890612484565b60085460009073ffffffffffffffffffffffffffffffffffffffff163314806114b85750600f5473ffffffffffffffffffffffffffffffffffffffff1633145b6115045760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016106b4565b6fffffffffffffffffffffffffffffffff8084166000908152600b60205260408120805460019391929161153a91859116612788565b82546101009290920a6fffffffffffffffffffffffffffffffff8181021990931691831602179091558481166000908152600b6020526040812054909250167fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086901b161790506115ad8582611c61565b82156115c5576000818152600c602052604090208390555b82846fffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6d5335192a1efe736f886245fc1f6dbf882294247353ca1a57cb804607898b898460405161162191815260200190565b60405180910390a4949350505050565b61165f336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6116ab5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b6116b4816119ff565b50565b6116e5336000357fffffffff00000000000000000000000000000000000000000000000000000000166118ee565b6117315760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106b4565b600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061180b57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806105755750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806105755750507fffffffff00000000000000000000000000000000000000000000000000000000167f2a55205a000000000000000000000000000000000000000000000000000000001490565b60095460009073ffffffffffffffffffffffffffffffffffffffff1680158015906119d257506040517fb700961300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527fffffffff000000000000000000000000000000000000000000000000000000008516604483015282169063b700961390606401602060405180830381865afa1580156119ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d291906125a4565b806119f7575060085473ffffffffffffffffffffffffffffffffffffffff8581169116145b949350505050565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1680611a715760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e5445440000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558583526003825280832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560049092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606081611b6f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611b995780611b83816127bc565b9150611b929050600a83612573565b9150611b73565b60008167ffffffffffffffff811115611bb457611bb46122eb565b6040519080825280601f01601f191660200182016040528015611bde576020820181803683370190505b5090505b84156119f757611bf36001836127f5565b9150611c00600a8661280c565b611c0b906030612820565b60f81b818381518110611c2057611c20612838565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611c5a600a86612573565b9450611be2565b611c6b8282611da8565b73ffffffffffffffffffffffffffffffffffffffff82163b1580611d5c57506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252336004830152600060248301819052604483018490526080606484015260848301529073ffffffffffffffffffffffffffffffffffffffff84169063150b7a029060a4016020604051808303816000875af1158015611d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d389190612587565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610ee15760405162461bcd60e51b815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8216611e0b5760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016106b4565b60008181526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611e7d5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e54454400000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080546001019055848352600390915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f1990612484565b90600052602060002090601f016020900481019282611f3b5760008555611f9f565b82601f10611f72578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611f9f565b82800160010185558215611f9f579182015b82811115611f9f578235825591602001919060010190611f84565b50611fab929150611faf565b5090565b5b80821115611fab5760008155600101611fb0565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146116b457600080fd5b60006020828403121561200457600080fd5b813561200f81611fc4565b9392505050565b80356fffffffffffffffffffffffffffffffff8116811461203657600080fd5b919050565b60006020828403121561204d57600080fd5b61200f82612016565b60005b83811015612071578181015183820152602001612059565b83811115610f8b5750506000910152565b6000815180845261209a816020860160208601612056565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061200f6020830184612082565b6000602082840312156120f157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146116b457600080fd5b6000806040838503121561212d57600080fd5b8235612138816120f8565b946020939093013593505050565b60006020828403121561215857600080fd5b813561200f816120f8565b60008060006060848603121561217857600080fd5b8335612183816120f8565b92506020840135612193816120f8565b929592945050506040919091013590565b600080604083850312156121b757600080fd5b50508035926020909101359150565b60008083601f8401126121d857600080fd5b50813567ffffffffffffffff8111156121f057600080fd5b60208301915083602082850101111561220857600080fd5b9250929050565b6000806020838503121561222257600080fd5b823567ffffffffffffffff81111561223957600080fd5b612245858286016121c6565b90969095509350505050565b60008060006040848603121561226657600080fd5b61226f84612016565b9250602084013567ffffffffffffffff81111561228b57600080fd5b612297868287016121c6565b9497909650939450505050565b80151581146116b457600080fd5b600080604083850312156122c557600080fd5b82356122d0816120f8565b915060208301356122e0816122a4565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561233057600080fd5b843561233b816120f8565b9350602085013561234b816120f8565b925060408501359150606085013567ffffffffffffffff8082111561236f57600080fd5b818701915087601f83011261238357600080fd5b813581811115612395576123956122eb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156123db576123db6122eb565b816040528281528a60208487010111156123f457600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561242b57600080fd5b8235612436816120f8565b915060208301356122e0816120f8565b60008060006060848603121561245b57600080fd5b8335612466816120f8565b925061247460208501612016565b9150604084013590509250925092565b600181811c9082168061249857607f821691505b602082108114156124d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561253f5761253f6124d8565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261258257612582612544565b500490565b60006020828403121561259957600080fd5b815161200f81611fc4565b6000602082840312156125b657600080fd5b815161200f816122a4565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526126006080830184612082565b9695505050505050565b8054600090600181811c908083168061262457607f831692505b602080841082141561265f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b81801561267357600181146126a2576126cf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008616895284890196506126cf565b60008881526020902060005b868110156126c75781548b8201529085019083016126ae565b505084890196505b50505050505092915050565b60006126f06126ea838761260a565b8561260a565b7f2f0000000000000000000000000000000000000000000000000000000000000081528351612726816001840160208801612056565b0160010195945050505050565b600061273f828661260a565b845161274f818360208901612056565b7f2f0000000000000000000000000000000000000000000000000000000000000091019081528351612726816001840160208801612056565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156127b3576127b36124d8565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127ee576127ee6124d8565b5060010190565b600082821015612807576128076124d8565b500390565b60008261281b5761281b612544565b500690565b60008219821115612833576128336124d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212209f52495de295bee914760b58cbd34aa3d31885e36004ed564c817e16c1ed9eed64736f6c634300080b0033

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

000000000000000000000000c5c721caa3cad959818e891b533a34c37946e9bf0000000000000000000000008c1927427eaaca6a64e238544adfb95451cc05a1

-----Decoded View---------------
Arg [0] : owner (address): 0xC5C721caA3cAd959818e891b533a34c37946e9Bf
Arg [1] : authority (address): 0x8c1927427eaAcA6A64E238544ADfb95451cc05A1

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c5c721caa3cad959818e891b533a34c37946e9bf
Arg [1] : 0000000000000000000000008c1927427eaaca6a64e238544adfb95451cc05a1


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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