Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
10,000 MW
Holders
533
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
20 MWLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Moonwhalez
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "ERC721A.sol"; import "Ownable.sol"; contract Moonwhalez is ERC721A, Ownable { using Strings for uint256; string public baseURI; bool public paused = false; uint256 MAX_SUPPLY = 10000; string public notRevealedUri; bool public revealed = true; uint256 public publicSaleCost = 0.0069 ether; uint256 public total_free_mint_claimed; uint256 public freemintLimit = 4200; uint256 public per_wallet_limit = 20; constructor(string memory _initBaseURI, string memory _initNotRevealedUri) ERC721A("Moonwhalez", "MW") { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } function mint(uint256 quantity) public payable { require(totalSupply() + quantity <= MAX_SUPPLY, "Not enough tokens left"); if (msg.sender != owner()) { require(!paused, "the contract is paused"); require(balanceOf(msg.sender) + quantity <= per_wallet_limit); if(totalSupply() + quantity <= freemintLimit){ total_free_mint_claimed = total_free_mint_claimed + quantity; }else{ require(msg.value >= (publicSaleCost * quantity), "Not enough ether sent"); } } _safeMint(msg.sender, quantity); } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); if(revealed == false) { return notRevealedUri; } return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString(),".json")) : ''; } function _baseURI() internal view override returns (string memory) { return baseURI; } //only owner function toggleReveal() public onlyOwner { if(revealed==false){ revealed = true; }else{ revealed = false; } } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function withdraw() public payable onlyOwner { (bool main1, ) = payable(owner()).call{value:address(this).balance}(""); require(main1); } function setPublicSaleCost(uint256 _publicSaleCost) public onlyOwner { publicSaleCost = _publicSaleCost; } function setPer_wallet_limit(uint256 _per_wallet_limit) public onlyOwner { per_wallet_limit = _per_wallet_limit; } function setFreemintLimit(uint256 _freemintLimit) public onlyOwner { freemintLimit = _freemintLimit; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function pause(bool _state) public onlyOwner { paused = _state; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // Creator: Chiru Labs pragma solidity ^0.8.4; import 'IERC721.sol'; import 'IERC721Receiver.sol'; import 'IERC721Metadata.sol'; import 'IERC721Enumerable.sol'; import 'Address.sol'; import 'Context.sol'; import 'Strings.sol'; import 'ERC165.sol'; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 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**128 - 1 (max value of uint128). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. 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; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; } // Compiler will pack the following // _currentIndex and _burnCounter into a single 256bit word. // The tokenId of the next token to be minted. uint128 internal _currentIndex; // The number of tokens burned. uint128 internal _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 ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex times unchecked { return _currentIndex - _burnCounter; } } /** * @dev See {IERC721Enumerable-tokenByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenByIndex(uint256 index) public view override returns (uint256) { uint256 numMintedSoFar = _currentIndex; uint256 tokenIdsIdx; // Counter overflow is impossible as the loop breaks when // uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (!ownership.burned) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert TokenIndexOutOfBounds(); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds(); uint256 numMintedSoFar = _currentIndex; uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when // uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } // Execution should never reach this point. revert(); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * 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) { uint256 curr = tokenId; unchecked { if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // 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. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @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 override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _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 (!_checkOnERC721Received(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 tokenId < _currentIndex && !_ownerships[tokenId].burned; } 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 { _mint(to, quantity, _data, true); } /** * @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, bytes memory _data, bool safe ) 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 > 3.4e38 (2**128) - 1 // updatedIndex overflows if _currentIndex + quantity > 3.4e38 (2**128) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) { revert TransferToNonERC721ReceiverImplementer(); } updatedIndex++; } _currentIndex = uint128(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 { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // 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**128. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // 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**128. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @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 {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"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":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","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":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freemintLimit","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":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"per_wallet_limit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freemintLimit","type":"uint256"}],"name":"setFreemintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_per_wallet_limit","type":"uint256"}],"name":"setPer_wallet_limit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleCost","type":"uint256"}],"name":"setPublicSaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_free_mint_claimed","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":"payable","type":"function"}]
Contract Creation Code
60806040526009805460ff19908116909155612710600a55600c805490911660011790556618838370f34000600d55611068600f5560146010553480156200004657600080fd5b506040516200244c3803806200244c83398101604081905262000069916200037c565b604080518082018252600a81526926b7b7b73bb430b632bd60b11b6020808301918252835180850190945260028452614d5760f01b908401528151919291620000b5916001916200021f565b508051620000cb9060029060208401906200021f565b505050620000e8620000e26200010660201b60201c565b6200010a565b620000f3826200015c565b620000fe81620001c4565b505062000439565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6007546001600160a01b03163314620001ab5760405162461bcd60e51b815260206004820181905260248201526000805160206200242c83398151915260448201526064015b60405180910390fd5b8051620001c09060089060208401906200021f565b5050565b6007546001600160a01b031633146200020f5760405162461bcd60e51b815260206004820181905260248201526000805160206200242c8339815191526044820152606401620001a2565b8051620001c090600b9060208401905b8280546200022d90620003e6565b90600052602060002090601f0160209004810192826200025157600085556200029c565b82601f106200026c57805160ff19168380011785556200029c565b828001600101855582156200029c579182015b828111156200029c5782518255916020019190600101906200027f565b50620002aa929150620002ae565b5090565b5b80821115620002aa5760008155600101620002af565b600082601f830112620002d757600080fd5b81516001600160401b0380821115620002f457620002f462000423565b604051601f8301601f19908116603f011681019082821181831017156200031f576200031f62000423565b816040528381526020925086838588010111156200033c57600080fd5b600091505b8382101562000360578582018301518183018401529082019062000341565b83821115620003725760008385830101525b9695505050505050565b600080604083850312156200039057600080fd5b82516001600160401b0380821115620003a857600080fd5b620003b686838701620002c5565b93506020850151915080821115620003cd57600080fd5b50620003dc85828601620002c5565b9150509250929050565b600181811c90821680620003fb57607f821691505b602082108114156200041d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611fe380620004496000396000f3fe60806040526004361061020f5760003560e01c80635c975abb11610118578063a0712d68116100a0578063d494be8a1161006f578063d494be8a146105a0578063e985e9c5146105c0578063eab2530b14610609578063f2c4ce1e1461061f578063f2fde38b1461063f57600080fd5b8063a0712d681461052d578063a22cb46514610540578063b88d4fde14610560578063c87b56dd1461058057600080fd5b8063715018a6116100e7578063715018a6146104a55780637cbf1f87146104ba5780638da5cb5b146104da5780638dbb7c06146104f857806395d89b411461051857600080fd5b80635c975abb146104365780636352211e146104505780636c0360eb1461047057806370a082311461048557600080fd5b80632f745c591161019b5780634da737071161016a5780634da73707146103b15780634f6ccce7146103c757806351830227146103e757806355f804b3146104015780635b8ad4291461042157600080fd5b80632f745c59146103535780633ccfd60b1461037357806342842e0e1461037b578063453afb0f1461039b57600080fd5b8063081c8c44116101e2578063081c8c44146102c5578063095ea7b3146102da5780631124498b146102fa57806318160ddd1461031e57806323b872dd1461033357600080fd5b806301ffc9a71461021457806302329a291461024957806306fdde031461026b578063081812fc1461028d575b600080fd5b34801561022057600080fd5b5061023461022f366004611c23565b61065f565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b50610269610264366004611c08565b6106cc565b005b34801561027757600080fd5b50610280610712565b6040516102409190611dff565b34801561029957600080fd5b506102ad6102a8366004611ca6565b6107a4565b6040516001600160a01b039091168152602001610240565b3480156102d157600080fd5b506102806107e8565b3480156102e657600080fd5b506102696102f5366004611bde565b610876565b34801561030657600080fd5b5061031060105481565b604051908152602001610240565b34801561032a57600080fd5b50610310610904565b34801561033f57600080fd5b5061026961034e366004611afc565b610923565b34801561035f57600080fd5b5061031061036e366004611bde565b61092e565b610269610a2b565b34801561038757600080fd5b50610269610396366004611afc565b610ac9565b3480156103a757600080fd5b50610310600d5481565b3480156103bd57600080fd5b50610310600e5481565b3480156103d357600080fd5b506103106103e2366004611ca6565b610ae4565b3480156103f357600080fd5b50600c546102349060ff1681565b34801561040d57600080fd5b5061026961041c366004611c5d565b610b8f565b34801561042d57600080fd5b50610269610bd0565b34801561044257600080fd5b506009546102349060ff1681565b34801561045c57600080fd5b506102ad61046b366004611ca6565b610c20565b34801561047c57600080fd5b50610280610c32565b34801561049157600080fd5b506103106104a0366004611aa7565b610c3f565b3480156104b157600080fd5b50610269610c8e565b3480156104c657600080fd5b506102696104d5366004611ca6565b610cc2565b3480156104e657600080fd5b506007546001600160a01b03166102ad565b34801561050457600080fd5b50610269610513366004611ca6565b610cf1565b34801561052457600080fd5b50610280610d20565b61026961053b366004611ca6565b610d2f565b34801561054c57600080fd5b5061026961055b366004611bb4565b610e9c565b34801561056c57600080fd5b5061026961057b366004611b38565b610f32565b34801561058c57600080fd5b5061028061059b366004611ca6565b610f6c565b3480156105ac57600080fd5b506102696105bb366004611ca6565b61108b565b3480156105cc57600080fd5b506102346105db366004611ac9565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561061557600080fd5b50610310600f5481565b34801561062b57600080fd5b5061026961063a366004611c5d565b6110ba565b34801561064b57600080fd5b5061026961065a366004611aa7565b6110f7565b60006001600160e01b031982166380ac58cd60e01b148061069057506001600160e01b03198216635b5e139f60e01b145b806106ab57506001600160e01b0319821663780e9d6360e01b145b806106c657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146106ff5760405162461bcd60e51b81526004016106f690611e12565b60405180910390fd5b6009805460ff1916911515919091179055565b60606001805461072190611ed5565b80601f016020809104026020016040519081016040528092919081815260200182805461074d90611ed5565b801561079a5780601f1061076f5761010080835404028352916020019161079a565b820191906000526020600020905b81548152906001019060200180831161077d57829003601f168201915b5050505050905090565b60006107af8261118f565b6107cc576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600b80546107f590611ed5565b80601f016020809104026020016040519081016040528092919081815260200182805461082190611ed5565b801561086e5780601f106108435761010080835404028352916020019161086e565b820191906000526020600020905b81548152906001019060200180831161085157829003601f168201915b505050505081565b600061088182610c20565b9050806001600160a01b0316836001600160a01b031614156108b65760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906108d657506108d481336105db565b155b156108f4576040516367d9dca160e11b815260040160405180910390fd5b6108ff8383836111c3565b505050565b6000546001600160801b03600160801b82048116918116919091031690565b6108ff83838361121f565b600061093983610c3f565b8210610958576040516306ed618760e11b815260040160405180910390fd5b600080546001600160801b03169080805b83811015610a2557600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615801592820192909252906109d15750610a1d565b80516001600160a01b0316156109e657805192505b876001600160a01b0316836001600160a01b03161415610a1b5786841415610a14575093506106c692505050565b6001909301925b505b600101610969565b50600080fd5b6007546001600160a01b03163314610a555760405162461bcd60e51b81526004016106f690611e12565b6000610a696007546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ab3576040519150601f19603f3d011682016040523d82523d6000602084013e610ab8565b606091505b5050905080610ac657600080fd5b50565b6108ff83838360405180602001604052806000815250610f32565b600080546001600160801b031681805b82811015610b7557600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff16151591810182905290610b6c5785831415610b655750949350505050565b6001909201915b50600101610af4565b506040516329c8c00760e21b815260040160405180910390fd5b6007546001600160a01b03163314610bb95760405162461bcd60e51b81526004016106f690611e12565b8051610bcc90600890602084019061196c565b5050565b6007546001600160a01b03163314610bfa5760405162461bcd60e51b81526004016106f690611e12565b600c5460ff16610c1357600c805460ff19166001179055565b600c805460ff191690555b565b6000610c2b8261143e565b5192915050565b600880546107f590611ed5565b60006001600160a01b038216610c68576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b6007546001600160a01b03163314610cb85760405162461bcd60e51b81526004016106f690611e12565b610c1e6000611562565b6007546001600160a01b03163314610cec5760405162461bcd60e51b81526004016106f690611e12565b601055565b6007546001600160a01b03163314610d1b5760405162461bcd60e51b81526004016106f690611e12565b600d55565b60606002805461072190611ed5565b600a5481610d3b610904565b610d459190611e47565b1115610d8c5760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016106f6565b6007546001600160a01b03163314610e925760095460ff1615610dea5760405162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b60448201526064016106f6565b60105481610df733610c3f565b610e019190611e47565b1115610e0c57600080fd5b600f5481610e18610904565b610e229190611e47565b11610e3d5780600e54610e359190611e47565b600e55610e92565b80600d54610e4b9190611e73565b341015610e925760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08195d1a195c881cd95b9d605a1b60448201526064016106f6565b610ac633826115b4565b6001600160a01b038216331415610ec65760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f3d84848461121f565b610f49848484846115ce565b610f66576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060610f778261118f565b610f9457604051630a14c4b560e41b815260040160405180910390fd5b600c5460ff1661103057600b8054610fab90611ed5565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd790611ed5565b80156110245780601f10610ff957610100808354040283529160200191611024565b820191906000526020600020905b81548152906001019060200180831161100757829003601f168201915b50505050509050919050565b6008805461103d90611ed5565b1515905061105a57604051806020016040528060008152506106c6565b6008611065836116dd565b604051602001611076929190611d07565b60405160208183030381529060405292915050565b6007546001600160a01b031633146110b55760405162461bcd60e51b81526004016106f690611e12565b600f55565b6007546001600160a01b031633146110e45760405162461bcd60e51b81526004016106f690611e12565b8051610bcc90600b90602084019061196c565b6007546001600160a01b031633146111215760405162461bcd60e51b81526004016106f690611e12565b6001600160a01b0381166111865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106f6565b610ac681611562565b600080546001600160801b0316821080156106c6575050600090815260036020526040902054600160e01b900460ff161590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061122a8261143e565b80519091506000906001600160a01b0316336001600160a01b031614806112585750815161125890336105db565b80611273575033611268846107a4565b6001600160a01b0316145b90508061129357604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146112c85760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166112ef57604051633a954ecd60e21b815260040160405180910390fd5b6112ff60008484600001516111c3565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166113f4576000546001600160801b03168110156113f4578251600082815260036020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b60408051606081018252600080825260208201819052918101829052905482906001600160801b031681101561154957600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906115475780516001600160a01b0316156114dd579392505050565b5060001901600081815260036020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611542579392505050565b6114dd565b505b604051636f96cda160e11b815260040160405180910390fd5b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610bcc8282604051806020016040528060008152506117db565b60006001600160a01b0384163b156116d157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611612903390899088908890600401611dc2565b602060405180830381600087803b15801561162c57600080fd5b505af192505050801561165c575060408051601f3d908101601f1916820190925261165991810190611c40565b60015b6116b7573d80801561168a576040519150601f19603f3d011682016040523d82523d6000602084013e61168f565b606091505b5080516116af576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116d5565b5060015b949350505050565b6060816117015750506040805180820190915260018152600360fc1b602082015290565b8160005b811561172b578061171581611f10565b91506117249050600a83611e5f565b9150611705565b60008167ffffffffffffffff81111561174657611746611f81565b6040519080825280601f01601f191660200182016040528015611770576020820181803683370190505b5090505b84156116d557611785600183611e92565b9150611792600a86611f2b565b61179d906030611e47565b60f81b8183815181106117b2576117b2611f6b565b60200101906001600160f81b031916908160001a9053506117d4600a86611e5f565b9450611774565b6108ff83838360016000546001600160801b03166001600160a01b03851661181557604051622e076360e81b815260040160405180910390fd5b836118335760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546001600160801b0319811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c018116909202179091558584526003909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b858110156119465760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a483801561191c575061191a60008884886115ce565b155b1561193a576040516368d2bf6b60e11b815260040160405180910390fd5b600191820191016118c5565b50600080546001600160801b0319166001600160801b0392909216919091179055611437565b82805461197890611ed5565b90600052602060002090601f01602090048101928261199a57600085556119e0565b82601f106119b357805160ff19168380011785556119e0565b828001600101855582156119e0579182015b828111156119e05782518255916020019190600101906119c5565b506119ec9291506119f0565b5090565b5b808211156119ec57600081556001016119f1565b600067ffffffffffffffff80841115611a2057611a20611f81565b604051601f8501601f19908116603f01168101908282118183101715611a4857611a48611f81565b81604052809350858152868686011115611a6157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611a9257600080fd5b919050565b80358015158114611a9257600080fd5b600060208284031215611ab957600080fd5b611ac282611a7b565b9392505050565b60008060408385031215611adc57600080fd5b611ae583611a7b565b9150611af360208401611a7b565b90509250929050565b600080600060608486031215611b1157600080fd5b611b1a84611a7b565b9250611b2860208501611a7b565b9150604084013590509250925092565b60008060008060808587031215611b4e57600080fd5b611b5785611a7b565b9350611b6560208601611a7b565b925060408501359150606085013567ffffffffffffffff811115611b8857600080fd5b8501601f81018713611b9957600080fd5b611ba887823560208401611a05565b91505092959194509250565b60008060408385031215611bc757600080fd5b611bd083611a7b565b9150611af360208401611a97565b60008060408385031215611bf157600080fd5b611bfa83611a7b565b946020939093013593505050565b600060208284031215611c1a57600080fd5b611ac282611a97565b600060208284031215611c3557600080fd5b8135611ac281611f97565b600060208284031215611c5257600080fd5b8151611ac281611f97565b600060208284031215611c6f57600080fd5b813567ffffffffffffffff811115611c8657600080fd5b8201601f81018413611c9757600080fd5b6116d584823560208401611a05565b600060208284031215611cb857600080fd5b5035919050565b60008151808452611cd7816020860160208601611ea9565b601f01601f19169290920160200192915050565b60008151611cfd818560208601611ea9565b9290920192915050565b600080845481600182811c915080831680611d2357607f831692505b6020808410821415611d4357634e487b7160e01b86526022600452602486fd5b818015611d575760018114611d6857611d95565b60ff19861689528489019650611d95565b60008b81526020902060005b86811015611d8d5781548b820152908501908301611d74565b505084890196505b505050505050611db9611da88286611ceb565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611df590830184611cbf565b9695505050505050565b602081526000611ac26020830184611cbf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611e5a57611e5a611f3f565b500190565b600082611e6e57611e6e611f55565b500490565b6000816000190483118215151615611e8d57611e8d611f3f565b500290565b600082821015611ea457611ea4611f3f565b500390565b60005b83811015611ec4578181015183820152602001611eac565b83811115610f665750506000910152565b600181811c90821680611ee957607f821691505b60208210811415611f0a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611f2457611f24611f3f565b5060010190565b600082611f3a57611f3a611f55565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610ac657600080fdfea2646970667358221220bdf912ac1f160dd6ab8fb77e2d5e7faf249edf61722dc1badcf15db3e1dd7a9b64736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d59526a57635547444732574d6e5a5662335852465a514c654c684572786e703863333563543662653754636d2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061020f5760003560e01c80635c975abb11610118578063a0712d68116100a0578063d494be8a1161006f578063d494be8a146105a0578063e985e9c5146105c0578063eab2530b14610609578063f2c4ce1e1461061f578063f2fde38b1461063f57600080fd5b8063a0712d681461052d578063a22cb46514610540578063b88d4fde14610560578063c87b56dd1461058057600080fd5b8063715018a6116100e7578063715018a6146104a55780637cbf1f87146104ba5780638da5cb5b146104da5780638dbb7c06146104f857806395d89b411461051857600080fd5b80635c975abb146104365780636352211e146104505780636c0360eb1461047057806370a082311461048557600080fd5b80632f745c591161019b5780634da737071161016a5780634da73707146103b15780634f6ccce7146103c757806351830227146103e757806355f804b3146104015780635b8ad4291461042157600080fd5b80632f745c59146103535780633ccfd60b1461037357806342842e0e1461037b578063453afb0f1461039b57600080fd5b8063081c8c44116101e2578063081c8c44146102c5578063095ea7b3146102da5780631124498b146102fa57806318160ddd1461031e57806323b872dd1461033357600080fd5b806301ffc9a71461021457806302329a291461024957806306fdde031461026b578063081812fc1461028d575b600080fd5b34801561022057600080fd5b5061023461022f366004611c23565b61065f565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b50610269610264366004611c08565b6106cc565b005b34801561027757600080fd5b50610280610712565b6040516102409190611dff565b34801561029957600080fd5b506102ad6102a8366004611ca6565b6107a4565b6040516001600160a01b039091168152602001610240565b3480156102d157600080fd5b506102806107e8565b3480156102e657600080fd5b506102696102f5366004611bde565b610876565b34801561030657600080fd5b5061031060105481565b604051908152602001610240565b34801561032a57600080fd5b50610310610904565b34801561033f57600080fd5b5061026961034e366004611afc565b610923565b34801561035f57600080fd5b5061031061036e366004611bde565b61092e565b610269610a2b565b34801561038757600080fd5b50610269610396366004611afc565b610ac9565b3480156103a757600080fd5b50610310600d5481565b3480156103bd57600080fd5b50610310600e5481565b3480156103d357600080fd5b506103106103e2366004611ca6565b610ae4565b3480156103f357600080fd5b50600c546102349060ff1681565b34801561040d57600080fd5b5061026961041c366004611c5d565b610b8f565b34801561042d57600080fd5b50610269610bd0565b34801561044257600080fd5b506009546102349060ff1681565b34801561045c57600080fd5b506102ad61046b366004611ca6565b610c20565b34801561047c57600080fd5b50610280610c32565b34801561049157600080fd5b506103106104a0366004611aa7565b610c3f565b3480156104b157600080fd5b50610269610c8e565b3480156104c657600080fd5b506102696104d5366004611ca6565b610cc2565b3480156104e657600080fd5b506007546001600160a01b03166102ad565b34801561050457600080fd5b50610269610513366004611ca6565b610cf1565b34801561052457600080fd5b50610280610d20565b61026961053b366004611ca6565b610d2f565b34801561054c57600080fd5b5061026961055b366004611bb4565b610e9c565b34801561056c57600080fd5b5061026961057b366004611b38565b610f32565b34801561058c57600080fd5b5061028061059b366004611ca6565b610f6c565b3480156105ac57600080fd5b506102696105bb366004611ca6565b61108b565b3480156105cc57600080fd5b506102346105db366004611ac9565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561061557600080fd5b50610310600f5481565b34801561062b57600080fd5b5061026961063a366004611c5d565b6110ba565b34801561064b57600080fd5b5061026961065a366004611aa7565b6110f7565b60006001600160e01b031982166380ac58cd60e01b148061069057506001600160e01b03198216635b5e139f60e01b145b806106ab57506001600160e01b0319821663780e9d6360e01b145b806106c657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146106ff5760405162461bcd60e51b81526004016106f690611e12565b60405180910390fd5b6009805460ff1916911515919091179055565b60606001805461072190611ed5565b80601f016020809104026020016040519081016040528092919081815260200182805461074d90611ed5565b801561079a5780601f1061076f5761010080835404028352916020019161079a565b820191906000526020600020905b81548152906001019060200180831161077d57829003601f168201915b5050505050905090565b60006107af8261118f565b6107cc576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600b80546107f590611ed5565b80601f016020809104026020016040519081016040528092919081815260200182805461082190611ed5565b801561086e5780601f106108435761010080835404028352916020019161086e565b820191906000526020600020905b81548152906001019060200180831161085157829003601f168201915b505050505081565b600061088182610c20565b9050806001600160a01b0316836001600160a01b031614156108b65760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906108d657506108d481336105db565b155b156108f4576040516367d9dca160e11b815260040160405180910390fd5b6108ff8383836111c3565b505050565b6000546001600160801b03600160801b82048116918116919091031690565b6108ff83838361121f565b600061093983610c3f565b8210610958576040516306ed618760e11b815260040160405180910390fd5b600080546001600160801b03169080805b83811015610a2557600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615801592820192909252906109d15750610a1d565b80516001600160a01b0316156109e657805192505b876001600160a01b0316836001600160a01b03161415610a1b5786841415610a14575093506106c692505050565b6001909301925b505b600101610969565b50600080fd5b6007546001600160a01b03163314610a555760405162461bcd60e51b81526004016106f690611e12565b6000610a696007546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ab3576040519150601f19603f3d011682016040523d82523d6000602084013e610ab8565b606091505b5050905080610ac657600080fd5b50565b6108ff83838360405180602001604052806000815250610f32565b600080546001600160801b031681805b82811015610b7557600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff16151591810182905290610b6c5785831415610b655750949350505050565b6001909201915b50600101610af4565b506040516329c8c00760e21b815260040160405180910390fd5b6007546001600160a01b03163314610bb95760405162461bcd60e51b81526004016106f690611e12565b8051610bcc90600890602084019061196c565b5050565b6007546001600160a01b03163314610bfa5760405162461bcd60e51b81526004016106f690611e12565b600c5460ff16610c1357600c805460ff19166001179055565b600c805460ff191690555b565b6000610c2b8261143e565b5192915050565b600880546107f590611ed5565b60006001600160a01b038216610c68576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b6007546001600160a01b03163314610cb85760405162461bcd60e51b81526004016106f690611e12565b610c1e6000611562565b6007546001600160a01b03163314610cec5760405162461bcd60e51b81526004016106f690611e12565b601055565b6007546001600160a01b03163314610d1b5760405162461bcd60e51b81526004016106f690611e12565b600d55565b60606002805461072190611ed5565b600a5481610d3b610904565b610d459190611e47565b1115610d8c5760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016106f6565b6007546001600160a01b03163314610e925760095460ff1615610dea5760405162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b60448201526064016106f6565b60105481610df733610c3f565b610e019190611e47565b1115610e0c57600080fd5b600f5481610e18610904565b610e229190611e47565b11610e3d5780600e54610e359190611e47565b600e55610e92565b80600d54610e4b9190611e73565b341015610e925760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08195d1a195c881cd95b9d605a1b60448201526064016106f6565b610ac633826115b4565b6001600160a01b038216331415610ec65760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f3d84848461121f565b610f49848484846115ce565b610f66576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060610f778261118f565b610f9457604051630a14c4b560e41b815260040160405180910390fd5b600c5460ff1661103057600b8054610fab90611ed5565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd790611ed5565b80156110245780601f10610ff957610100808354040283529160200191611024565b820191906000526020600020905b81548152906001019060200180831161100757829003601f168201915b50505050509050919050565b6008805461103d90611ed5565b1515905061105a57604051806020016040528060008152506106c6565b6008611065836116dd565b604051602001611076929190611d07565b60405160208183030381529060405292915050565b6007546001600160a01b031633146110b55760405162461bcd60e51b81526004016106f690611e12565b600f55565b6007546001600160a01b031633146110e45760405162461bcd60e51b81526004016106f690611e12565b8051610bcc90600b90602084019061196c565b6007546001600160a01b031633146111215760405162461bcd60e51b81526004016106f690611e12565b6001600160a01b0381166111865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106f6565b610ac681611562565b600080546001600160801b0316821080156106c6575050600090815260036020526040902054600160e01b900460ff161590565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061122a8261143e565b80519091506000906001600160a01b0316336001600160a01b031614806112585750815161125890336105db565b80611273575033611268846107a4565b6001600160a01b0316145b90508061129357604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146112c85760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166112ef57604051633a954ecd60e21b815260040160405180910390fd5b6112ff60008484600001516111c3565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166113f4576000546001600160801b03168110156113f4578251600082815260036020908152604090912080549186015167ffffffffffffffff16600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b60408051606081018252600080825260208201819052918101829052905482906001600160801b031681101561154957600081815260036020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906115475780516001600160a01b0316156114dd579392505050565b5060001901600081815260036020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611542579392505050565b6114dd565b505b604051636f96cda160e11b815260040160405180910390fd5b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610bcc8282604051806020016040528060008152506117db565b60006001600160a01b0384163b156116d157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611612903390899088908890600401611dc2565b602060405180830381600087803b15801561162c57600080fd5b505af192505050801561165c575060408051601f3d908101601f1916820190925261165991810190611c40565b60015b6116b7573d80801561168a576040519150601f19603f3d011682016040523d82523d6000602084013e61168f565b606091505b5080516116af576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116d5565b5060015b949350505050565b6060816117015750506040805180820190915260018152600360fc1b602082015290565b8160005b811561172b578061171581611f10565b91506117249050600a83611e5f565b9150611705565b60008167ffffffffffffffff81111561174657611746611f81565b6040519080825280601f01601f191660200182016040528015611770576020820181803683370190505b5090505b84156116d557611785600183611e92565b9150611792600a86611f2b565b61179d906030611e47565b60f81b8183815181106117b2576117b2611f6b565b60200101906001600160f81b031916908160001a9053506117d4600a86611e5f565b9450611774565b6108ff83838360016000546001600160801b03166001600160a01b03851661181557604051622e076360e81b815260040160405180910390fd5b836118335760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546001600160801b0319811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c018116909202179091558584526003909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b858110156119465760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a483801561191c575061191a60008884886115ce565b155b1561193a576040516368d2bf6b60e11b815260040160405180910390fd5b600191820191016118c5565b50600080546001600160801b0319166001600160801b0392909216919091179055611437565b82805461197890611ed5565b90600052602060002090601f01602090048101928261199a57600085556119e0565b82601f106119b357805160ff19168380011785556119e0565b828001600101855582156119e0579182015b828111156119e05782518255916020019190600101906119c5565b506119ec9291506119f0565b5090565b5b808211156119ec57600081556001016119f1565b600067ffffffffffffffff80841115611a2057611a20611f81565b604051601f8501601f19908116603f01168101908282118183101715611a4857611a48611f81565b81604052809350858152868686011115611a6157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611a9257600080fd5b919050565b80358015158114611a9257600080fd5b600060208284031215611ab957600080fd5b611ac282611a7b565b9392505050565b60008060408385031215611adc57600080fd5b611ae583611a7b565b9150611af360208401611a7b565b90509250929050565b600080600060608486031215611b1157600080fd5b611b1a84611a7b565b9250611b2860208501611a7b565b9150604084013590509250925092565b60008060008060808587031215611b4e57600080fd5b611b5785611a7b565b9350611b6560208601611a7b565b925060408501359150606085013567ffffffffffffffff811115611b8857600080fd5b8501601f81018713611b9957600080fd5b611ba887823560208401611a05565b91505092959194509250565b60008060408385031215611bc757600080fd5b611bd083611a7b565b9150611af360208401611a97565b60008060408385031215611bf157600080fd5b611bfa83611a7b565b946020939093013593505050565b600060208284031215611c1a57600080fd5b611ac282611a97565b600060208284031215611c3557600080fd5b8135611ac281611f97565b600060208284031215611c5257600080fd5b8151611ac281611f97565b600060208284031215611c6f57600080fd5b813567ffffffffffffffff811115611c8657600080fd5b8201601f81018413611c9757600080fd5b6116d584823560208401611a05565b600060208284031215611cb857600080fd5b5035919050565b60008151808452611cd7816020860160208601611ea9565b601f01601f19169290920160200192915050565b60008151611cfd818560208601611ea9565b9290920192915050565b600080845481600182811c915080831680611d2357607f831692505b6020808410821415611d4357634e487b7160e01b86526022600452602486fd5b818015611d575760018114611d6857611d95565b60ff19861689528489019650611d95565b60008b81526020902060005b86811015611d8d5781548b820152908501908301611d74565b505084890196505b505050505050611db9611da88286611ceb565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611df590830184611cbf565b9695505050505050565b602081526000611ac26020830184611cbf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115611e5a57611e5a611f3f565b500190565b600082611e6e57611e6e611f55565b500490565b6000816000190483118215151615611e8d57611e8d611f3f565b500290565b600082821015611ea457611ea4611f3f565b500390565b60005b83811015611ec4578181015183820152602001611eac565b83811115610f665750506000910152565b600181811c90821680611ee957607f821691505b60208210811415611f0a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611f2457611f24611f3f565b5060010190565b600082611f3a57611f3a611f55565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610ac657600080fdfea2646970667358221220bdf912ac1f160dd6ab8fb77e2d5e7faf249edf61722dc1badcf15db3e1dd7a9b64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d59526a57635547444732574d6e5a5662335852465a514c654c684572786e703863333563543662653754636d2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmYRjWcUGDG2WMnZVb3XRFZQLeLhErxnp8c35cT6be7Tcm/
Arg [1] : _initNotRevealedUri (string):
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d59526a57635547444732574d6e5a5662335852465a514c
Arg [4] : 654c684572786e703863333563543662653754636d2f00000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
110:2893:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6211:372:3;;;;;;;;;;-1:-1:-1;6211:372:3;;;;;:::i;:::-;;:::i;:::-;;;7252:14:12;;7245:22;7227:41;;7215:2;7200:18;6211:372:3;;;;;;;;2912:79:9;;;;;;;;;;-1:-1:-1;2912:79:9;;;;;:::i;:::-;;:::i;:::-;;8821:100:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10324:204::-;;;;;;;;;;-1:-1:-1;10324:204:3;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6550:32:12;;;6532:51;;6520:2;6505:18;10324:204:3;6386:203:12;291:28:9;;;;;;;;;;;;;:::i;9887:371:3:-;;;;;;;;;;-1:-1:-1;9887:371:3;;;;;:::i;:::-;;:::i;510:36:9:-;;;;;;;;;;;;;;;;;;;9469:25:12;;;9457:2;9442:18;510:36:9;9323:177:12;3448:280:3;;;;;;;;;;;;;:::i;11181:170::-;;;;;;;;;;-1:-1:-1;11181:170:3;;;;;:::i;:::-;;:::i;5034:1105::-;;;;;;;;;;-1:-1:-1;5034:1105:3;;;;;:::i;:::-;;:::i;2245:156:9:-;;;:::i;11422:185:3:-;;;;;;;;;;-1:-1:-1;11422:185:3;;;;;:::i;:::-;;:::i;368:44:9:-;;;;;;;;;;;;;;;;421:38;;;;;;;;;;;;;;;;4021:713:3;;;;;;;;;;-1:-1:-1;4021:713:3;;;;;:::i;:::-;;:::i;332:27:9:-;;;;;;;;;;-1:-1:-1;332:27:9;;;;;;;;2801:103;;;;;;;;;;-1:-1:-1;2801:103:9;;;;;:::i;:::-;;:::i;1920:177::-;;;;;;;;;;;;;:::i;223:26::-;;;;;;;;;;-1:-1:-1;223:26:9;;;;;;;;8630:124:3;;;;;;;;;;-1:-1:-1;8630:124:3;;;;;:::i;:::-;;:::i;193:21:9:-;;;;;;;;;;;;;:::i;6647:206:3:-;;;;;;;;;;-1:-1:-1;6647:206:3;;;;;:::i;:::-;;:::i;1712:103:10:-;;;;;;;;;;;;;:::i;2541:128:9:-;;;;;;;;;;-1:-1:-1;2541:128:9;;;;;:::i;:::-;;:::i;1061:87:10:-;;;;;;;;;;-1:-1:-1;1134:6:10;;-1:-1:-1;;;;;1134:6:10;1061:87;;2413:120:9;;;;;;;;;;-1:-1:-1;2413:120:9;;;;;:::i;:::-;;:::i;8990:104:3:-;;;;;;;;;;;;;:::i;762:643:9:-;;;;;;:::i;:::-;;:::i;10600:279:3:-;;;;;;;;;;-1:-1:-1;10600:279:3;;;;;:::i;:::-;;:::i;11678:342::-;;;;;;;;;;-1:-1:-1;11678:342:3;;;;;:::i;:::-;;:::i;1413:361:9:-;;;;;;;;;;-1:-1:-1;1413:361:9;;;;;:::i;:::-;;:::i;2677:116::-;;;;;;;;;;-1:-1:-1;2677:116:9;;;;;:::i;:::-;;:::i;10950:164:3:-;;;;;;;;;;-1:-1:-1;10950:164:3;;;;;:::i;:::-;-1:-1:-1;;;;;11071:25:3;;;11047:4;11071:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10950:164;466:35:9;;;;;;;;;;;;;;;;2108:126;;;;;;;;;;-1:-1:-1;2108:126:9;;;;;:::i;:::-;;:::i;1970:201:10:-;;;;;;;;;;-1:-1:-1;1970:201:10;;;;;:::i;:::-;;:::i;6211:372:3:-;6313:4;-1:-1:-1;;;;;;6350:40:3;;-1:-1:-1;;;6350:40:3;;:105;;-1:-1:-1;;;;;;;6407:48:3;;-1:-1:-1;;;6407:48:3;6350:105;:172;;;-1:-1:-1;;;;;;;6472:50:3;;-1:-1:-1;;;6472:50:3;6350:172;:225;;;-1:-1:-1;;;;;;;;;;961:40:2;;;6539:36:3;6330:245;6211:372;-1:-1:-1;;6211:372:3:o;2912:79:9:-;1134:6:10;;-1:-1:-1;;;;;1134:6:10;736:10:1;1281:23:10;1273:68;;;;-1:-1:-1;;;1273:68:10;;;;;;;:::i;:::-;;;;;;;;;2968:6:9::1;:15:::0;;-1:-1:-1;;2968:15:9::1;::::0;::::1;;::::0;;;::::1;::::0;;2912:79::o;8821:100:3:-;8875:13;8908:5;8901:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8821:100;:::o;10324:204::-;10392:7;10417:16;10425:7;10417;:16::i;:::-;10412:64;;10442:34;;-1:-1:-1;;;10442:34:3;;;;;;;;;;;10412:64;-1:-1:-1;10496:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;10496:24:3;;10324:204::o;291:28:9:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9887:371:3:-;9960:13;9976:24;9992:7;9976:15;:24::i;:::-;9960:40;;10021:5;-1:-1:-1;;;;;10015:11:3;:2;-1:-1:-1;;;;;10015:11:3;;10011:48;;;10035:24;;-1:-1:-1;;;10035:24:3;;;;;;;;;;;10011:48;736:10:1;-1:-1:-1;;;;;10076:21:3;;;;;;:63;;-1:-1:-1;10102:37:3;10119:5;736:10:1;10950:164:3;:::i;10102:37::-;10101:38;10076:63;10072:138;;;10163:35;;-1:-1:-1;;;10163:35:3;;;;;;;;;;;10072:138;10222:28;10231:2;10235:7;10244:5;10222:8;:28::i;:::-;9949:309;9887:371;;:::o;3448:280::-;3501:7;3693:12;-1:-1:-1;;;;;;;;3693:12:3;;;;3677:13;;;:28;;;;3670:35;;3448:280::o;11181:170::-;11315:28;11325:4;11331:2;11335:7;11315:9;:28::i;5034:1105::-;5123:7;5156:16;5166:5;5156:9;:16::i;:::-;5147:5;:25;5143:61;;5181:23;;-1:-1:-1;;;5181:23:3;;;;;;;;;;;5143:61;5215:22;5240:13;;-1:-1:-1;;;;;5240:13:3;;5215:22;;5490:557;5510:14;5506:1;:18;5490:557;;;5550:31;5584:14;;;:11;:14;;;;;;;;;5550:48;;;;;;;;;-1:-1:-1;;;;;5550:48:3;;;;-1:-1:-1;;;5550:48:3;;;;;;;;;;;-1:-1:-1;;;5550:48:3;;;;;;;;;;;;;;;;5617:73;;5662:8;;;5617:73;5712:14;;-1:-1:-1;;;;;5712:28:3;;5708:111;;5785:14;;;-1:-1:-1;5708:111:3;5862:5;-1:-1:-1;;;;;5841:26:3;:17;-1:-1:-1;;;;;5841:26:3;;5837:195;;;5911:5;5896:11;:20;5892:85;;;-1:-1:-1;5952:1:3;-1:-1:-1;5945:8:3;;-1:-1:-1;;;5945:8:3;5892:85;5999:13;;;;;5837:195;5531:516;5490:557;5526:3;;5490:557;;;;6123:8;;;2245:156:9;1134:6:10;;-1:-1:-1;;;;;1134:6:10;736:10:1;1281:23:10;1273:68;;;;-1:-1:-1;;;1273:68:10;;;;;;;:::i;:::-;2300:10:9::1;2324:7;1134:6:10::0;;-1:-1:-1;;;;;1134:6:10;;1061:87;2324:7:9::1;-1:-1:-1::0;;;;;2316:21:9::1;2344;2316:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2299:71;;;2385:5;2377:14;;;::::0;::::1;;2290:111;2245:156::o:0;11422:185:3:-;11560:39;11577:4;11583:2;11587:7;11560:39;;;;;;;;;;;;:16;:39::i;4021:713::-;4088:7;4133:13;;-1:-1:-1;;;;;4133:13:3;4088:7;;4347:328;4367:14;4363:1;:18;4347:328;;;4407:31;4441:14;;;:11;:14;;;;;;;;;4407:48;;;;;;;;;-1:-1:-1;;;;;4407:48:3;;;;-1:-1:-1;;;4407:48:3;;;;;;;;;;;-1:-1:-1;;;4407:48:3;;;;;;;;;;;;;;4474:186;;4539:5;4524:11;:20;4520:85;;;-1:-1:-1;4580:1:3;4021:713;-1:-1:-1;;;;4021:713:3:o;4520:85::-;4627:13;;;;;4474:186;-1:-1:-1;4383:3:3;;4347:328;;;;4703:23;;-1:-1:-1;;;4703:23:3;;;;;;;;;;;2801:103:9;1134:6:10;;-1:-1:-1;;;;;1134:6:10;736:10:1;1281:23:10;1273:68;;;;-1:-1:-1;;;1273:68:10;;;;;;;:::i;:::-;2876:21:9;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;2801:103:::0;:::o;1920:177::-;1134:6:10;;-1:-1:-1;;;;;1134:6:10;736:10:1;1281:23:10;1273:68;;;;-1:-1:-1;;;1273:68:10;;;;;;;:::i;:::-;1985:8:9::1;::::0;::::1;;1982:108;;2016:8;:15:::0;;-1:-1:-1;;2016:15:9::1;2027:4;2016:15;::::0;;1920:177::o;1982:108::-:1;2062:8;:16:::0;;-1:-1:-1;;2062:16:9::1;::::0;;1982:108:::1;1920:177::o:0;8630:124:3:-;8694:7;8721:20;8733:7;8721:11;:20::i;:::-;:25;;8630:124;-1:-1:-1;;8630:124:3:o;193:21:9:-;;;;;;;:::i;6647:206:3:-;6711:7;-1:-1:-1;;;;;6735:19:3;;6731:60;;6763:28;;-1:-1:-1;;;6763:28:3;;;;;;;;;;;6731:60;-1:-1:-1;;;;;;6817:19:3;;;;;:12;:19;;;;;:27;;;;6647:206::o;1712:103:10:-;1134:6;;-1:-1:-1;;;;;1134:6:10;736:10:1;1281:23:10;1273:68;;;;-1:-1:-1;;;1273:68:10;;;;;;;:::i;:::-;1777:30:::1;1804:1;1777:18;:30::i;2541:128:9:-:0;1134:6:10;;-1:-1:-1;;;;;1134:6:10;736:10:1;1281:23:10;1273:68;;;;-1:-1:-1;;;1273:68:10;;;;;;;:::i;:::-;2625:16:9::1;:36:::0;2541:128::o;2413:120::-;1134:6:10;;-1:-1:-1;;;;;1134:6:10;736:10:1;1281:23:10;1273:68;;;;-1:-1:-1;;;1273:68:10;;;;;;;:::i;:::-;2493:14:9::1;:32:::0;2413:120::o;8990:104:3:-;9046:13;9079:7;9072:14;;;;;:::i;762:643:9:-;857:10;;845:8;829:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;821:73;;;;-1:-1:-1;;;821:73:9;;8112:2:12;821:73:9;;;8094:21:12;8151:2;8131:18;;;8124:30;-1:-1:-1;;;8170:18:12;;;8163:52;8232:18;;821:73:9;7910:346:12;821:73:9;1134:6:10;;-1:-1:-1;;;;;1134:6:10;911:10:9;:21;907:447;;958:6;;;;957:7;949:42;;;;-1:-1:-1;;;949:42:9;;8824:2:12;949:42:9;;;8806:21:12;8863:2;8843:18;;;8836:30;-1:-1:-1;;;8882:18:12;;;8875:52;8944:18;;949:42:9;8622:346:12;949:42:9;1050:16;;1038:8;1014:21;1024:10;1014:9;:21::i;:::-;:32;;;;:::i;:::-;:52;;1006:61;;;;;;1115:13;;1103:8;1087:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;1084:259;;1198:8;1172:23;;:34;;;;:::i;:::-;1146:23;:60;1084:259;;;1280:8;1263:14;;:25;;;;:::i;:::-;1249:9;:40;;1241:74;;;;-1:-1:-1;;;1241:74:9;;9175:2:12;1241:74:9;;;9157:21:12;9214:2;9194:18;;;9187:30;-1:-1:-1;;;9233:18:12;;;9226:51;9294:18;;1241:74:9;8973:345:12;1241:74:9;1364:31;1374:10;1386:8;1364:9;:31::i;10600:279:3:-;-1:-1:-1;;;;;10691:24:3;;736:10:1;10691:24:3;10687:54;;;10724:17;;-1:-1:-1;;;10724:17:3;;;;;;;;;;;10687:54;736:10:1;10754:32:3;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;10754:42:3;;;;;;;;;;;;:53;;-1:-1:-1;;10754:53:3;;;;;;;;;;10823:48;;7227:41:12;;;10754:42:3;;736:10:1;10823:48:3;;7200:18:12;10823:48:3;;;;;;;10600:279;;:::o;11678:342::-;11845:28;11855:4;11861:2;11865:7;11845:9;:28::i;:::-;11889:48;11912:4;11918:2;11922:7;11931:5;11889:22;:48::i;:::-;11884:129;;11961:40;;-1:-1:-1;;;11961:40:3;;;;;;;;;;;11884:129;11678:342;;;;:::o;1413:361:9:-;1486:13;1517:16;1525:7;1517;:16::i;:::-;1512:59;;1542:29;;-1:-1:-1;;;1542:29:9;;;;;;;;;;;1512:59;1583:8;;;;1580:66;;1620:14;1613:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1413:361;;;:::o;1580:66::-;1677:7;1671:21;;;;;:::i;:::-;:26;;;-1:-1:-1;1671:95:9;;;;;;;;;;;;;;;;;1724:7;1733:18;:7;:16;:18::i;:::-;1707:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1664:102;1413:361;-1:-1:-1;;1413:361:9:o;2677:116::-;1134:6:10;;-1:-1:-1;;;;;1134:6:10;736:10:1;1281:23:10;1273:68;;;;-1:-1:-1;;;1273:68:10;;;;;;;:::i;:::-;2755:13:9::1;:30:::0;2677:116::o;2108:126::-;1134:6:10;;-1:-1:-1;;;;;1134:6:10;736:10:1;1281:23:10;1273:68;;;;-1:-1:-1;;;1273:68:10;;;;;;;:::i;:::-;2194:32:9;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;1970:201:10:-:0;1134:6;;-1:-1:-1;;;;;1134:6:10;736:10:1;1281:23:10;1273:68;;;;-1:-1:-1;;;1273:68:10;;;;;;;:::i;:::-;-1:-1:-1;;;;;2059:22:10;::::1;2051:73;;;::::0;-1:-1:-1;;;2051:73:10;;7705:2:12;2051:73:10::1;::::0;::::1;7687:21:12::0;7744:2;7724:18;;;7717:30;7783:34;7763:18;;;7756:62;-1:-1:-1;;;7834:18:12;;;7827:36;7880:19;;2051:73:10::1;7503:402:12::0;2051:73:10::1;2135:28;2154:8;2135:18;:28::i;12275:144:3:-:0;12332:4;12366:13;;-1:-1:-1;;;;;12366:13:3;12356:23;;:55;;;;-1:-1:-1;;12384:20:3;;;;:11;:20;;;;;:27;-1:-1:-1;;;12384:27:3;;;;12383:28;;12275:144::o;19491:196::-;19606:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;19606:29:3;-1:-1:-1;;;;;19606:29:3;;;;;;;;;19651:28;;19606:24;;19651:28;;;;;;;19491:196;;;:::o;14992:2112::-;15107:35;15145:20;15157:7;15145:11;:20::i;:::-;15220:18;;15107:58;;-1:-1:-1;15178:22:3;;-1:-1:-1;;;;;15204:34:3;736:10:1;-1:-1:-1;;;;;15204:34:3;;:101;;;-1:-1:-1;15272:18:3;;15255:50;;736:10:1;10950:164:3;:::i;15255:50::-;15204:154;;;-1:-1:-1;736:10:1;15322:20:3;15334:7;15322:11;:20::i;:::-;-1:-1:-1;;;;;15322:36:3;;15204:154;15178:181;;15377:17;15372:66;;15403:35;;-1:-1:-1;;;15403:35:3;;;;;;;;;;;15372:66;15475:4;-1:-1:-1;;;;;15453:26:3;:13;:18;;;-1:-1:-1;;;;;15453:26:3;;15449:67;;15488:28;;-1:-1:-1;;;15488:28:3;;;;;;;;;;;15449:67;-1:-1:-1;;;;;15531:16:3;;15527:52;;15556:23;;-1:-1:-1;;;15556:23:3;;;;;;;;;;;15527:52;15700:49;15717:1;15721:7;15730:13;:18;;;15700:8;:49::i;:::-;-1:-1:-1;;;;;16045:18:3;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;16045:31:3;;;;;;;-1:-1:-1;;16045:31:3;;;;;;;16091:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;16091:29:3;;;;;;;;;;;16137:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;16182:61:3;;;;-1:-1:-1;;;16227:15:3;16182:61;;;;;;;;;;;16517:11;;;16547:24;;;;;:29;16517:11;;16547:29;16543:445;;16772:13;;-1:-1:-1;;;;;16772:13:3;16758:27;;16754:219;;;16842:18;;;16810:24;;;:11;:24;;;;;;;;:50;;16925:28;;;;16883:70;;-1:-1:-1;;;16883:70:3;-1:-1:-1;;;;;;16883:70:3;;;-1:-1:-1;;;;;16810:50:3;;;16883:70;;;;;;;16754:219;16020:979;17035:7;17031:2;-1:-1:-1;;;;;17016:27:3;17025:4;-1:-1:-1;;;;;17016:27:3;;;;;;;;;;;17054:42;15096:2008;;14992:2112;;;:::o;7485:1083::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;7651:13:3;;7595:7;;-1:-1:-1;;;;;7651:13:3;7644:20;;7640:861;;;7685:31;7719:17;;;:11;:17;;;;;;;;;7685:51;;;;;;;;;-1:-1:-1;;;;;7685:51:3;;;;-1:-1:-1;;;7685:51:3;;;;;;;;;;;-1:-1:-1;;;7685:51:3;;;;;;;;;;;;;;7755:731;;7805:14;;-1:-1:-1;;;;;7805:28:3;;7801:101;;7869:9;7485:1083;-1:-1:-1;;;7485:1083:3:o;7801:101::-;-1:-1:-1;;;8246:6:3;8291:17;;;;:11;:17;;;;;;;;;8279:29;;;;;;;;;-1:-1:-1;;;;;8279:29:3;;;;;-1:-1:-1;;;8279:29:3;;;;;;;;;;;-1:-1:-1;;;8279:29:3;;;;;;;;;;;;;8339:28;8335:109;;8407:9;7485:1083;-1:-1:-1;;;7485:1083:3:o;8335:109::-;8206:261;;;7666:835;7640:861;8529:31;;-1:-1:-1;;;8529:31:3;;;;;;;;;;;2331:191:10;2424:6;;;-1:-1:-1;;;;;2441:17:10;;;-1:-1:-1;;;;;;2441:17:10;;;;;;;2474:40;;2424:6;;;2441:17;2424:6;;2474:40;;2405:16;;2474:40;2394:128;2331:191;:::o;12427:104:3:-;12496:27;12506:2;12510:8;12496:27;;;;;;;;;;;;:9;:27::i;20252:790::-;20407:4;-1:-1:-1;;;;;20428:13:3;;1505:19:0;:23;20424:611:3;;20464:72;;-1:-1:-1;;;20464:72:3;;-1:-1:-1;;;;;20464:36:3;;;;;:72;;736:10:1;;20515:4:3;;20521:7;;20530:5;;20464:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20464:72:3;;;;;;;;-1:-1:-1;;20464:72:3;;;;;;;;;;;;:::i;:::-;;;20460:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20710:13:3;;20706:259;;20760:40;;-1:-1:-1;;;20760:40:3;;;;;;;;;;;20706:259;20915:6;20909:13;20900:6;20896:2;20892:15;20885:38;20460:520;-1:-1:-1;;;;;;20587:55:3;-1:-1:-1;;;20587:55:3;;-1:-1:-1;20580:62:3;;20424:611;-1:-1:-1;21019:4:3;20424:611;20252:790;;;;;;:::o;342:723:11:-;398:13;619:10;615:53;;-1:-1:-1;;646:10:11;;;;;;;;;;;;-1:-1:-1;;;646:10:11;;;;;342:723::o;615:53::-;693:5;678:12;734:78;741:9;;734:78;;767:8;;;;:::i;:::-;;-1:-1:-1;790:10:11;;-1:-1:-1;798:2:11;790:10;;:::i;:::-;;;734:78;;;822:19;854:6;844:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;844:17:11;;822:39;;872:154;879:10;;872:154;;906:11;916:1;906:11;;:::i;:::-;;-1:-1:-1;975:10:11;983:2;975:5;:10;:::i;:::-;962:24;;:2;:24;:::i;:::-;949:39;;932:6;939;932:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;932:56:11;;;;;;;;-1:-1:-1;1003:11:11;1012:2;1003:11;;:::i;:::-;;;872:154;;12894:163:3;13017:32;13023:2;13027:8;13037:5;13044:4;13455:20;13478:13;-1:-1:-1;;;;;13478:13:3;-1:-1:-1;;;;;13506:16:3;;13502:48;;13531:19;;-1:-1:-1;;;13531:19:3;;;;;;;;;;;13502:48;13565:13;13561:44;;13587:18;;-1:-1:-1;;;13587:18:3;;;;;;;;;;;13561:44;-1:-1:-1;;;;;13957:16:3;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;;;;;14016:49:3;;13957:44;;;;;;;;14016:49;;;;-1:-1:-1;;13957:44:3;;;;;;14016:49;;;;;;;;;;;;;;;;14082:25;;;:11;:25;;;;;:35;;-1:-1:-1;;;;;;14132:66:3;;;;-1:-1:-1;;;14182:15:3;14132:66;;;;;;;;;;;14082:25;;14267:328;14287:8;14283:1;:12;14267:328;;;14326:38;;14351:12;;-1:-1:-1;;;;;14326:38:3;;;14343:1;;14326:38;;14343:1;;14326:38;14387:4;:68;;;;;14396:59;14427:1;14431:2;14435:12;14449:5;14396:22;:59::i;:::-;14395:60;14387:68;14383:164;;;14487:40;;-1:-1:-1;;;14487:40:3;;;;;;;;;;;14383:164;14565:14;;;;;14297:3;14267:328;;;-1:-1:-1;14611:13:3;:37;;-1:-1:-1;;;;;;14611:37:3;-1:-1:-1;;;;;14611:37:3;;;;;;;;;;14670:60;11678:342;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:12;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:12;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:12;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:186;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;:::-;1134:39;993:186;-1:-1:-1;;;993:186:12:o;1184:260::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;;1400:38;1434:2;1423:9;1419:18;1400:38;:::i;:::-;1390:48;;1184:260;;;;;:::o;1449:328::-;1526:6;1534;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:52;;;1611:1;1608;1601:12;1563:52;1634:29;1653:9;1634:29;:::i;:::-;1624:39;;1682:38;1716:2;1705:9;1701:18;1682:38;:::i;:::-;1672:48;;1767:2;1756:9;1752:18;1739:32;1729:42;;1449:328;;;;;:::o;1782:666::-;1877:6;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;1994:29;2013:9;1994:29;:::i;:::-;1984:39;;2042:38;2076:2;2065:9;2061:18;2042:38;:::i;:::-;2032:48;;2127:2;2116:9;2112:18;2099:32;2089:42;;2182:2;2171:9;2167:18;2154:32;2209:18;2201:6;2198:30;2195:50;;;2241:1;2238;2231:12;2195:50;2264:22;;2317:4;2309:13;;2305:27;-1:-1:-1;2295:55:12;;2346:1;2343;2336:12;2295:55;2369:73;2434:7;2429:2;2416:16;2411:2;2407;2403:11;2369:73;:::i;:::-;2359:83;;;1782:666;;;;;;;:::o;2453:254::-;2518:6;2526;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2618:29;2637:9;2618:29;:::i;:::-;2608:39;;2666:35;2697:2;2686:9;2682:18;2666:35;:::i;2712:254::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2880:29;2899:9;2880:29;:::i;:::-;2870:39;2956:2;2941:18;;;;2928:32;;-1:-1:-1;;;2712:254:12:o;2971:180::-;3027:6;3080:2;3068:9;3059:7;3055:23;3051:32;3048:52;;;3096:1;3093;3086:12;3048:52;3119:26;3135:9;3119:26;:::i;3156:245::-;3214:6;3267:2;3255:9;3246:7;3242:23;3238:32;3235:52;;;3283:1;3280;3273:12;3235:52;3322:9;3309:23;3341:30;3365:5;3341:30;:::i;3406:249::-;3475:6;3528:2;3516:9;3507:7;3503:23;3499:32;3496:52;;;3544:1;3541;3534:12;3496:52;3576:9;3570:16;3595:30;3619:5;3595:30;:::i;3660:450::-;3729:6;3782:2;3770:9;3761:7;3757:23;3753:32;3750:52;;;3798:1;3795;3788:12;3750:52;3838:9;3825:23;3871:18;3863:6;3860:30;3857:50;;;3903:1;3900;3893:12;3857:50;3926:22;;3979:4;3971:13;;3967:27;-1:-1:-1;3957:55:12;;4008:1;4005;3998:12;3957:55;4031:73;4096:7;4091:2;4078:16;4073:2;4069;4065:11;4031:73;:::i;4115:180::-;4174:6;4227:2;4215:9;4206:7;4202:23;4198:32;4195:52;;;4243:1;4240;4233:12;4195:52;-1:-1:-1;4266:23:12;;4115:180;-1:-1:-1;4115:180:12:o;4300:257::-;4341:3;4379:5;4373:12;4406:6;4401:3;4394:19;4422:63;4478:6;4471:4;4466:3;4462:14;4455:4;4448:5;4444:16;4422:63;:::i;:::-;4539:2;4518:15;-1:-1:-1;;4514:29:12;4505:39;;;;4546:4;4501:50;;4300:257;-1:-1:-1;;4300:257:12:o;4562:185::-;4604:3;4642:5;4636:12;4657:52;4702:6;4697:3;4690:4;4683:5;4679:16;4657:52;:::i;:::-;4725:16;;;;;4562:185;-1:-1:-1;;4562:185:12:o;4870:1301::-;5147:3;5176:1;5209:6;5203:13;5239:3;5261:1;5289:9;5285:2;5281:18;5271:28;;5349:2;5338:9;5334:18;5371;5361:61;;5415:4;5407:6;5403:17;5393:27;;5361:61;5441:2;5489;5481:6;5478:14;5458:18;5455:38;5452:165;;;-1:-1:-1;;;5516:33:12;;5572:4;5569:1;5562:15;5602:4;5523:3;5590:17;5452:165;5633:18;5660:104;;;;5778:1;5773:320;;;;5626:467;;5660:104;-1:-1:-1;;5693:24:12;;5681:37;;5738:16;;;;-1:-1:-1;5660:104:12;;5773:320;9578:1;9571:14;;;9615:4;9602:18;;5868:1;5882:165;5896:6;5893:1;5890:13;5882:165;;;5974:14;;5961:11;;;5954:35;6017:16;;;;5911:10;;5882:165;;;5886:3;;6076:6;6071:3;6067:16;6060:23;;5626:467;;;;;;;6109:56;6134:30;6160:3;6152:6;6134:30;:::i;:::-;-1:-1:-1;;;4812:20:12;;4857:1;4848:11;;4752:113;6109:56;6102:63;4870:1301;-1:-1:-1;;;;;4870:1301:12:o;6594:488::-;-1:-1:-1;;;;;6863:15:12;;;6845:34;;6915:15;;6910:2;6895:18;;6888:43;6962:2;6947:18;;6940:34;;;7010:3;7005:2;6990:18;;6983:31;;;6788:4;;7031:45;;7056:19;;7048:6;7031:45;:::i;:::-;7023:53;6594:488;-1:-1:-1;;;;;;6594:488:12:o;7279:219::-;7428:2;7417:9;7410:21;7391:4;7448:44;7488:2;7477:9;7473:18;7465:6;7448:44;:::i;8261:356::-;8463:2;8445:21;;;8482:18;;;8475:30;8541:34;8536:2;8521:18;;8514:62;8608:2;8593:18;;8261:356::o;9631:128::-;9671:3;9702:1;9698:6;9695:1;9692:13;9689:39;;;9708:18;;:::i;:::-;-1:-1:-1;9744:9:12;;9631:128::o;9764:120::-;9804:1;9830;9820:35;;9835:18;;:::i;:::-;-1:-1:-1;9869:9:12;;9764:120::o;9889:168::-;9929:7;9995:1;9991;9987:6;9983:14;9980:1;9977:21;9972:1;9965:9;9958:17;9954:45;9951:71;;;10002:18;;:::i;:::-;-1:-1:-1;10042:9:12;;9889:168::o;10062:125::-;10102:4;10130:1;10127;10124:8;10121:34;;;10135:18;;:::i;:::-;-1:-1:-1;10172:9:12;;10062:125::o;10192:258::-;10264:1;10274:113;10288:6;10285:1;10282:13;10274:113;;;10364:11;;;10358:18;10345:11;;;10338:39;10310:2;10303:10;10274:113;;;10405:6;10402:1;10399:13;10396:48;;;-1:-1:-1;;10440:1:12;10422:16;;10415:27;10192:258::o;10455:380::-;10534:1;10530:12;;;;10577;;;10598:61;;10652:4;10644:6;10640:17;10630:27;;10598:61;10705:2;10697:6;10694:14;10674:18;10671:38;10668:161;;;10751:10;10746:3;10742:20;10739:1;10732:31;10786:4;10783:1;10776:15;10814:4;10811:1;10804:15;10668:161;;10455:380;;;:::o;10840:135::-;10879:3;-1:-1:-1;;10900:17:12;;10897:43;;;10920:18;;:::i;:::-;-1:-1:-1;10967:1:12;10956:13;;10840:135::o;10980:112::-;11012:1;11038;11028:35;;11043:18;;:::i;:::-;-1:-1:-1;11077:9:12;;10980:112::o;11097:127::-;11158:10;11153:3;11149:20;11146:1;11139:31;11189:4;11186:1;11179:15;11213:4;11210:1;11203:15;11229:127;11290:10;11285:3;11281:20;11278:1;11271:31;11321:4;11318:1;11311:15;11345:4;11342:1;11335:15;11361:127;11422:10;11417:3;11413:20;11410:1;11403:31;11453:4;11450:1;11443:15;11477:4;11474:1;11467:15;11493:127;11554:10;11549:3;11545:20;11542:1;11535:31;11585:4;11582:1;11575:15;11609:4;11606:1;11599:15;11625:131;-1:-1:-1;;;;;;11699:32:12;;11689:43;;11679:71;;11746:1;11743;11736:12
Swarm Source
ipfs://bdf912ac1f160dd6ab8fb77e2d5e7faf249edf61722dc1badcf15db3e1dd7a9b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.