Overview
ETH Balance
0.0546897 ETH
Eth Value
$177.62 (@ $3,247.75/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 103 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 17125392 | 647 days ago | IN | 0 ETH | 0.00179941 | ||||
Transfer From | 17125309 | 647 days ago | IN | 0 ETH | 0.00310189 | ||||
Set Approval For... | 15867246 | 824 days ago | IN | 0 ETH | 0.0009172 | ||||
Set Approval For... | 15580594 | 864 days ago | IN | 0 ETH | 0.00015493 | ||||
Set Approval For... | 15127210 | 935 days ago | IN | 0 ETH | 0.00036557 | ||||
Set Approval For... | 15116754 | 936 days ago | IN | 0 ETH | 0.0015356 | ||||
Set Approval For... | 15043283 | 948 days ago | IN | 0 ETH | 0.00134276 | ||||
Transfer From | 14965874 | 962 days ago | IN | 0 ETH | 0.00321228 | ||||
Mint | 14965006 | 962 days ago | IN | 0 ETH | 0.00303008 | ||||
Set Approval For... | 14963196 | 962 days ago | IN | 0 ETH | 0.00125053 | ||||
Mint | 14962701 | 962 days ago | IN | 0 ETH | 0.0093103 | ||||
Mint | 14962701 | 962 days ago | IN | 0 ETH | 0.0093103 | ||||
Mint | 14962701 | 962 days ago | IN | 0 ETH | 0.0093103 | ||||
Mint | 14961843 | 962 days ago | IN | 0 ETH | 0.00389805 | ||||
Mint | 14959404 | 963 days ago | IN | 0 ETH | 0.02129451 | ||||
Set Approval For... | 14958860 | 963 days ago | IN | 0 ETH | 0.00275611 | ||||
Mint | 14958385 | 963 days ago | IN | 0 ETH | 0.00383326 | ||||
Mint | 14957910 | 963 days ago | IN | 0 ETH | 0.00643572 | ||||
Mint | 14954750 | 964 days ago | IN | 0 ETH | 0.00704709 | ||||
Mint | 14954610 | 964 days ago | IN | 0.0042069 ETH | 0.00453637 | ||||
Mint | 14954598 | 964 days ago | IN | 0 ETH | 0.00520571 | ||||
Mint | 14954272 | 964 days ago | IN | 0.0210345 ETH | 0.00540618 | ||||
Mint | 14954078 | 964 days ago | IN | 0 ETH | 0.00644205 | ||||
Set Approval For... | 14954042 | 964 days ago | IN | 0 ETH | 0.00295334 | ||||
Mint | 14953900 | 964 days ago | IN | 0 ETH | 0.0074643 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
LongNecks
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-12 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: erc721a/contracts/IERC721A.sol // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // IERC165 // ============================== /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================== // IERC721 // ============================== /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================== // IERC721Metadata // ============================== /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: erc721a/contracts/ERC721A.sol // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev ERC721 token receiver interface. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Mask of an entry in packed address data. uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225; // The tokenId of the next token to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See `_packedOwnershipOf` implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see `_totalMinted`. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to `_startTokenId()` unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view returns (uint256) { return _burnCounter; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> BITPOS_AUX); } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; assembly { // Cast aux without masking. auxCasted := aux } packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX); _packedAddressData[owner] = packed; } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & BITMASK_BURNED == 0) { // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * Returns the unpacked `TokenOwnership` struct from `packed`. */ function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP); ownership.burned = packed & BITMASK_BURNED != 0; } /** * Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev Casts the address to uint256 without masking. */ function _addressToUint256(address value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev Casts the boolean to uint256 without branching. */ function _boolToUint256(bool value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = address(uint160(_packedOwnershipOf(tokenId))); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned. } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.code.length != 0) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); if (approvalCheck) { bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(from) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_BURNED | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function _toString(uint256 value) internal pure returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) } temp { // Keep dividing `temp` until zero. temp := div(temp, 10) } { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) } let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length) } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/LongNecks.sol // LazyDevs Takes no responsibility pragma solidity ^0.8.10; contract LongNecks is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; uint256 price = 0.0042069 ether; uint256 _maxSupply = 3333; uint256 maxMintAmountPerTx = 5; uint256 maxMintAmountPerWallet = 7; string baseURL = ""; string ExtensionURL = ".json"; string HiddenURL; bool whitelistFeature = true; bytes32 OGRoot; bytes32 PresaleRoot; uint256 currentFreeSupply = 0; uint256 OG_MintMax = 2; uint256 OG_Supply = 1000; uint256 Presale_MintMax = 1; uint256 totalFreeSupply = 2000; bool paused = true; bool revealed = false; constructor(string memory _initBaseURI, string memory _initNotRevealedUri, bytes32 _OGRoot, bytes32 _PresaleRoot) ERC721A("LongNecks", "LNGNCKS") { baseURL = _initBaseURI; HiddenURL = _initNotRevealedUri; OGRoot = _OGRoot; PresaleRoot = _PresaleRoot; } // ================== Mint Function ======================= modifier mintComp(uint256 _mintAmount){ require(!paused, "The contract is paused!"); require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(totalSupply() + _mintAmount <= _maxSupply, "Max supply exceeded!"); _; } function mint(uint256 _mintAmount, bytes32[] calldata _Proof) public payable mintComp(_mintAmount){ require(balanceOf(msg.sender) + _mintAmount <= maxMintAmountPerWallet, "Max mint per wallet exceeded!"); if(checkMintStage(msg.sender) == 1){ require(checkHashProof(_Proof) == 1, "You are not an OG!"); require(balanceOf(msg.sender) + _mintAmount <= OG_MintMax, "You exceeded the free mint! Max is 2 NFTs"); currentFreeSupply = currentFreeSupply + _mintAmount; _safeMint(msg.sender, _mintAmount); } else if(checkMintStage(msg.sender) == 2){ if(whitelistFeature){ require(checkHashProof(_Proof) == 2, "You are not whitelisted!"); } require(balanceOf(msg.sender) + _mintAmount <= Presale_MintMax, "You exceeded the free mint! Max is 1 NFT"); currentFreeSupply = currentFreeSupply + _mintAmount; _safeMint(msg.sender, _mintAmount); } else { if(whitelistFeature){ require(checkHashProof(_Proof) < 3, "Private sale still active!"); } require(msg.value >= price * _mintAmount, "You dont have enough funds!"); _safeMint(msg.sender, _mintAmount); } } function AirDrop(address[] memory accounts, uint256 amount)public onlyOwner{ for(uint256 i = 0; i < accounts.length; i++){ _safeMint(accounts[i], amount); } } // =================== Orange Functions (Owner Only) =============== function pause(bool state) public onlyOwner { paused = state; } function safeMint(address to, uint256 quantity) public onlyOwner { _safeMint(to, quantity); } function setHiddenURL(string memory uri) public onlyOwner { HiddenURL = uri; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setbaseURL(string memory uri) public onlyOwner{ baseURL = uri; } function setExtensionURL(string memory uri) public onlyOwner{ ExtensionURL = uri; } function setCostPrice(uint256 _cost) public onlyOwner{ price = _cost; } function setSupply(uint256 supply) public onlyOwner{ _maxSupply = supply; } function setCurrentFreeSupply(uint256 supply) public onlyOwner{ currentFreeSupply = supply; } function setTotalFreeSupply(uint256 supply) public onlyOwner{ totalFreeSupply = supply; } // ====================== Whitelist Feature ============================ function setwhitelistFeature(bool state) public onlyOwner{ whitelistFeature = state; } function setOGRoot(bytes32 hp)public onlyOwner{ OGRoot = hp; } function setPresaleRoot(bytes32 hp)public onlyOwner{ PresaleRoot = hp; } function checkOGRoot() view public onlyOwner returns (bytes32){ return OGRoot; } function checkPresaleRoot() view public onlyOwner returns (bytes32){ return PresaleRoot; } function checkHashProof(bytes32[] calldata _merkleProof) view internal returns (uint256){ bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); if(MerkleProof.verify(_merkleProof, OGRoot, leaf)){ return 1; } if(MerkleProof.verify(_merkleProof, PresaleRoot, leaf)){ return 2; } return 3; } // ================================ Withdraw Function ==================== function withdraw() public onlyOwner nonReentrant{ uint _balance = address(this).balance; payable(0x47D1356426d13D46aa5D2e1Ef381a2b9Aa6d70F8).transfer(_balance * 20 / 100); (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } // =================== Blue Functions (View Only) ==================== function tokenURI(uint256 tokenId) public view override(ERC721A) returns (string memory){ require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token"); if (revealed == false) { return HiddenURL; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), ExtensionURL)) : ''; } function _startTokenId() internal view virtual override(ERC721A) returns (uint256){ return 1; } function checkMintStage(address user) public view returns (uint256){ if(currentFreeSupply < OG_Supply){ return 1; } else if(currentFreeSupply >= OG_Supply && balanceOf(user) < Presale_MintMax && currentFreeSupply < totalFreeSupply){ return 2; } else { return 3; } } function cost() public view returns (uint256){ return price; } function _baseURI() internal view virtual override returns (string memory) { return baseURL; } function maxSupply() public view returns (uint256){ return _maxSupply; } function currentfreeSupply() public view returns (uint256){ return currentFreeSupply; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"},{"internalType":"bytes32","name":"_OGRoot","type":"bytes32"},{"internalType":"bytes32","name":"_PresaleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"checkMintStage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkOGRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkPresaleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentfreeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_Proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCostPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"setCurrentFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setExtensionURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setHiddenURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hp","type":"bytes32"}],"name":"setOGRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hp","type":"bytes32"}],"name":"setPresaleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"setSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"setTotalFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setbaseURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setwhitelistFeature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
660ef2273c1b0800600a55610d05600b556005600c556007600d5560a06040819052600060808190526200003691600e91620001dd565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200006591600f91620001dd565b506011805460ff19166001908117909155600060145560026015556103e860165560178190556107d06018556019805461ffff19169091179055348015620000ac57600080fd5b506040516200296938038062002969833981016040819052620000cf9162000350565b60408051808201825260098152684c6f6e674e65636b7360b81b6020808301918252835180850190945260078452664c4e474e434b5360c81b9084015281519192916200011f91600291620001dd565b50805162000135906003906020840190620001dd565b505060016000555062000148336200018b565b600160095583516200016290600e906020870190620001dd565b50825162000178906010906020860190620001dd565b5060129190915560135550620004079050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001eb90620003ca565b90600052602060002090601f0160209004810192826200020f57600085556200025a565b82601f106200022a57805160ff19168380011785556200025a565b828001600101855582156200025a579182015b828111156200025a5782518255916020019190600101906200023d565b50620002689291506200026c565b5090565b5b808211156200026857600081556001016200026d565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002ab57600080fd5b81516001600160401b0380821115620002c857620002c862000283565b604051601f8301601f19908116603f01168101908282118183101715620002f357620002f362000283565b816040528381526020925086838588010111156200031057600080fd5b600091505b8382101562000334578582018301518183018401529082019062000315565b83821115620003465760008385830101525b9695505050505050565b600080600080608085870312156200036757600080fd5b84516001600160401b03808211156200037f57600080fd5b6200038d8883890162000299565b95506020870151915080821115620003a457600080fd5b50620003b38782880162000299565b604087015160609097015195989097509350505050565b600181811c90821680620003df57607f821691505b602082108114156200040157634e487b7160e01b600052602260045260246000fd5b50919050565b61255280620004176000396000f3fe6080604052600436106102305760003560e01c8063715018a61161012e578063b88d4fde116100ab578063e0a808531161006f578063e0a8085314610646578063e985e9c514610666578063eeb9052f14610686578063f2951bdd146106a6578063f2fde38b146106c657600080fd5b8063b88d4fde146105c9578063ba41b0c6146105e9578063c4e93324146105fc578063c87b56dd14610611578063d5abeb011461063157600080fd5b806395d89b41116100f257806395d89b411461053f578063a144819414610554578063a22cb46514610574578063acd08e4f14610594578063b658b60f146105a957600080fd5b8063715018a6146104ac578063764f9df7146104c1578063836b7461146104e157806387572836146105015780638da5cb5b1461052157600080fd5b80633b4c4b25116101bc5780635efe1a1f116101805780635efe1a1f1461040c578063626ab3b81461042c5780636352211e1461044c578063676f26021461046c57806370a082311461048c57600080fd5b80633b4c4b25146103825780633ccfd60b146103a257806342842e0e146103b75780634d534a7d146103d75780635dbb1247146103f757600080fd5b8063095ea7b311610203578063095ea7b3146102e657806313faede61461030657806318160ddd1461032557806323b872dd14610342578063369dc73a1461036257600080fd5b806301ffc9a71461023557806302329a291461026a57806306fdde031461028c578063081812fc146102ae575b600080fd5b34801561024157600080fd5b50610255610250366004611e64565b6106e6565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061028a610285366004611e91565b610738565b005b34801561029857600080fd5b506102a161077e565b6040516102619190611f04565b3480156102ba57600080fd5b506102ce6102c9366004611f17565b610810565b6040516001600160a01b039091168152602001610261565b3480156102f257600080fd5b5061028a610301366004611f47565b610854565b34801561031257600080fd5b50600a545b604051908152602001610261565b34801561033157600080fd5b506001546000540360001901610317565b34801561034e57600080fd5b5061028a61035d366004611f71565b610927565b34801561036e57600080fd5b5061028a61037d366004611f17565b610937565b34801561038e57600080fd5b5061028a61039d366004611f17565b610966565b3480156103ae57600080fd5b5061028a610995565b3480156103c357600080fd5b5061028a6103d2366004611f71565b610aea565b3480156103e357600080fd5b5061028a6103f236600461204c565b610b05565b34801561040357600080fd5b50610317610b46565b34801561041857600080fd5b5061028a610427366004611f17565b610b7a565b34801561043857600080fd5b5061028a61044736600461204c565b610ba9565b34801561045857600080fd5b506102ce610467366004611f17565b610be6565b34801561047857600080fd5b5061028a610487366004611f17565b610bf1565b34801561049857600080fd5b506103176104a7366004612095565b610c20565b3480156104b857600080fd5b5061028a610c6f565b3480156104cd57600080fd5b5061028a6104dc366004611f17565b610ca5565b3480156104ed57600080fd5b506103176104fc366004612095565b610cd4565b34801561050d57600080fd5b5061028a61051c36600461204c565b610d30565b34801561052d57600080fd5b506008546001600160a01b03166102ce565b34801561054b57600080fd5b506102a1610d6d565b34801561056057600080fd5b5061028a61056f366004611f47565b610d7c565b34801561058057600080fd5b5061028a61058f3660046120b0565b610db0565b3480156105a057600080fd5b50610317610e46565b3480156105b557600080fd5b5061028a6105c4366004611f17565b610e7a565b3480156105d557600080fd5b5061028a6105e43660046120e3565b610ea9565b61028a6105f736600461215f565b610ef3565b34801561060857600080fd5b50601454610317565b34801561061d57600080fd5b506102a161062c366004611f17565b61130e565b34801561063d57600080fd5b50600b54610317565b34801561065257600080fd5b5061028a610661366004611e91565b61147d565b34801561067257600080fd5b506102556106813660046121de565b6114c1565b34801561069257600080fd5b5061028a6106a1366004612208565b6114ef565b3480156106b257600080fd5b5061028a6106c1366004611e91565b61155a565b3480156106d257600080fd5b5061028a6106e1366004612095565b611597565b60006301ffc9a760e01b6001600160e01b03198316148061071757506380ac58cd60e01b6001600160e01b03198316145b806107325750635b5e139f60e01b6001600160e01b03198316145b92915050565b6008546001600160a01b0316331461076b5760405162461bcd60e51b8152600401610762906122bb565b60405180910390fd5b6019805460ff1916911515919091179055565b60606002805461078d906122f0565b80601f01602080910402602001604051908101604052809291908181526020018280546107b9906122f0565b80156108065780601f106107db57610100808354040283529160200191610806565b820191906000526020600020905b8154815290600101906020018083116107e957829003601f168201915b5050505050905090565b600061081b82611632565b610838576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061085f82611667565b9050806001600160a01b0316836001600160a01b031614156108945760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216146108cb576108ae81336114c1565b6108cb576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6109328383836116d0565b505050565b6008546001600160a01b031633146109615760405162461bcd60e51b8152600401610762906122bb565b601855565b6008546001600160a01b031633146109905760405162461bcd60e51b8152600401610762906122bb565b600b55565b6008546001600160a01b031633146109bf5760405162461bcd60e51b8152600401610762906122bb565b60026009541415610a125760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610762565b6002600955477347d1356426d13d46aa5d2e1ef381a2b9aa6d70f86108fc6064610a3d846014612341565b610a479190612376565b6040518115909202916000818181858888f19350505050158015610a6f573d6000803e3d6000fd5b506000610a846008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ace576040519150601f19603f3d011682016040523d82523d6000602084013e610ad3565b606091505b5050905080610ae157600080fd5b50506001600955565b61093283838360405180602001604052806000815250610ea9565b6008546001600160a01b03163314610b2f5760405162461bcd60e51b8152600401610762906122bb565b8051610b4290600f906020840190611db5565b5050565b6008546000906001600160a01b03163314610b735760405162461bcd60e51b8152600401610762906122bb565b5060125490565b6008546001600160a01b03163314610ba45760405162461bcd60e51b8152600401610762906122bb565b601255565b6008546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610762906122bb565b8051610b4290600e906020840190611db5565b600061073282611667565b6008546001600160a01b03163314610c1b5760405162461bcd60e51b8152600401610762906122bb565b600a55565b60006001600160a01b038216610c49576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610c995760405162461bcd60e51b8152600401610762906122bb565b610ca36000611873565b565b6008546001600160a01b03163314610ccf5760405162461bcd60e51b8152600401610762906122bb565b601455565b60006016546014541015610cea57506001919050565b60165460145410158015610d075750601754610d0583610c20565b105b8015610d165750601854601454105b15610d2357506002919050565b506003919050565b919050565b6008546001600160a01b03163314610d5a5760405162461bcd60e51b8152600401610762906122bb565b8051610b42906010906020840190611db5565b60606003805461078d906122f0565b6008546001600160a01b03163314610da65760405162461bcd60e51b8152600401610762906122bb565b610b4282826118c5565b6001600160a01b038216331415610dda5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546000906001600160a01b03163314610e735760405162461bcd60e51b8152600401610762906122bb565b5060135490565b6008546001600160a01b03163314610ea45760405162461bcd60e51b8152600401610762906122bb565b601355565b610eb48484846116d0565b6001600160a01b0383163b15610eed57610ed0848484846118df565b610eed576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b601954839060ff1615610f485760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610762565b600081118015610f5a5750600c548111155b610f9d5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610762565b600b546001546000548391900360001901610fb8919061238a565b1115610ffd5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610762565b600d548461100a33610c20565b611014919061238a565b11156110625760405162461bcd60e51b815260206004820152601d60248201527f4d6178206d696e74207065722077616c6c6574206578636565646564210000006044820152606401610762565b61106b33610cd4565b600114156111585761107d83836119c8565b6001146110c15760405162461bcd60e51b8152602060048201526012602482015271596f7520617265206e6f7420616e204f472160701b6044820152606401610762565b601554846110ce33610c20565b6110d8919061238a565b11156111385760405162461bcd60e51b815260206004820152602960248201527f596f75206578636565646564207468652066726565206d696e7421204d61782060448201526869732032204e46547360b81b6064820152608401610762565b83601454611146919061238a565b60145561115333856118c5565b610eed565b61116133610cd4565b600214156112435760115460ff16156111cd5761117e83836119c8565b6002146111cd5760405162461bcd60e51b815260206004820152601860248201527f596f7520617265206e6f742077686974656c69737465642100000000000000006044820152606401610762565b601754846111da33610c20565b6111e4919061238a565b11156111385760405162461bcd60e51b815260206004820152602860248201527f596f75206578636565646564207468652066726565206d696e7421204d6178206044820152671a5cc80c4813919560c21b6064820152608401610762565b60115460ff16156112a757600361125a84846119c8565b106112a75760405162461bcd60e51b815260206004820152601a60248201527f507269766174652073616c65207374696c6c20616374697665210000000000006044820152606401610762565b83600a546112b59190612341565b3410156113045760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f6e74206861766520656e6f7567682066756e64732100000000006044820152606401610762565b610eed33856118c5565b606061131982611632565b61137d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610762565b601954610100900460ff1661141e5760108054611399906122f0565b80601f01602080910402602001604051908101604052809291908181526020018280546113c5906122f0565b80156114125780601f106113e757610100808354040283529160200191611412565b820191906000526020600020905b8154815290600101906020018083116113f557829003601f168201915b50505050509050919050565b6000611428611aad565b905060008151116114485760405180602001604052806000815250611476565b8061145284611abc565b600f604051602001611466939291906123a2565b6040516020818303038152906040525b9392505050565b6008546001600160a01b031633146114a75760405162461bcd60e51b8152600401610762906122bb565b601980549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b031633146115195760405162461bcd60e51b8152600401610762906122bb565b60005b82518110156109325761154883828151811061153a5761153a612466565b6020026020010151836118c5565b806115528161247c565b91505061151c565b6008546001600160a01b031633146115845760405162461bcd60e51b8152600401610762906122bb565b6011805460ff1916911515919091179055565b6008546001600160a01b031633146115c15760405162461bcd60e51b8152600401610762906122bb565b6001600160a01b0381166116265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610762565b61162f81611873565b50565b600081600111158015611646575060005482105b8015610732575050600090815260046020526040902054600160e01b161590565b600081806001116116b7576000548110156116b757600081815260046020526040902054600160e01b81166116b5575b80611476575060001901600081815260046020526040902054611697565b505b604051636f96cda160e11b815260040160405180910390fd5b60006116db82611667565b9050836001600160a01b0316816001600160a01b03161461170e5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061172c575061172c85336114c1565b8061174757503361173c84610810565b6001600160a01b0316145b90508061176757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661178e57604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b038881168452600583528184208054600019019055871683528083208054600101905585835260049091529020600160e11b4260a01b86178117909155821661182b57600183016000818152600460205260409020546118295760005481146118295760008181526004602052604090208390555b505b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b42828260405180602001604052806000815250611bba565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611914903390899088908890600401612497565b6020604051808303816000875af192505050801561194f575060408051601f3d908101601f1916820190925261194c918101906124d4565b60015b6119aa573d80801561197d576040519150601f19603f3d011682016040523d82523d6000602084013e611982565b606091505b5080516119a2576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6040516bffffffffffffffffffffffff193360601b1660208201526000908190603401604051602081830303815290604052805190602001209050611a44848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506012549150849050611d2b565b15611a53576001915050610732565b611a94848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506013549150849050611d2b565b15611aa3576002915050610732565b5060039392505050565b6060600e805461078d906122f0565b606081611ae05750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b0a5780611af48161247c565b9150611b039050600a83612376565b9150611ae4565b60008167ffffffffffffffff811115611b2557611b25611fad565b6040519080825280601f01601f191660200182016040528015611b4f576020820181803683370190505b5090505b84156119c057611b646001836124f1565b9150611b71600a86612508565b611b7c90603061238a565b60f81b818381518110611b9157611b91612466565b60200101906001600160f81b031916908160001a905350611bb3600a86612376565b9450611b53565b6000546001600160a01b038416611be357604051622e076360e81b815260040160405180910390fd5b82611c015760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03841660008181526005602090815260408083208054680100000000000000018902019055848352600490915290204260a01b86176001861460e11b1790558190818501903b15611cd6575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611c9f60008784806001019550876118df565b611cbc576040516368d2bf6b60e11b815260040160405180910390fd5b808210611c54578260005414611cd157600080fd5b611d1b565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210611cd7575b506000908155610eed9085838684565b600082611d388584611d41565b14949350505050565b600081815b8451811015611dad576000858281518110611d6357611d63612466565b60200260200101519050808311611d895760008381526020829052604090209250611d9a565b600081815260208490526040902092505b5080611da58161247c565b915050611d46565b509392505050565b828054611dc1906122f0565b90600052602060002090601f016020900481019282611de35760008555611e29565b82601f10611dfc57805160ff1916838001178555611e29565b82800160010185558215611e29579182015b82811115611e29578251825591602001919060010190611e0e565b50611e35929150611e39565b5090565b5b80821115611e355760008155600101611e3a565b6001600160e01b03198116811461162f57600080fd5b600060208284031215611e7657600080fd5b813561147681611e4e565b80358015158114610d2b57600080fd5b600060208284031215611ea357600080fd5b61147682611e81565b60005b83811015611ec7578181015183820152602001611eaf565b83811115610eed5750506000910152565b60008151808452611ef0816020860160208601611eac565b601f01601f19169290920160200192915050565b6020815260006114766020830184611ed8565b600060208284031215611f2957600080fd5b5035919050565b80356001600160a01b0381168114610d2b57600080fd5b60008060408385031215611f5a57600080fd5b611f6383611f30565b946020939093013593505050565b600080600060608486031215611f8657600080fd5b611f8f84611f30565b9250611f9d60208501611f30565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611fec57611fec611fad565b604052919050565b600067ffffffffffffffff83111561200e5761200e611fad565b612021601f8401601f1916602001611fc3565b905082815283838301111561203557600080fd5b828260208301376000602084830101529392505050565b60006020828403121561205e57600080fd5b813567ffffffffffffffff81111561207557600080fd5b8201601f8101841361208657600080fd5b6119c084823560208401611ff4565b6000602082840312156120a757600080fd5b61147682611f30565b600080604083850312156120c357600080fd5b6120cc83611f30565b91506120da60208401611e81565b90509250929050565b600080600080608085870312156120f957600080fd5b61210285611f30565b935061211060208601611f30565b925060408501359150606085013567ffffffffffffffff81111561213357600080fd5b8501601f8101871361214457600080fd5b61215387823560208401611ff4565b91505092959194509250565b60008060006040848603121561217457600080fd5b83359250602084013567ffffffffffffffff8082111561219357600080fd5b818601915086601f8301126121a757600080fd5b8135818111156121b657600080fd5b8760208260051b85010111156121cb57600080fd5b6020830194508093505050509250925092565b600080604083850312156121f157600080fd5b6121fa83611f30565b91506120da60208401611f30565b6000806040838503121561221b57600080fd5b823567ffffffffffffffff8082111561223357600080fd5b818501915085601f83011261224757600080fd5b813560208282111561225b5761225b611fad565b8160051b925061226c818401611fc3565b828152928401810192818101908985111561228657600080fd5b948201945b848610156122ab5761229c86611f30565b8252948201949082019061228b565b9997909101359750505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061230457607f821691505b6020821081141561232557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561235b5761235b61232b565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261238557612385612360565b500490565b6000821982111561239d5761239d61232b565b500190565b6000845160206123b58285838a01611eac565b8551918401916123c88184848a01611eac565b8554920191600090600181811c90808316806123e557607f831692505b85831081141561240357634e487b7160e01b85526022600452602485fd5b808015612417576001811461242857612455565b60ff19851688528388019550612455565b60008b81526020902060005b8581101561244d5781548a820152908401908801612434565b505083880195505b50939b9a5050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156124905761249061232b565b5060010190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124ca90830184611ed8565b9695505050505050565b6000602082840312156124e657600080fd5b815161147681611e4e565b6000828210156125035761250361232b565b500390565b60008261251757612517612360565b50069056fea26469706673582212201a5761bf92140831911dc09cbe4f0b4e9fc47070ebe507aaeae6a8371e06d07264736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e071d7d41086c773472a208e71bbf893795b2b52632d277f10bd0b0686dbc9173adc8b795a722cf38e758aee0edff3d3c4e86ccc831bd04612f64cecbd4b45c14a0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d54777232315a70616f516958625845574167514c54473270456f67476f366168596162443375466b727436562f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5163354d756339444b424b57586f4d537565643772715532313673647a74434775455a33314d5134467867550000000000000000000000
Deployed Bytecode
0x6080604052600436106102305760003560e01c8063715018a61161012e578063b88d4fde116100ab578063e0a808531161006f578063e0a8085314610646578063e985e9c514610666578063eeb9052f14610686578063f2951bdd146106a6578063f2fde38b146106c657600080fd5b8063b88d4fde146105c9578063ba41b0c6146105e9578063c4e93324146105fc578063c87b56dd14610611578063d5abeb011461063157600080fd5b806395d89b41116100f257806395d89b411461053f578063a144819414610554578063a22cb46514610574578063acd08e4f14610594578063b658b60f146105a957600080fd5b8063715018a6146104ac578063764f9df7146104c1578063836b7461146104e157806387572836146105015780638da5cb5b1461052157600080fd5b80633b4c4b25116101bc5780635efe1a1f116101805780635efe1a1f1461040c578063626ab3b81461042c5780636352211e1461044c578063676f26021461046c57806370a082311461048c57600080fd5b80633b4c4b25146103825780633ccfd60b146103a257806342842e0e146103b75780634d534a7d146103d75780635dbb1247146103f757600080fd5b8063095ea7b311610203578063095ea7b3146102e657806313faede61461030657806318160ddd1461032557806323b872dd14610342578063369dc73a1461036257600080fd5b806301ffc9a71461023557806302329a291461026a57806306fdde031461028c578063081812fc146102ae575b600080fd5b34801561024157600080fd5b50610255610250366004611e64565b6106e6565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061028a610285366004611e91565b610738565b005b34801561029857600080fd5b506102a161077e565b6040516102619190611f04565b3480156102ba57600080fd5b506102ce6102c9366004611f17565b610810565b6040516001600160a01b039091168152602001610261565b3480156102f257600080fd5b5061028a610301366004611f47565b610854565b34801561031257600080fd5b50600a545b604051908152602001610261565b34801561033157600080fd5b506001546000540360001901610317565b34801561034e57600080fd5b5061028a61035d366004611f71565b610927565b34801561036e57600080fd5b5061028a61037d366004611f17565b610937565b34801561038e57600080fd5b5061028a61039d366004611f17565b610966565b3480156103ae57600080fd5b5061028a610995565b3480156103c357600080fd5b5061028a6103d2366004611f71565b610aea565b3480156103e357600080fd5b5061028a6103f236600461204c565b610b05565b34801561040357600080fd5b50610317610b46565b34801561041857600080fd5b5061028a610427366004611f17565b610b7a565b34801561043857600080fd5b5061028a61044736600461204c565b610ba9565b34801561045857600080fd5b506102ce610467366004611f17565b610be6565b34801561047857600080fd5b5061028a610487366004611f17565b610bf1565b34801561049857600080fd5b506103176104a7366004612095565b610c20565b3480156104b857600080fd5b5061028a610c6f565b3480156104cd57600080fd5b5061028a6104dc366004611f17565b610ca5565b3480156104ed57600080fd5b506103176104fc366004612095565b610cd4565b34801561050d57600080fd5b5061028a61051c36600461204c565b610d30565b34801561052d57600080fd5b506008546001600160a01b03166102ce565b34801561054b57600080fd5b506102a1610d6d565b34801561056057600080fd5b5061028a61056f366004611f47565b610d7c565b34801561058057600080fd5b5061028a61058f3660046120b0565b610db0565b3480156105a057600080fd5b50610317610e46565b3480156105b557600080fd5b5061028a6105c4366004611f17565b610e7a565b3480156105d557600080fd5b5061028a6105e43660046120e3565b610ea9565b61028a6105f736600461215f565b610ef3565b34801561060857600080fd5b50601454610317565b34801561061d57600080fd5b506102a161062c366004611f17565b61130e565b34801561063d57600080fd5b50600b54610317565b34801561065257600080fd5b5061028a610661366004611e91565b61147d565b34801561067257600080fd5b506102556106813660046121de565b6114c1565b34801561069257600080fd5b5061028a6106a1366004612208565b6114ef565b3480156106b257600080fd5b5061028a6106c1366004611e91565b61155a565b3480156106d257600080fd5b5061028a6106e1366004612095565b611597565b60006301ffc9a760e01b6001600160e01b03198316148061071757506380ac58cd60e01b6001600160e01b03198316145b806107325750635b5e139f60e01b6001600160e01b03198316145b92915050565b6008546001600160a01b0316331461076b5760405162461bcd60e51b8152600401610762906122bb565b60405180910390fd5b6019805460ff1916911515919091179055565b60606002805461078d906122f0565b80601f01602080910402602001604051908101604052809291908181526020018280546107b9906122f0565b80156108065780601f106107db57610100808354040283529160200191610806565b820191906000526020600020905b8154815290600101906020018083116107e957829003601f168201915b5050505050905090565b600061081b82611632565b610838576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061085f82611667565b9050806001600160a01b0316836001600160a01b031614156108945760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216146108cb576108ae81336114c1565b6108cb576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6109328383836116d0565b505050565b6008546001600160a01b031633146109615760405162461bcd60e51b8152600401610762906122bb565b601855565b6008546001600160a01b031633146109905760405162461bcd60e51b8152600401610762906122bb565b600b55565b6008546001600160a01b031633146109bf5760405162461bcd60e51b8152600401610762906122bb565b60026009541415610a125760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610762565b6002600955477347d1356426d13d46aa5d2e1ef381a2b9aa6d70f86108fc6064610a3d846014612341565b610a479190612376565b6040518115909202916000818181858888f19350505050158015610a6f573d6000803e3d6000fd5b506000610a846008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ace576040519150601f19603f3d011682016040523d82523d6000602084013e610ad3565b606091505b5050905080610ae157600080fd5b50506001600955565b61093283838360405180602001604052806000815250610ea9565b6008546001600160a01b03163314610b2f5760405162461bcd60e51b8152600401610762906122bb565b8051610b4290600f906020840190611db5565b5050565b6008546000906001600160a01b03163314610b735760405162461bcd60e51b8152600401610762906122bb565b5060125490565b6008546001600160a01b03163314610ba45760405162461bcd60e51b8152600401610762906122bb565b601255565b6008546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610762906122bb565b8051610b4290600e906020840190611db5565b600061073282611667565b6008546001600160a01b03163314610c1b5760405162461bcd60e51b8152600401610762906122bb565b600a55565b60006001600160a01b038216610c49576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610c995760405162461bcd60e51b8152600401610762906122bb565b610ca36000611873565b565b6008546001600160a01b03163314610ccf5760405162461bcd60e51b8152600401610762906122bb565b601455565b60006016546014541015610cea57506001919050565b60165460145410158015610d075750601754610d0583610c20565b105b8015610d165750601854601454105b15610d2357506002919050565b506003919050565b919050565b6008546001600160a01b03163314610d5a5760405162461bcd60e51b8152600401610762906122bb565b8051610b42906010906020840190611db5565b60606003805461078d906122f0565b6008546001600160a01b03163314610da65760405162461bcd60e51b8152600401610762906122bb565b610b4282826118c5565b6001600160a01b038216331415610dda5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546000906001600160a01b03163314610e735760405162461bcd60e51b8152600401610762906122bb565b5060135490565b6008546001600160a01b03163314610ea45760405162461bcd60e51b8152600401610762906122bb565b601355565b610eb48484846116d0565b6001600160a01b0383163b15610eed57610ed0848484846118df565b610eed576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b601954839060ff1615610f485760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610762565b600081118015610f5a5750600c548111155b610f9d5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610762565b600b546001546000548391900360001901610fb8919061238a565b1115610ffd5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610762565b600d548461100a33610c20565b611014919061238a565b11156110625760405162461bcd60e51b815260206004820152601d60248201527f4d6178206d696e74207065722077616c6c6574206578636565646564210000006044820152606401610762565b61106b33610cd4565b600114156111585761107d83836119c8565b6001146110c15760405162461bcd60e51b8152602060048201526012602482015271596f7520617265206e6f7420616e204f472160701b6044820152606401610762565b601554846110ce33610c20565b6110d8919061238a565b11156111385760405162461bcd60e51b815260206004820152602960248201527f596f75206578636565646564207468652066726565206d696e7421204d61782060448201526869732032204e46547360b81b6064820152608401610762565b83601454611146919061238a565b60145561115333856118c5565b610eed565b61116133610cd4565b600214156112435760115460ff16156111cd5761117e83836119c8565b6002146111cd5760405162461bcd60e51b815260206004820152601860248201527f596f7520617265206e6f742077686974656c69737465642100000000000000006044820152606401610762565b601754846111da33610c20565b6111e4919061238a565b11156111385760405162461bcd60e51b815260206004820152602860248201527f596f75206578636565646564207468652066726565206d696e7421204d6178206044820152671a5cc80c4813919560c21b6064820152608401610762565b60115460ff16156112a757600361125a84846119c8565b106112a75760405162461bcd60e51b815260206004820152601a60248201527f507269766174652073616c65207374696c6c20616374697665210000000000006044820152606401610762565b83600a546112b59190612341565b3410156113045760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f6e74206861766520656e6f7567682066756e64732100000000006044820152606401610762565b610eed33856118c5565b606061131982611632565b61137d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610762565b601954610100900460ff1661141e5760108054611399906122f0565b80601f01602080910402602001604051908101604052809291908181526020018280546113c5906122f0565b80156114125780601f106113e757610100808354040283529160200191611412565b820191906000526020600020905b8154815290600101906020018083116113f557829003601f168201915b50505050509050919050565b6000611428611aad565b905060008151116114485760405180602001604052806000815250611476565b8061145284611abc565b600f604051602001611466939291906123a2565b6040516020818303038152906040525b9392505050565b6008546001600160a01b031633146114a75760405162461bcd60e51b8152600401610762906122bb565b601980549115156101000261ff0019909216919091179055565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b031633146115195760405162461bcd60e51b8152600401610762906122bb565b60005b82518110156109325761154883828151811061153a5761153a612466565b6020026020010151836118c5565b806115528161247c565b91505061151c565b6008546001600160a01b031633146115845760405162461bcd60e51b8152600401610762906122bb565b6011805460ff1916911515919091179055565b6008546001600160a01b031633146115c15760405162461bcd60e51b8152600401610762906122bb565b6001600160a01b0381166116265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610762565b61162f81611873565b50565b600081600111158015611646575060005482105b8015610732575050600090815260046020526040902054600160e01b161590565b600081806001116116b7576000548110156116b757600081815260046020526040902054600160e01b81166116b5575b80611476575060001901600081815260046020526040902054611697565b505b604051636f96cda160e11b815260040160405180910390fd5b60006116db82611667565b9050836001600160a01b0316816001600160a01b03161461170e5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061172c575061172c85336114c1565b8061174757503361173c84610810565b6001600160a01b0316145b90508061176757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661178e57604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b038881168452600583528184208054600019019055871683528083208054600101905585835260049091529020600160e11b4260a01b86178117909155821661182b57600183016000818152600460205260409020546118295760005481146118295760008181526004602052604090208390555b505b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b42828260405180602001604052806000815250611bba565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611914903390899088908890600401612497565b6020604051808303816000875af192505050801561194f575060408051601f3d908101601f1916820190925261194c918101906124d4565b60015b6119aa573d80801561197d576040519150601f19603f3d011682016040523d82523d6000602084013e611982565b606091505b5080516119a2576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6040516bffffffffffffffffffffffff193360601b1660208201526000908190603401604051602081830303815290604052805190602001209050611a44848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506012549150849050611d2b565b15611a53576001915050610732565b611a94848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506013549150849050611d2b565b15611aa3576002915050610732565b5060039392505050565b6060600e805461078d906122f0565b606081611ae05750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b0a5780611af48161247c565b9150611b039050600a83612376565b9150611ae4565b60008167ffffffffffffffff811115611b2557611b25611fad565b6040519080825280601f01601f191660200182016040528015611b4f576020820181803683370190505b5090505b84156119c057611b646001836124f1565b9150611b71600a86612508565b611b7c90603061238a565b60f81b818381518110611b9157611b91612466565b60200101906001600160f81b031916908160001a905350611bb3600a86612376565b9450611b53565b6000546001600160a01b038416611be357604051622e076360e81b815260040160405180910390fd5b82611c015760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03841660008181526005602090815260408083208054680100000000000000018902019055848352600490915290204260a01b86176001861460e11b1790558190818501903b15611cd6575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611c9f60008784806001019550876118df565b611cbc576040516368d2bf6b60e11b815260040160405180910390fd5b808210611c54578260005414611cd157600080fd5b611d1b565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210611cd7575b506000908155610eed9085838684565b600082611d388584611d41565b14949350505050565b600081815b8451811015611dad576000858281518110611d6357611d63612466565b60200260200101519050808311611d895760008381526020829052604090209250611d9a565b600081815260208490526040902092505b5080611da58161247c565b915050611d46565b509392505050565b828054611dc1906122f0565b90600052602060002090601f016020900481019282611de35760008555611e29565b82601f10611dfc57805160ff1916838001178555611e29565b82800160010185558215611e29579182015b82811115611e29578251825591602001919060010190611e0e565b50611e35929150611e39565b5090565b5b80821115611e355760008155600101611e3a565b6001600160e01b03198116811461162f57600080fd5b600060208284031215611e7657600080fd5b813561147681611e4e565b80358015158114610d2b57600080fd5b600060208284031215611ea357600080fd5b61147682611e81565b60005b83811015611ec7578181015183820152602001611eaf565b83811115610eed5750506000910152565b60008151808452611ef0816020860160208601611eac565b601f01601f19169290920160200192915050565b6020815260006114766020830184611ed8565b600060208284031215611f2957600080fd5b5035919050565b80356001600160a01b0381168114610d2b57600080fd5b60008060408385031215611f5a57600080fd5b611f6383611f30565b946020939093013593505050565b600080600060608486031215611f8657600080fd5b611f8f84611f30565b9250611f9d60208501611f30565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611fec57611fec611fad565b604052919050565b600067ffffffffffffffff83111561200e5761200e611fad565b612021601f8401601f1916602001611fc3565b905082815283838301111561203557600080fd5b828260208301376000602084830101529392505050565b60006020828403121561205e57600080fd5b813567ffffffffffffffff81111561207557600080fd5b8201601f8101841361208657600080fd5b6119c084823560208401611ff4565b6000602082840312156120a757600080fd5b61147682611f30565b600080604083850312156120c357600080fd5b6120cc83611f30565b91506120da60208401611e81565b90509250929050565b600080600080608085870312156120f957600080fd5b61210285611f30565b935061211060208601611f30565b925060408501359150606085013567ffffffffffffffff81111561213357600080fd5b8501601f8101871361214457600080fd5b61215387823560208401611ff4565b91505092959194509250565b60008060006040848603121561217457600080fd5b83359250602084013567ffffffffffffffff8082111561219357600080fd5b818601915086601f8301126121a757600080fd5b8135818111156121b657600080fd5b8760208260051b85010111156121cb57600080fd5b6020830194508093505050509250925092565b600080604083850312156121f157600080fd5b6121fa83611f30565b91506120da60208401611f30565b6000806040838503121561221b57600080fd5b823567ffffffffffffffff8082111561223357600080fd5b818501915085601f83011261224757600080fd5b813560208282111561225b5761225b611fad565b8160051b925061226c818401611fc3565b828152928401810192818101908985111561228657600080fd5b948201945b848610156122ab5761229c86611f30565b8252948201949082019061228b565b9997909101359750505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061230457607f821691505b6020821081141561232557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561235b5761235b61232b565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261238557612385612360565b500490565b6000821982111561239d5761239d61232b565b500190565b6000845160206123b58285838a01611eac565b8551918401916123c88184848a01611eac565b8554920191600090600181811c90808316806123e557607f831692505b85831081141561240357634e487b7160e01b85526022600452602485fd5b808015612417576001811461242857612455565b60ff19851688528388019550612455565b60008b81526020902060005b8581101561244d5781548a820152908401908801612434565b505083880195505b50939b9a5050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156124905761249061232b565b5060010190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124ca90830184611ed8565b9695505050505050565b6000602082840312156124e657600080fd5b815161147681611e4e565b6000828210156125035761250361232b565b500390565b60008261251757612517612360565b50069056fea26469706673582212201a5761bf92140831911dc09cbe4f0b4e9fc47070ebe507aaeae6a8371e06d07264736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e071d7d41086c773472a208e71bbf893795b2b52632d277f10bd0b0686dbc9173adc8b795a722cf38e758aee0edff3d3c4e86ccc831bd04612f64cecbd4b45c14a0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d54777232315a70616f516958625845574167514c54473270456f67476f366168596162443375466b727436562f000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5163354d756339444b424b57586f4d537565643772715532313673647a74434775455a33314d5134467867550000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmTwr21ZpaoQiXbXEWAgQLTG2pEogGo6ahYabD3uFkrt6V/
Arg [1] : _initNotRevealedUri (string): ipfs://QmQc5Muc9DKBKWXoMSued7rqU216sdztCGuEZ31MQ4FxgU
Arg [2] : _OGRoot (bytes32): 0x71d7d41086c773472a208e71bbf893795b2b52632d277f10bd0b0686dbc9173a
Arg [3] : _PresaleRoot (bytes32): 0xdc8b795a722cf38e758aee0edff3d3c4e86ccc831bd04612f64cecbd4b45c14a
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 71d7d41086c773472a208e71bbf893795b2b52632d277f10bd0b0686dbc9173a
Arg [3] : dc8b795a722cf38e758aee0edff3d3c4e86ccc831bd04612f64cecbd4b45c14a
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [5] : 697066733a2f2f516d54777232315a70616f516958625845574167514c544732
Arg [6] : 70456f67476f366168596162443375466b727436562f00000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [8] : 697066733a2f2f516d5163354d756339444b424b57586f4d5375656437727155
Arg [9] : 32313673647a74434775455a33314d5134467867550000000000000000000000
Deployed Bytecode Sourcemap
49492:6916:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20676:615;;;;;;;;;;-1:-1:-1;20676:615:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;20676:615:0;;;;;;;;52527:77;;;;;;;;;;-1:-1:-1;52527:77:0;;;;;:::i;:::-;;:::i;:::-;;25689:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27757:204::-;;;;;;;;;;-1:-1:-1;27757:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2042:32:1;;;2024:51;;2012:2;1997:18;27757:204:0;1878:203:1;27217:474:0;;;;;;;;;;-1:-1:-1;27217:474:0;;;;;:::i;:::-;;:::i;56007:76::-;;;;;;;;;;-1:-1:-1;56070:5:0;;56007:76;;;2669:25:1;;;2657:2;2642:18;56007:76:0;2523:177:1;19730:315:0;;;;;;;;;;-1:-1:-1;55611:1:0;19996:12;19783:7;19980:13;:28;-1:-1:-1;;19980:46:0;19730:315;;28643:170;;;;;;;;;;-1:-1:-1;28643:170:0;;;;;:::i;:::-;;:::i;53440:103::-;;;;;;;;;;-1:-1:-1;53440:103:0;;;;;:::i;:::-;;:::i;53228:89::-;;;;;;;;;;-1:-1:-1;53228:89:0;;;;;:::i;:::-;;:::i;54622:307::-;;;;;;;;;;;;;:::i;28884:185::-;;;;;;;;;;-1:-1:-1;28884:185:0;;;;;:::i;:::-;;:::i;53029:97::-;;;;;;;;;;-1:-1:-1;53029:97:0;;;;;:::i;:::-;;:::i;53931:94::-;;;;;;;;;;;;;:::i;53753:76::-;;;;;;;;;;-1:-1:-1;53753:76:0;;;;;:::i;:::-;;:::i;52934:87::-;;;;;;;;;;-1:-1:-1;52934:87:0;;;;;:::i;:::-;;:::i;25478:144::-;;;;;;;;;;-1:-1:-1;25478:144:0;;;;;:::i;:::-;;:::i;53134:85::-;;;;;;;;;;-1:-1:-1;53134:85:0;;;;;:::i;:::-;;:::i;21355:224::-;;;;;;;;;;-1:-1:-1;21355:224:0;;;;;:::i;:::-;;:::i;48556:103::-;;;;;;;;;;;;;:::i;53325:107::-;;;;;;;;;;-1:-1:-1;53325:107:0;;;;;:::i;:::-;;:::i;55628:363::-;;;;;;;;;;-1:-1:-1;55628:363:0;;;;;:::i;:::-;;:::i;52731:92::-;;;;;;;;;;-1:-1:-1;52731:92:0;;;;;:::i;:::-;;:::i;47905:87::-;;;;;;;;;;-1:-1:-1;47978:6:0;;-1:-1:-1;;;;;47978:6:0;47905:87;;25858:104;;;;;;;;;;;;;:::i;52612:107::-;;;;;;;;;;-1:-1:-1;52612:107:0;;;;;:::i;:::-;;:::i;28033:308::-;;;;;;;;;;-1:-1:-1;28033:308:0;;;;;:::i;:::-;;:::i;54033:104::-;;;;;;;;;;;;;:::i;53837:86::-;;;;;;;;;;-1:-1:-1;53837:86:0;;;;;:::i;:::-;;:::i;29140:396::-;;;;;;;;;;-1:-1:-1;29140:396:0;;;;;:::i;:::-;;:::i;50831:1402::-;;;;;;:::i;:::-;;:::i;56304:101::-;;;;;;;;;;-1:-1:-1;56380:17:0;;56304:101;;55015:488;;;;;;;;;;-1:-1:-1;55015:488:0;;;;;:::i;:::-;;:::i;56207:88::-;;;;;;;;;;-1:-1:-1;56275:10:0;;56207:88;;52835:87;;;;;;;;;;-1:-1:-1;52835:87:0;;;;;:::i;:::-;;:::i;28412:164::-;;;;;;;;;;-1:-1:-1;28412:164:0;;;;;:::i;:::-;;:::i;52241:198::-;;;;;;;;;;-1:-1:-1;52241:198:0;;;;;:::i;:::-;;:::i;53645:100::-;;;;;;;;;;-1:-1:-1;53645:100:0;;;;;:::i;:::-;;:::i;48814:201::-;;;;;;;;;;-1:-1:-1;48814:201:0;;;;;:::i;:::-;;:::i;20676:615::-;20761:4;-1:-1:-1;;;;;;;;;21061:25:0;;;;:102;;-1:-1:-1;;;;;;;;;;21138:25:0;;;21061:102;:179;;;-1:-1:-1;;;;;;;;;;21215:25:0;;;21061:179;21041:199;20676:615;-1:-1:-1;;20676:615:0:o;52527:77::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;;;;;;;;;52582:6:::1;:14:::0;;-1:-1:-1;;52582:14:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52527:77::o;25689:100::-;25743:13;25776:5;25769:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25689:100;:::o;27757:204::-;27825:7;27850:16;27858:7;27850;:16::i;:::-;27845:64;;27875:34;;-1:-1:-1;;;27875:34:0;;;;;;;;;;;27845:64;-1:-1:-1;27929:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27929:24:0;;27757:204::o;27217:474::-;27290:13;27322:27;27341:7;27322:18;:27::i;:::-;27290:61;;27372:5;-1:-1:-1;;;;;27366:11:0;:2;-1:-1:-1;;;;;27366:11:0;;27362:48;;;27386:24;;-1:-1:-1;;;27386:24:0;;;;;;;;;;;27362:48;46709:10;-1:-1:-1;;;;;27427:28:0;;;27423:175;;27475:44;27492:5;46709:10;28412:164;:::i;27475:44::-;27470:128;;27547:35;;-1:-1:-1;;;27547:35:0;;;;;;;;;;;27470:128;27610:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;27610:29:0;-1:-1:-1;;;;;27610:29:0;;;;;;;;;27655:28;;27610:24;;27655:28;;;;;;;27279:412;27217:474;;:::o;28643:170::-;28777:28;28787:4;28793:2;28797:7;28777:9;:28::i;:::-;28643:170;;;:::o;53440:103::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;53511:15:::1;:24:::0;53440:103::o;53228:89::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;53290:10:::1;:19:::0;53228:89::o;54622:307::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;1847:1:::1;2445:7;;:19;;2437:63;;;::::0;-1:-1:-1;;;2437:63:0;;8735:2:1;2437:63:0::1;::::0;::::1;8717:21:1::0;8774:2;8754:18;;;8747:30;8813:33;8793:18;;;8786:61;8864:18;;2437:63:0::1;8533:355:1::0;2437:63:0::1;1847:1;2578:7;:18:::0;54701:21:::2;54741:42;54733:81;54810:3;54794:13;54701:21:::0;54805:2:::2;54794:13;:::i;:::-;:19;;;;:::i;:::-;54733:81;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;54827:7;54848;47978:6:::0;;-1:-1:-1;;;;;47978:6:0;;47905:87;54848:7:::2;-1:-1:-1::0;;;;;54840:21:0::2;54869;54840:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54826:69;;;54914:2;54906:11;;;::::0;::::2;;-1:-1:-1::0;;1803:1:0::1;2757:7;:22:::0;54622:307::o;28884:185::-;29022:39;29039:4;29045:2;29049:7;29022:39;;;;;;;;;;;;:16;:39::i;53029:97::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;53100:18;;::::1;::::0;:12:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;53029:97:::0;:::o;53931:94::-;47978:6;;53985:7;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;-1:-1:-1;54011:6:0::1;::::0;53931:94;:::o;53753:76::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;53810:6:::1;:11:::0;53753:76::o;52934:87::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;53000:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;25478:144::-:0;25542:7;25585:27;25604:7;25585:18;:27::i;53134:85::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;53198:5:::1;:13:::0;53134:85::o;21355:224::-;21419:7;-1:-1:-1;;;;;21443:19:0;;21439:60;;21471:28;;-1:-1:-1;;;21471:28:0;;;;;;;;;;;21439:60;-1:-1:-1;;;;;;21517:25:0;;;;;:18;:25;;;;;;16694:13;21517:54;;21355:224::o;48556:103::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;48621:30:::1;48648:1;48621:18;:30::i;:::-;48556:103::o:0;53325:107::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;53398:17:::1;:26:::0;53325:107::o;55628:363::-;55687:7;55729:9;;55709:17;;:29;55706:278;;;-1:-1:-1;55761:1:0;;55628:363;-1:-1:-1;55628:363:0:o;55706:278::-;55813:9;;55792:17;;:30;;:67;;;;;55844:15;;55826;55836:4;55826:9;:15::i;:::-;:33;55792:67;:106;;;;;55883:15;;55863:17;;:35;55792:106;55789:195;;;-1:-1:-1;55921:1:0;;55628:363;-1:-1:-1;55628:363:0:o;55789:195::-;-1:-1:-1;55971:1:0;;55628:363;-1:-1:-1;55628:363:0:o;55789:195::-;55628:363;;;:::o;52731:92::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;52800:15;;::::1;::::0;:9:::1;::::0;:15:::1;::::0;::::1;::::0;::::1;:::i;25858:104::-:0;25914:13;25947:7;25940:14;;;;;:::i;52612:107::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;52688:23:::1;52698:2;52702:8;52688:9;:23::i;28033:308::-:0;-1:-1:-1;;;;;28132:31:0;;46709:10;28132:31;28128:61;;;28172:17;;-1:-1:-1;;;28172:17:0;;;;;;;;;;;28128:61;46709:10;28202:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;28202:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;28202:60:0;;;;;;;;;;28278:55;;540:41:1;;;28202:49:0;;46709:10;28278:55;;513:18:1;28278:55:0;;;;;;;28033:308;;:::o;54033:104::-;47978:6;;54092:7;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;-1:-1:-1;54118:11:0::1;::::0;54033:104;:::o;53837:86::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;53899:11:::1;:16:::0;53837:86::o;29140:396::-;29307:28;29317:4;29323:2;29327:7;29307:9;:28::i;:::-;-1:-1:-1;;;;;29350:14:0;;;:19;29346:183;;29389:56;29420:4;29426:2;29430:7;29439:5;29389:30;:56::i;:::-;29384:145;;29473:40;;-1:-1:-1;;;29473:40:0;;;;;;;;;;;29384:145;29140:396;;;;:::o;50831:1402::-;50586:6;;50917:11;;50586:6;;50585:7;50577:43;;;;-1:-1:-1;;;50577:43:0;;9867:2:1;50577:43:0;;;9849:21:1;9906:2;9886:18;;;9879:30;9945:25;9925:18;;;9918:53;9988:18;;50577:43:0;9665:347:1;50577:43:0;50653:1;50639:11;:15;:52;;;;;50673:18;;50658:11;:33;;50639:52;50631:85;;;;-1:-1:-1;;;50631:85:0;;10219:2:1;50631:85:0;;;10201:21:1;10258:2;10238:18;;;10231:30;-1:-1:-1;;;10277:18:1;;;10270:50;10337:18;;50631:85:0;10017:344:1;50631:85:0;50766:10;;55611:1;19996:12;19783:7;19980:13;50751:11;;19980:28;;-1:-1:-1;;19980:46:0;50735:27;;;;:::i;:::-;:41;;50727:74;;;;-1:-1:-1;;;50727:74:0;;10701:2:1;50727:74:0;;;10683:21:1;10740:2;10720:18;;;10713:30;-1:-1:-1;;;10759:18:1;;;10752:50;10819:18;;50727:74:0;10499:344:1;50727:74:0;50987:22:::1;;50972:11;50948:21;50958:10;50948:9;:21::i;:::-;:35;;;;:::i;:::-;:61;;50940:103;;;::::0;-1:-1:-1;;;50940:103:0;;11050:2:1;50940:103:0::1;::::0;::::1;11032:21:1::0;11089:2;11069:18;;;11062:30;11128:31;11108:18;;;11101:59;11177:18;;50940:103:0::1;10848:353:1::0;50940:103:0::1;51059:26;51074:10;51059:14;:26::i;:::-;51089:1;51059:31;51056:1160;;;51116:22;51131:6;;51116:14;:22::i;:::-;51142:1;51116:27;51108:58;;;::::0;-1:-1:-1;;;51108:58:0;;11408:2:1;51108:58:0::1;::::0;::::1;11390:21:1::0;11447:2;11427:18;;;11420:30;-1:-1:-1;;;11466:18:1;;;11459:48;11524:18;;51108:58:0::1;11206:342:1::0;51108:58:0::1;51234:10;;51219:11;51195:21;51205:10;51195:9;:21::i;:::-;:35;;;;:::i;:::-;:49;;51187:103;;;::::0;-1:-1:-1;;;51187:103:0;;11755:2:1;51187:103:0::1;::::0;::::1;11737:21:1::0;11794:2;11774:18;;;11767:30;11833:34;11813:18;;;11806:62;-1:-1:-1;;;11884:18:1;;;11877:39;11933:19;;51187:103:0::1;11553:405:1::0;51187:103:0::1;51372:11;51352:17;;:31;;;;:::i;:::-;51332:17;:51:::0;51411:34:::1;51421:10;51433:11:::0;51411:9:::1;:34::i;:::-;51056:1160;;;51468:26;51483:10;51468:14;:26::i;:::-;51498:1;51468:31;51465:751;;;51524:16;::::0;::::1;;51521:115;;;51564:22;51579:6;;51564:14;:22::i;:::-;51590:1;51564:27;51556:64;;;::::0;-1:-1:-1;;;51556:64:0;;12165:2:1;51556:64:0::1;::::0;::::1;12147:21:1::0;12204:2;12184:18;;;12177:30;12243:26;12223:18;;;12216:54;12287:18;;51556:64:0::1;11963:348:1::0;51556:64:0::1;51699:15;;51684:11;51660:21;51670:10;51660:9;:21::i;:::-;:35;;;;:::i;:::-;:54;;51652:107;;;::::0;-1:-1:-1;;;51652:107:0;;12518:2:1;51652:107:0::1;::::0;::::1;12500:21:1::0;12557:2;12537:18;;;12530:30;12596:34;12576:18;;;12569:62;-1:-1:-1;;;12647:18:1;;;12640:38;12695:19;;51652:107:0::1;12316:404:1::0;51465:751:0::1;51944:16;::::0;::::1;;51941:124;;;52013:1;51988:22;52003:6;;51988:14;:22::i;:::-;:26;51980:65;;;::::0;-1:-1:-1;;;51980:65:0;;12927:2:1;51980:65:0::1;::::0;::::1;12909:21:1::0;12966:2;12946:18;;;12939:30;13005:28;12985:18;;;12978:56;13051:18;;51980:65:0::1;12725:350:1::0;51980:65:0::1;52110:11;52102:5;;:19;;;;:::i;:::-;52089:9;:32;;52081:72;;;::::0;-1:-1:-1;;;52081:72:0;;13282:2:1;52081:72:0::1;::::0;::::1;13264:21:1::0;13321:2;13301:18;;;13294:30;13360:29;13340:18;;;13333:57;13407:18;;52081:72:0::1;13080:351:1::0;52081:72:0::1;52170:34;52180:10;52192:11;52170:9;:34::i;55015:488::-:0;55089:13;55124:16;55132:7;55124;:16::i;:::-;55116:75;;;;-1:-1:-1;;;55116:75:0;;13638:2:1;55116:75:0;;;13620:21:1;13677:2;13657:18;;;13650:30;13716:34;13696:18;;;13689:62;-1:-1:-1;;;13767:18:1;;;13760:45;13822:19;;55116:75:0;13436:411:1;55116:75:0;55216:8;;;;;;;55212:62;;55253:9;55246:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55015:488;;;:::o;55212:62::-;55294:28;55325:10;:8;:10::i;:::-;55294:41;;55384:1;55359:14;55353:28;:32;:140;;;;;;;;;;;;;;;;;55425:14;55441:18;:7;:16;:18::i;:::-;55461:12;55408:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55353:140;55346:147;55015:488;-1:-1:-1;;;55015:488:0:o;52835:87::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;52897:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;52897:17:0;;::::1;::::0;;;::::1;::::0;;52835:87::o;28412:164::-;-1:-1:-1;;;;;28533:25:0;;;28509:4;28533:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28412:164::o;52241:198::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;52333:9:::1;52329:101;52352:8;:15;52348:1;:19;52329:101;;;52388:30;52398:8;52407:1;52398:11;;;;;;;;:::i;:::-;;;;;;;52411:6;52388:9;:30::i;:::-;52369:3:::0;::::1;::::0;::::1;:::i;:::-;;;;52329:101;;53645:100:::0;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;53713:16:::1;:24:::0;;-1:-1:-1;;53713:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53645:100::o;48814:201::-;47978:6;;-1:-1:-1;;;;;47978:6:0;46709:10;48125:23;48117:68;;;;-1:-1:-1;;;48117:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48903:22:0;::::1;48895:73;;;::::0;-1:-1:-1;;;48895:73:0;;15984:2:1;48895:73:0::1;::::0;::::1;15966:21:1::0;16023:2;16003:18;;;15996:30;16062:34;16042:18;;;16035:62;-1:-1:-1;;;16113:18:1;;;16106:36;16159:19;;48895:73:0::1;15782:402:1::0;48895:73:0::1;48979:28;48998:8;48979:18;:28::i;:::-;48814:201:::0;:::o;29791:273::-;29848:4;29904:7;55611:1;29885:26;;:66;;;;;29938:13;;29928:7;:23;29885:66;:152;;;;-1:-1:-1;;29989:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;29989:43:0;:48;;29791:273::o;22993:1129::-;23060:7;23095;;55611:1;23144:23;23140:915;;23197:13;;23190:4;:20;23186:869;;;23235:14;23252:23;;;:17;:23;;;;;;-1:-1:-1;;;23341:23:0;;23337:699;;23860:113;23867:11;23860:113;;-1:-1:-1;;;23938:6:0;23920:25;;;;:17;:25;;;;;;23860:113;;23337:699;23212:843;23186:869;24083:31;;-1:-1:-1;;;24083:31:0;;;;;;;;;;;35030:2515;35145:27;35175;35194:7;35175:18;:27::i;:::-;35145:57;;35260:4;-1:-1:-1;;;;;35219:45:0;35235:19;-1:-1:-1;;;;;35219:45:0;;35215:86;;35273:28;;-1:-1:-1;;;35273:28:0;;;;;;;;;;;35215:86;35314:22;46709:10;-1:-1:-1;;;;;35340:27:0;;;;:87;;-1:-1:-1;35384:43:0;35401:4;46709:10;28412:164;:::i;35384:43::-;35340:147;;;-1:-1:-1;46709:10:0;35444:20;35456:7;35444:11;:20::i;:::-;-1:-1:-1;;;;;35444:43:0;;35340:147;35314:174;;35506:17;35501:66;;35532:35;;-1:-1:-1;;;35532:35:0;;;;;;;;;;;35501:66;-1:-1:-1;;;;;35582:16:0;;35578:52;;35607:23;;-1:-1:-1;;;35607:23:0;;;;;;;;;;;35578:52;35759:24;;;;:15;:24;;;;;;;;35752:31;;-1:-1:-1;;;;;;35752:31:0;;;-1:-1:-1;;;;;36151:24:0;;;;;:18;:24;;;;;36149:26;;-1:-1:-1;;36149:26:0;;;36220:22;;;;;;;36218:24;;-1:-1:-1;36218:24:0;;;36513:26;;;:17;:26;;;;;-1:-1:-1;;;36601:15:0;17348:3;36601:41;36559:84;;:128;;36513:174;;;36807:46;;36803:626;;36911:1;36901:11;;36879:19;37034:30;;;:17;:30;;;;;;37030:384;;37172:13;;37157:11;:28;37153:242;;37319:30;;;;:17;:30;;;;;:52;;;37153:242;36860:569;36803:626;37476:7;37472:2;-1:-1:-1;;;;;37457:27:0;37466:4;-1:-1:-1;;;;;37457:27:0;;;;;;;;;;;35134:2411;;35030:2515;;;:::o;49175:191::-;49268:6;;;-1:-1:-1;;;;;49285:17:0;;;-1:-1:-1;;;;;;49285:17:0;;;;;;;49318:40;;49268:6;;;49285:17;49268:6;;49318:40;;49249:16;;49318:40;49238:128;49175:191;:::o;30148:104::-;30217:27;30227:2;30231:8;30217:27;;;;;;;;;;;;:9;:27::i;41242:716::-;41426:88;;-1:-1:-1;;;41426:88:0;;41405:4;;-1:-1:-1;;;;;41426:45:0;;;;;:88;;46709:10;;41493:4;;41499:7;;41508:5;;41426:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41426:88:0;;;;;;;;-1:-1:-1;;41426:88:0;;;;;;;;;;;;:::i;:::-;;;41422:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41709:13:0;;41705:235;;41755:40;;-1:-1:-1;;;41755:40:0;;;;;;;;;;;41705:235;41898:6;41892:13;41883:6;41879:2;41875:15;41868:38;41422:529;-1:-1:-1;;;;;;41585:64:0;-1:-1:-1;;;41585:64:0;;-1:-1:-1;41422:529:0;41242:716;;;;;;:::o;54145:383::-;54271:28;;-1:-1:-1;;54288:10:0;17086:2:1;17082:15;17078:53;54271:28:0;;;17066:66:1;54225:7:0;;;;17148:12:1;;54271:28:0;;;;;;;;;;;;54261:39;;;;;;54246:54;;54316:46;54335:12;;54316:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54349:6:0;;;-1:-1:-1;54357:4:0;;-1:-1:-1;54316:18:0;:46::i;:::-;54313:85;;;54385:1;54378:8;;;;;54313:85;54413:51;54432:12;;54413:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54446:11:0;;;-1:-1:-1;54459:4:0;;-1:-1:-1;54413:18:0;:51::i;:::-;54410:90;;;54487:1;54480:8;;;;;54410:90;-1:-1:-1;54519:1:0;;54145:383;-1:-1:-1;;;54145:383:0:o;56091:108::-;56151:13;56184:7;56177:14;;;;;:::i;5844:723::-;5900:13;6121:10;6117:53;;-1:-1:-1;;6148:10:0;;;;;;;;;;;;-1:-1:-1;;;6148:10:0;;;;;5844:723::o;6117:53::-;6195:5;6180:12;6236:78;6243:9;;6236:78;;6269:8;;;;:::i;:::-;;-1:-1:-1;6292:10:0;;-1:-1:-1;6300:2:0;6292:10;;:::i;:::-;;;6236:78;;;6324:19;6356:6;6346:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6346:17:0;;6324:39;;6374:154;6381:10;;6374:154;;6408:11;6418:1;6408:11;;:::i;:::-;;-1:-1:-1;6477:10:0;6485:2;6477:5;:10;:::i;:::-;6464:24;;:2;:24;:::i;:::-;6451:39;;6434:6;6441;6434:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;6434:56:0;;;;;;;;-1:-1:-1;6505:11:0;6514:2;6505:11;;:::i;:::-;;;6374:154;;30625:2236;30748:20;30771:13;-1:-1:-1;;;;;30799:16:0;;30795:48;;30824:19;;-1:-1:-1;;;30824:19:0;;;;;;;;;;;30795:48;30858:13;30854:44;;30880:18;;-1:-1:-1;;;30880:18:0;;;;;;;;;;;30854:44;-1:-1:-1;;;;;31447:22:0;;;;;;:18;:22;;;;16831:2;31447:22;;;:70;;31485:31;31473:44;;31447:70;;;31760:31;;;:17;:31;;;;;31853:15;17348:3;31853:41;31811:84;;-1:-1:-1;31931:13:0;;17611:3;31916:56;31811:162;31760:213;;:31;;32054:23;;;;32098:14;:19;32094:635;;32138:313;32169:38;;32194:12;;-1:-1:-1;;;;;32169:38:0;;;32186:1;;32169:38;;32186:1;;32169:38;32235:69;32274:1;32278:2;32282:14;;;;;;32298:5;32235:30;:69::i;:::-;32230:174;;32340:40;;-1:-1:-1;;;32340:40:0;;;;;;;;;;;32230:174;32446:3;32431:12;:18;32138:313;;32532:12;32515:13;;:29;32511:43;;32546:8;;;32511:43;32094:635;;;32595:119;32626:40;;32651:14;;;;;-1:-1:-1;;;;;32626:40:0;;;32643:1;;32626:40;;32643:1;;32626:40;32709:3;32694:12;:18;32595:119;;32094:635;-1:-1:-1;32743:13:0;:28;;;32793:60;;32826:2;32830:12;32844:8;32793:60;:::i;4014:190::-;4139:4;4192;4163:25;4176:5;4183:4;4163:12;:25::i;:::-;:33;;4014:190;-1:-1:-1;;;;4014:190:0:o;4565:675::-;4648:7;4691:4;4648:7;4706:497;4730:5;:12;4726:1;:16;4706:497;;;4764:20;4787:5;4793:1;4787:8;;;;;;;;:::i;:::-;;;;;;;4764:31;;4830:12;4814;:28;4810:382;;5316:13;5366:15;;;5402:4;5395:15;;;5449:4;5433:21;;4942:57;;4810:382;;;5316:13;5366:15;;;5402:4;5395:15;;;5449:4;5433:21;;5119:57;;4810:382;-1:-1:-1;4744:3:0;;;;:::i;:::-;;;;4706:497;;;-1:-1:-1;5220:12:0;4565:675;-1:-1:-1;;;4565:675:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;757:180;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:258::-;1014:1;1024:113;1038:6;1035:1;1032:13;1024:113;;;1114:11;;;1108:18;1095:11;;;1088:39;1060:2;1053:10;1024:113;;;1155:6;1152:1;1149:13;1146:48;;;-1:-1:-1;;1190:1:1;1172:16;;1165:27;942:258::o;1205:::-;1247:3;1285:5;1279:12;1312:6;1307:3;1300:19;1328:63;1384:6;1377:4;1372:3;1368:14;1361:4;1354:5;1350:16;1328:63;:::i;:::-;1445:2;1424:15;-1:-1:-1;;1420:29:1;1411:39;;;;1452:4;1407:50;;1205:258;-1:-1:-1;;1205:258:1:o;1468:220::-;1617:2;1606:9;1599:21;1580:4;1637:45;1678:2;1667:9;1663:18;1655:6;1637:45;:::i;1693:180::-;1752:6;1805:2;1793:9;1784:7;1780:23;1776:32;1773:52;;;1821:1;1818;1811:12;1773:52;-1:-1:-1;1844:23:1;;1693:180;-1:-1:-1;1693:180:1:o;2086:173::-;2154:20;;-1:-1:-1;;;;;2203:31:1;;2193:42;;2183:70;;2249:1;2246;2239:12;2264:254;2332:6;2340;2393:2;2381:9;2372:7;2368:23;2364:32;2361:52;;;2409:1;2406;2399:12;2361:52;2432:29;2451:9;2432:29;:::i;:::-;2422:39;2508:2;2493:18;;;;2480:32;;-1:-1:-1;;;2264:254:1:o;2705:328::-;2782:6;2790;2798;2851:2;2839:9;2830:7;2826:23;2822:32;2819:52;;;2867:1;2864;2857:12;2819:52;2890:29;2909:9;2890:29;:::i;:::-;2880:39;;2938:38;2972:2;2961:9;2957:18;2938:38;:::i;:::-;2928:48;;3023:2;3012:9;3008:18;2995:32;2985:42;;2705:328;;;;;:::o;3038:127::-;3099:10;3094:3;3090:20;3087:1;3080:31;3130:4;3127:1;3120:15;3154:4;3151:1;3144:15;3170:275;3241:2;3235:9;3306:2;3287:13;;-1:-1:-1;;3283:27:1;3271:40;;3341:18;3326:34;;3362:22;;;3323:62;3320:88;;;3388:18;;:::i;:::-;3424:2;3417:22;3170:275;;-1:-1:-1;3170:275:1:o;3450:407::-;3515:5;3549:18;3541:6;3538:30;3535:56;;;3571:18;;:::i;:::-;3609:57;3654:2;3633:15;;-1:-1:-1;;3629:29:1;3660:4;3625:40;3609:57;:::i;:::-;3600:66;;3689:6;3682:5;3675:21;3729:3;3720:6;3715:3;3711:16;3708:25;3705:45;;;3746:1;3743;3736:12;3705:45;3795:6;3790:3;3783:4;3776:5;3772:16;3759:43;3849:1;3842:4;3833:6;3826:5;3822:18;3818:29;3811:40;3450:407;;;;;:::o;3862:451::-;3931:6;3984:2;3972:9;3963:7;3959:23;3955:32;3952:52;;;4000:1;3997;3990:12;3952:52;4040:9;4027:23;4073:18;4065:6;4062:30;4059:50;;;4105:1;4102;4095:12;4059:50;4128:22;;4181:4;4173:13;;4169:27;-1:-1:-1;4159:55:1;;4210:1;4207;4200:12;4159:55;4233:74;4299:7;4294:2;4281:16;4276:2;4272;4268:11;4233:74;:::i;4685:186::-;4744:6;4797:2;4785:9;4776:7;4772:23;4768:32;4765:52;;;4813:1;4810;4803:12;4765:52;4836:29;4855:9;4836:29;:::i;4876:254::-;4941:6;4949;5002:2;4990:9;4981:7;4977:23;4973:32;4970:52;;;5018:1;5015;5008:12;4970:52;5041:29;5060:9;5041:29;:::i;:::-;5031:39;;5089:35;5120:2;5109:9;5105:18;5089:35;:::i;:::-;5079:45;;4876:254;;;;;:::o;5135:667::-;5230:6;5238;5246;5254;5307:3;5295:9;5286:7;5282:23;5278:33;5275:53;;;5324:1;5321;5314:12;5275:53;5347:29;5366:9;5347:29;:::i;:::-;5337:39;;5395:38;5429:2;5418:9;5414:18;5395:38;:::i;:::-;5385:48;;5480:2;5469:9;5465:18;5452:32;5442:42;;5535:2;5524:9;5520:18;5507:32;5562:18;5554:6;5551:30;5548:50;;;5594:1;5591;5584:12;5548:50;5617:22;;5670:4;5662:13;;5658:27;-1:-1:-1;5648:55:1;;5699:1;5696;5689:12;5648:55;5722:74;5788:7;5783:2;5770:16;5765:2;5761;5757:11;5722:74;:::i;:::-;5712:84;;;5135:667;;;;;;;:::o;5807:683::-;5902:6;5910;5918;5971:2;5959:9;5950:7;5946:23;5942:32;5939:52;;;5987:1;5984;5977:12;5939:52;6023:9;6010:23;6000:33;;6084:2;6073:9;6069:18;6056:32;6107:18;6148:2;6140:6;6137:14;6134:34;;;6164:1;6161;6154:12;6134:34;6202:6;6191:9;6187:22;6177:32;;6247:7;6240:4;6236:2;6232:13;6228:27;6218:55;;6269:1;6266;6259:12;6218:55;6309:2;6296:16;6335:2;6327:6;6324:14;6321:34;;;6351:1;6348;6341:12;6321:34;6404:7;6399:2;6389:6;6386:1;6382:14;6378:2;6374:23;6370:32;6367:45;6364:65;;;6425:1;6422;6415:12;6364:65;6456:2;6452;6448:11;6438:21;;6478:6;6468:16;;;;;5807:683;;;;;:::o;6495:260::-;6563:6;6571;6624:2;6612:9;6603:7;6599:23;6595:32;6592:52;;;6640:1;6637;6630:12;6592:52;6663:29;6682:9;6663:29;:::i;:::-;6653:39;;6711:38;6745:2;6734:9;6730:18;6711:38;:::i;6760:1022::-;6853:6;6861;6914:2;6902:9;6893:7;6889:23;6885:32;6882:52;;;6930:1;6927;6920:12;6882:52;6970:9;6957:23;6999:18;7040:2;7032:6;7029:14;7026:34;;;7056:1;7053;7046:12;7026:34;7094:6;7083:9;7079:22;7069:32;;7139:7;7132:4;7128:2;7124:13;7120:27;7110:55;;7161:1;7158;7151:12;7110:55;7197:2;7184:16;7219:4;7242:2;7238;7235:10;7232:36;;;7248:18;;:::i;:::-;7294:2;7291:1;7287:10;7277:20;;7317:28;7341:2;7337;7333:11;7317:28;:::i;:::-;7379:15;;;7449:11;;;7445:20;;;7410:12;;;;7477:19;;;7474:39;;;7509:1;7506;7499:12;7474:39;7533:11;;;;7553:148;7569:6;7564:3;7561:15;7553:148;;;7635:23;7654:3;7635:23;:::i;:::-;7623:36;;7586:12;;;;7679;;;;7553:148;;;7720:5;7757:18;;;;7744:32;;-1:-1:-1;;;;;;;6760:1022:1:o;7787:356::-;7989:2;7971:21;;;8008:18;;;8001:30;8067:34;8062:2;8047:18;;8040:62;8134:2;8119:18;;7787:356::o;8148:380::-;8227:1;8223:12;;;;8270;;;8291:61;;8345:4;8337:6;8333:17;8323:27;;8291:61;8398:2;8390:6;8387:14;8367:18;8364:38;8361:161;;;8444:10;8439:3;8435:20;8432:1;8425:31;8479:4;8476:1;8469:15;8507:4;8504:1;8497:15;8361:161;;8148:380;;;:::o;8893:127::-;8954:10;8949:3;8945:20;8942:1;8935:31;8985:4;8982:1;8975:15;9009:4;9006:1;8999:15;9025:168;9065:7;9131:1;9127;9123:6;9119:14;9116:1;9113:21;9108:1;9101:9;9094:17;9090:45;9087:71;;;9138:18;;:::i;:::-;-1:-1:-1;9178:9:1;;9025:168::o;9198:127::-;9259:10;9254:3;9250:20;9247:1;9240:31;9290:4;9287:1;9280:15;9314:4;9311:1;9304:15;9330:120;9370:1;9396;9386:35;;9401:18;;:::i;:::-;-1:-1:-1;9435:9:1;;9330:120::o;10366:128::-;10406:3;10437:1;10433:6;10430:1;10427:13;10424:39;;;10443:18;;:::i;:::-;-1:-1:-1;10479:9:1;;10366:128::o;13978:1527::-;14202:3;14240:6;14234:13;14266:4;14279:51;14323:6;14318:3;14313:2;14305:6;14301:15;14279:51;:::i;:::-;14393:13;;14352:16;;;;14415:55;14393:13;14352:16;14437:15;;;14415:55;:::i;:::-;14559:13;;14492:20;;;14532:1;;14619;14641:18;;;;14694;;;;14721:93;;14799:4;14789:8;14785:19;14773:31;;14721:93;14862:2;14852:8;14849:16;14829:18;14826:40;14823:167;;;-1:-1:-1;;;14889:33:1;;14945:4;14942:1;14935:15;14975:4;14896:3;14963:17;14823:167;15006:18;15033:110;;;;15157:1;15152:328;;;;14999:481;;15033:110;-1:-1:-1;;15068:24:1;;15054:39;;15113:20;;;;-1:-1:-1;15033:110:1;;15152:328;13925:1;13918:14;;;13962:4;13949:18;;15247:1;15261:169;15275:8;15272:1;15269:15;15261:169;;;15357:14;;15342:13;;;15335:37;15400:16;;;;15292:10;;15261:169;;;15265:3;;15461:8;15454:5;15450:20;15443:27;;14999:481;-1:-1:-1;15496:3:1;;13978:1527;-1:-1:-1;;;;;;;;;;;13978:1527:1:o;15510:127::-;15571:10;15566:3;15562:20;15559:1;15552:31;15602:4;15599:1;15592:15;15626:4;15623:1;15616:15;15642:135;15681:3;-1:-1:-1;;15702:17:1;;15699:43;;;15722:18;;:::i;:::-;-1:-1:-1;15769:1:1;15758:13;;15642:135::o;16189:489::-;-1:-1:-1;;;;;16458:15:1;;;16440:34;;16510:15;;16505:2;16490:18;;16483:43;16557:2;16542:18;;16535:34;;;16605:3;16600:2;16585:18;;16578:31;;;16383:4;;16626:46;;16652:19;;16644:6;16626:46;:::i;:::-;16618:54;16189:489;-1:-1:-1;;;;;;16189:489:1:o;16683:249::-;16752:6;16805:2;16793:9;16784:7;16780:23;16776:32;16773:52;;;16821:1;16818;16811:12;16773:52;16853:9;16847:16;16872:30;16896:5;16872:30;:::i;17171:125::-;17211:4;17239:1;17236;17233:8;17230:34;;;17244:18;;:::i;:::-;-1:-1:-1;17281:9:1;;17171:125::o;17301:112::-;17333:1;17359;17349:35;;17364:18;;:::i;:::-;-1:-1:-1;17398:9:1;;17301:112::o
Swarm Source
ipfs://1a5761bf92140831911dc09cbe4f0b4e9fc47070ebe507aaeae6a8371e06d072
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,247.75 | 0.0547 | $177.62 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.