ERC-721
Overview
Max Total Supply
54 TMNUM
Holders
24
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 TMNUMLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TimelessNumber
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-03 */ // SPDX-License-Identifier: MIT 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); } // File: node_modules\openzeppelin-solidity\contracts\token\ERC721\IERC721.sol pragma solidity ^0.8.0; /** * @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; } // File: node_modules\openzeppelin-solidity\contracts\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); } // File: node_modules\openzeppelin-solidity\contracts\token\ERC721\extensions\IERC721Metadata.sol pragma solidity ^0.8.0; /** * @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); } // File: node_modules\openzeppelin-solidity\contracts\utils\Address.sol pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 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" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: node_modules\openzeppelin-solidity\contracts\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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: node_modules\openzeppelin-solidity\contracts\utils\Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: node_modules\openzeppelin-solidity\contracts\utils\introspection\ERC165.sol pragma solidity ^0.8.0; /** * @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; } } // File: node_modules\openzeppelin-solidity\contracts\token\ERC721\ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // 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; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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 || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @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) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. 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 virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _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 { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _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 { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @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`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @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 { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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 ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), 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( "ERC721: transfer to non ERC721Receiver implementer" ); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: node_modules\openzeppelin-solidity\contracts\token\ERC721\extensions\IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @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 tokenId); /** * @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); } // File: openzeppelin-solidity\contracts\access\Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; address private _creator; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; _creator = msgSender; emit OwnershipTransferred(address(0), 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() || _creator == _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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: openzeppelin-solidity\contracts\token\ERC721\extensions\ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts\lib\Counters.sol pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); { counter._value = value - 1; } } } pragma solidity ^0.8.0; contract TimelessNumber is ERC721Enumerable, Ownable { using Counters for Counters.Counter; using Strings for uint256; address payable private _PaymentAddress = payable(0x5ea8097d601aDB560fa49a3425F8ceFF793D67a6); address payable private _DevAddress; uint256 public TMNUM_MAX = 7250; uint256 public PRESALE_PRICE = 40_000_000_000_000_000; // 0.04 ETH uint256 public PUBLIC_PRICE = 50_000_000_000_000_000; // 0.05 ETH uint256 private DEV_FEE = 0; uint256 private VIP_START_HOURS = 24 hours; // Start 24hrs before uint256 private PRESALE_START_HOURS = 12 hours; // Start 12hrs before uint256 public VIP_MINT_LIMIT = 1; uint256 public PRESALE_MINT_LIMIT = 3; uint256 public PUBLIC_MINT_LIMIT = 7; mapping(address => bool) _mappingVIPList; mapping(address => bool) _mappingWhiteList; mapping(address => uint256) _mappingMintCount; uint256 private _revealDateTime = 1640304000; // Date and time (GMT): Friday, December 24, 2021 12:00:00 AM uint256 private _activeDateTime = 1639526400; // Date and time (GMT): Wednesday, December 15, 2021 12:00:00 AM string private _tokenBaseURI = ""; Counters.Counter private _publicTMNUM; constructor() ERC721("Timeless Number", "TMNUM") { _DevAddress = payable(msg.sender); } function setPaymentAddress(address paymentAddress) external onlyOwner { _PaymentAddress = payable(paymentAddress); } function setActiveDateTime(uint256 activeDateTime, uint256 revealDateTime) external onlyOwner { _activeDateTime = activeDateTime; _revealDateTime = revealDateTime; } function setDevFee(uint256 devFee) external onlyOwner { DEV_FEE = devFee; } function setPresaleHours (uint256 VIPStartHours, uint256 presaleStartHours) external onlyOwner { VIP_START_HOURS = VIPStartHours; PRESALE_START_HOURS = presaleStartHours; } function setWhiteList(address[] memory whiteListAddress, bool bEnable) external onlyOwner { for (uint256 i = 0; i < whiteListAddress.length; i++) { _mappingWhiteList[whiteListAddress[i]] = bEnable; } } function setVIPList(address[] memory VIPListAddress, bool bEnable) external onlyOwner { for (uint256 i = 0; i < VIPListAddress.length; i++) { _mappingVIPList[VIPListAddress[i]] = bEnable; } } function setMintPrice(uint256 presaleMintPrice, uint256 publicMintPrice) external onlyOwner { PRESALE_PRICE = presaleMintPrice; PUBLIC_PRICE = publicMintPrice; } function setMaxLimit(uint256 maxLimit) external onlyOwner { TMNUM_MAX = maxLimit; } function setPurchaseLimit(uint256 presaleMintLimit, uint256 publicMintLimit) external onlyOwner { PRESALE_MINT_LIMIT = presaleMintLimit; PUBLIC_MINT_LIMIT = publicMintLimit; } function setBaseURI(string memory baseURI) external onlyOwner { _tokenBaseURI = baseURI; } function PRICE(address addr) public view returns (uint256) { if (block.timestamp < _activeDateTime - PRESALE_START_HOURS && block.timestamp > _activeDateTime - VIP_START_HOURS) { require(_mappingVIPList[addr] == true, "Only VIP member can mint now"); return 0; } else if (block.timestamp < _activeDateTime && block.timestamp < _activeDateTime) { require(_mappingVIPList[addr] == true || _mappingWhiteList[addr] == true , "Only VIP and Whitelist member can mint now"); return PRESALE_PRICE; } else { return PUBLIC_PRICE; } } function airdrop(address to, uint256 numberOfTokens) external onlyOwner { for (uint256 i = 0; i < numberOfTokens; i++) { uint256 tokenId = _publicTMNUM.current(); if (_publicTMNUM.current() < TMNUM_MAX) { _publicTMNUM.increment(); _safeMint(to, tokenId); } } } function purchase(uint256 numberOfTokens) external payable { require(_publicTMNUM.current() < TMNUM_MAX,"Purchase would exceed TMNUM_MAX"); if (msg.sender != owner()) { _mappingMintCount[msg.sender] = _mappingMintCount[msg.sender] + numberOfTokens; require(PRICE(msg.sender) * numberOfTokens <= msg.value,"ETH amount is not sufficient"); if (_mappingVIPList[msg.sender] == true) { require(block.timestamp > _activeDateTime - VIP_START_HOURS,"Contract is not active for VIP"); if (block.timestamp < _activeDateTime - PRESALE_START_HOURS) { require(_mappingMintCount[msg.sender] <= VIP_MINT_LIMIT,"Overflow for PRESALE_MINT_LIMIT"); } else if (block.timestamp < _activeDateTime) { require(_mappingMintCount[msg.sender] <= VIP_MINT_LIMIT + PRESALE_MINT_LIMIT ,"Overflow for PRESALE_MINT_LIMIT"); } else { require(_mappingMintCount[msg.sender] <= VIP_MINT_LIMIT + PRESALE_MINT_LIMIT + PUBLIC_MINT_LIMIT,"Overflow for PUBLIC_MINT_LIMIT"); } } else if (_mappingWhiteList[msg.sender] == true) { require(block.timestamp > _activeDateTime - PRESALE_START_HOURS,"Contract is not active for presale"); if (block.timestamp < _activeDateTime) { require(_mappingMintCount[msg.sender] <= PRESALE_MINT_LIMIT ,"Overflow for PRESALE_MINT_LIMIT"); } else { require(_mappingMintCount[msg.sender] <= PRESALE_MINT_LIMIT + PUBLIC_MINT_LIMIT,"Overflow for PUBLIC_MINT_LIMIT"); } } else { require(block.timestamp > _activeDateTime,"Contract is not active"); require(_mappingMintCount[msg.sender] <= PUBLIC_MINT_LIMIT,"Overflow for PUBLIC_MINT_LIMIT"); } if (DEV_FEE > 0) { uint256 feeAmount = (msg.value * DEV_FEE) / 100; _DevAddress.transfer(feeAmount); _PaymentAddress.transfer(msg.value - feeAmount); } else { _PaymentAddress.transfer(msg.value); } } for (uint256 i = 0; i < numberOfTokens; i++) { uint256 tokenId = _publicTMNUM.current(); if (_publicTMNUM.current() < TMNUM_MAX) { _publicTMNUM.increment(); _safeMint(msg.sender, tokenId); } } } function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) { require(_exists(tokenId), "Token does not exist"); if (_revealDateTime < block.timestamp) { return string(abi.encodePacked(_tokenBaseURI, tokenId.toString())); } return ""; } function withdraw() external onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[],"name":"PRESALE_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TMNUM_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VIP_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"activeDateTime","type":"uint256"},{"internalType":"uint256","name":"revealDateTime","type":"uint256"}],"name":"setActiveDateTime","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxLimit","type":"uint256"}],"name":"setMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"presaleMintPrice","type":"uint256"},{"internalType":"uint256","name":"publicMintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"paymentAddress","type":"address"}],"name":"setPaymentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"VIPStartHours","type":"uint256"},{"internalType":"uint256","name":"presaleStartHours","type":"uint256"}],"name":"setPresaleHours","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"presaleMintLimit","type":"uint256"},{"internalType":"uint256","name":"publicMintLimit","type":"uint256"}],"name":"setPurchaseLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"VIPListAddress","type":"address[]"},{"internalType":"bool","name":"bEnable","type":"bool"}],"name":"setVIPList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"whiteListAddress","type":"address[]"},{"internalType":"bool","name":"bEnable","type":"bool"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
600c80546001600160a01b031916735ea8097d601adb560fa49a3425f8ceff793d67a6179055611c52600e55668e1bc9bf040000600f5566b1a2bc2ec50000601055600060118190556201518060125561a8c06013556001601455600360155560076016556361c50d80601a556361b93000601b5560a0604081905260808290526200008f91601c919062000193565b503480156200009d57600080fd5b50604080518082018252600f81526e2a34b6b2b632b9b990273ab6b132b960891b602080830191825283518085019094526005845264544d4e554d60d81b908401528151919291620000f29160009162000193565b5080516200010890600190602084019062000193565b50505060006200011d6200018f60201b60201c565b600a80546001600160a01b0383166001600160a01b03199182168117909255600b805490911682179055604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d80546001600160a01b0319163317905562000276565b3390565b828054620001a19062000239565b90600052602060002090601f016020900481019282620001c5576000855562000210565b82601f10620001e057805160ff191683800117855562000210565b8280016001018555821562000210579182015b8281111562000210578251825591602001919060010190620001f3565b506200021e92915062000222565b5090565b5b808211156200021e576000815560010162000223565b600181811c908216806200024e57607f821691505b602082108114156200027057634e487b7160e01b600052602260045260246000fd5b50919050565b612c4680620002866000396000f3fe6080604052600436106102305760003560e01c80636352211e1161012e578063bceae77b116100ab578063e985e9c51161006f578063e985e9c514610654578063efef39a11461069d578063f2fde38b146106b0578063f5ebec80146106d0578063fefd229d146106e657600080fd5b8063bceae77b146105be578063bf3d3e3a146105d4578063bf8bcee4146105f4578063c87b56dd14610614578063e43f696e1461063457600080fd5b80638da5cb5b116100f25780638da5cb5b1461052b57806395d89b4114610549578063a22cb4651461055e578063b88753431461057e578063b88d4fde1461059e57600080fd5b80636352211e146104965780636a3f0150146104b657806370a08231146104d6578063715018a6146104f65780638ba4cc3c1461050b57600080fd5b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce71461040a57806355f804b31461042a5780635e1e10041461044a578063611f3f101461046a57806362dc6e211461048057600080fd5b80632f745c5914610389578063386e8dcd146103a95780633ccfd60b146103bf57806342842e0e146103d45780634615a9a7146103f457600080fd5b8063095ea7b311610203578063095ea7b3146102e65780630b2df33d1461030657806318160ddd146103345780631c75b6b21461034957806323b872dd1461036957600080fd5b806301ffc9a7146102355780630442bfa81461026a57806306fdde031461028c578063081812fc146102ae575b600080fd5b34801561024157600080fd5b506102556102503660046124ce565b610706565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061028a6102853660046124f2565b610731565b005b34801561029857600080fd5b506102a1610784565b604051610261919061256c565b3480156102ba57600080fd5b506102ce6102c936600461257f565b610816565b6040516001600160a01b039091168152602001610261565b3480156102f257600080fd5b5061028a6103013660046125af565b6108ab565b34801561031257600080fd5b506103266103213660046125d9565b6109c1565b604051908152602001610261565b34801561034057600080fd5b50600854610326565b34801561035557600080fd5b5061028a61036436600461257f565b610b3d565b34801561037557600080fd5b5061028a6103843660046125f4565b610b81565b34801561039557600080fd5b506103266103a43660046125af565b610bb2565b3480156103b557600080fd5b50610326600e5481565b3480156103cb57600080fd5b5061028a610c48565b3480156103e057600080fd5b5061028a6103ef3660046125f4565b610cba565b34801561040057600080fd5b5061032660145481565b34801561041657600080fd5b5061032661042536600461257f565b610cd5565b34801561043657600080fd5b5061028a6104453660046126cf565b610d68565b34801561045657600080fd5b5061028a6104653660046125d9565b610dba565b34801561047657600080fd5b5061032660105481565b34801561048c57600080fd5b50610326600f5481565b3480156104a257600080fd5b506102ce6104b136600461257f565b610e1b565b3480156104c257600080fd5b5061028a6104d13660046124f2565b610e92565b3480156104e257600080fd5b506103266104f13660046125d9565b610edc565b34801561050257600080fd5b5061028a610f63565b34801561051757600080fd5b5061028a6105263660046125af565b610fec565b34801561053757600080fd5b50600a546001600160a01b03166102ce565b34801561055557600080fd5b506102a161107c565b34801561056a57600080fd5b5061028a610579366004612728565b61108b565b34801561058a57600080fd5b5061028a6105993660046124f2565b611150565b3480156105aa57600080fd5b5061028a6105b936600461275b565b61119a565b3480156105ca57600080fd5b5061032660165481565b3480156105e057600080fd5b5061028a6105ef3660046127d7565b6111d2565b34801561060057600080fd5b5061028a61060f36600461257f565b611278565b34801561062057600080fd5b506102a161062f36600461257f565b6112bc565b34801561064057600080fd5b5061028a61064f3660046127d7565b61136a565b34801561066057600080fd5b5061025561066f366004612896565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61028a6106ab36600461257f565b611410565b3480156106bc57600080fd5b5061028a6106cb3660046125d9565b611943565b3480156106dc57600080fd5b5061032660155481565b3480156106f257600080fd5b5061028a6107013660046124f2565b611a43565b60006001600160e01b0319821663780e9d6360e01b148061072b575061072b82611a8d565b92915050565b600a546001600160a01b03163314806107545750600b546001600160a01b031633145b6107795760405162461bcd60e51b8152600401610770906128c0565b60405180910390fd5b600f91909155601055565b606060008054610793906128f5565b80601f01602080910402602001604051908101604052809291908181526020018280546107bf906128f5565b801561080c5780601f106107e15761010080835404028352916020019161080c565b820191906000526020600020905b8154815290600101906020018083116107ef57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661088f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610770565b506000908152600460205260409020546001600160a01b031690565b60006108b682610e1b565b9050806001600160a01b0316836001600160a01b031614156109245760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610770565b336001600160a01b03821614806109405750610940813361066f565b6109b25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610770565b6109bc8383611add565b505050565b6000601354601b546109d39190612946565b421080156109ef5750601254601b546109ec9190612946565b42115b15610a69576001600160a01b03821660009081526017602052604090205460ff161515600114610a615760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c7920564950206d656d6265722063616e206d696e74206e6f77000000006044820152606401610770565b506000919050565b601b5442108015610a7b5750601b5442105b15610b30576001600160a01b03821660009081526017602052604090205460ff16151560011480610ac957506001600160a01b03821660009081526018602052604090205460ff1615156001145b610b285760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c792056495020616e642057686974656c697374206d656d6265722063616044820152696e206d696e74206e6f7760b01b6064820152608401610770565b5050600f5490565b505060105490565b919050565b600a546001600160a01b0316331480610b605750600b546001600160a01b031633145b610b7c5760405162461bcd60e51b8152600401610770906128c0565b601155565b610b8b3382611b4b565b610ba75760405162461bcd60e51b81526004016107709061295d565b6109bc838383611c42565b6000610bbd83610edc565b8210610c1f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610770565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b0316331480610c6b5750600b546001600160a01b031633145b610c875760405162461bcd60e51b8152600401610770906128c0565b6040514790339082156108fc029083906000818181858888f19350505050158015610cb6573d6000803e3d6000fd5b5050565b6109bc8383836040518060200160405280600081525061119a565b6000610ce060085490565b8210610d435760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610770565b60088281548110610d5657610d566129ae565b90600052602060002001549050919050565b600a546001600160a01b0316331480610d8b5750600b546001600160a01b031633145b610da75760405162461bcd60e51b8152600401610770906128c0565b8051610cb690601c90602084019061241c565b600a546001600160a01b0316331480610ddd5750600b546001600160a01b031633145b610df95760405162461bcd60e51b8152600401610770906128c0565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260408120546001600160a01b03168061072b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610770565b600a546001600160a01b0316331480610eb55750600b546001600160a01b031633145b610ed15760405162461bcd60e51b8152600401610770906128c0565b601291909155601355565b60006001600160a01b038216610f475760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610770565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331480610f865750600b546001600160a01b031633145b610fa25760405162461bcd60e51b8152600401610770906128c0565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b600a546001600160a01b031633148061100f5750600b546001600160a01b031633145b61102b5760405162461bcd60e51b8152600401610770906128c0565b60005b818110156109bc576000611041601d5490565b9050600e5461104f601d5490565b10156110695761105f601d611ded565b6110698482611e0a565b5080611074816129c4565b91505061102e565b606060018054610793906128f5565b6001600160a01b0382163314156110e45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610770565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314806111735750600b546001600160a01b031633145b61118f5760405162461bcd60e51b8152600401610770906128c0565b601b91909155601a55565b6111a43383611b4b565b6111c05760405162461bcd60e51b81526004016107709061295d565b6111cc84848484611e24565b50505050565b600a546001600160a01b03163314806111f55750600b546001600160a01b031633145b6112115760405162461bcd60e51b8152600401610770906128c0565b60005b82518110156109bc578160176000858481518110611234576112346129ae565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611270816129c4565b915050611214565b600a546001600160a01b031633148061129b5750600b546001600160a01b031633145b6112b75760405162461bcd60e51b8152600401610770906128c0565b600e55565b6000818152600260205260409020546060906001600160a01b031661131a5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b6044820152606401610770565b42601a54101561135657601c61132f83611e57565b6040516020016113409291906129fb565b6040516020818303038152906040529050919050565b505060408051602081019091526000815290565b600a546001600160a01b031633148061138d5750600b546001600160a01b031633145b6113a95760405162461bcd60e51b8152600401610770906128c0565b60005b82518110156109bc5781601860008584815181106113cc576113cc6129ae565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611408816129c4565b9150506113ac565b600e54601d54106114635760405162461bcd60e51b815260206004820152601f60248201527f507572636861736520776f756c642065786365656420544d4e554d5f4d4158006044820152606401610770565b600a546001600160a01b031633146118f25733600090815260196020526040902054611490908290612aa2565b33600081815260196020526040902091909155349082906114b0906109c1565b6114ba9190612aba565b11156115085760405162461bcd60e51b815260206004820152601c60248201527f45544820616d6f756e74206973206e6f742073756666696369656e74000000006044820152606401610770565b3360009081526017602052604090205460ff1615156001141561169357601254601b546115359190612946565b42116115835760405162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374206973206e6f742061637469766520666f722056495000006044820152606401610770565b601354601b546115939190612946565b4210156115d0576014543360009081526019602052604090205411156115cb5760405162461bcd60e51b815260040161077090612ad9565b61180f565b601b54421015611618576015546014546115ea9190612aa2565b3360009081526019602052604090205411156115cb5760405162461bcd60e51b815260040161077090612ad9565b60165460155460145461162b9190612aa2565b6116359190612aa2565b3360009081526019602052604090205411156115cb5760405162461bcd60e51b815260206004820152601e60248201527f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d495400006044820152606401610770565b3360009081526018602052604090205460ff1615156001141561176457601354601b546116c09190612946565b42116117195760405162461bcd60e51b815260206004820152602260248201527f436f6e7472616374206973206e6f742061637469766520666f722070726573616044820152616c6560f01b6064820152608401610770565b601b54421015611754576015543360009081526019602052604090205411156115cb5760405162461bcd60e51b815260040161077090612ad9565b6016546015546116359190612aa2565b601b5442116117ae5760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206973206e6f742061637469766560501b6044820152606401610770565b60165433600090815260196020526040902054111561180f5760405162461bcd60e51b815260206004820152601e60248201527f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d495400006044820152606401610770565b601154156118b75760006064601154346118299190612aba565b6118339190612b26565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561186e573d6000803e3d6000fd5b50600c546001600160a01b03166108fc6118888334612946565b6040518115909202916000818181858888f193505050501580156118b0573d6000803e3d6000fd5b50506118f2565b600c546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156118f0573d6000803e3d6000fd5b505b60005b81811015610cb6576000611908601d5490565b9050600e54611916601d5490565b101561193057611926601d611ded565b6119303382611e0a565b508061193b816129c4565b9150506118f5565b600a546001600160a01b03163314806119665750600b546001600160a01b031633145b6119825760405162461bcd60e51b8152600401610770906128c0565b6001600160a01b0381166119e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610770565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b0316331480611a665750600b546001600160a01b031633145b611a825760405162461bcd60e51b8152600401610770906128c0565b601591909155601655565b60006001600160e01b031982166380ac58cd60e01b1480611abe57506001600160e01b03198216635b5e139f60e01b145b8061072b57506301ffc9a760e01b6001600160e01b031983161461072b565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611b1282610e1b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611bc45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610770565b6000611bcf83610e1b565b9050806001600160a01b0316846001600160a01b03161480611c0a5750836001600160a01b0316611bff84610816565b6001600160a01b0316145b80611c3a57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611c5582610e1b565b6001600160a01b031614611cbd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610770565b6001600160a01b038216611d1f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610770565b611d2a838383611f55565b611d35600082611add565b6001600160a01b0383166000908152600360205260408120805460019290611d5e908490612946565b90915550506001600160a01b0382166000908152600360205260408120805460019290611d8c908490612aa2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001816000016000828254611e029190612aa2565b909155505050565b610cb682826040518060200160405280600081525061200d565b611e2f848484611c42565b611e3b84848484612040565b6111cc5760405162461bcd60e51b815260040161077090612b3a565b606081611e7b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ea55780611e8f816129c4565b9150611e9e9050600a83612b26565b9150611e7f565b60008167ffffffffffffffff811115611ec057611ec0612630565b6040519080825280601f01601f191660200182016040528015611eea576020820181803683370190505b5090505b8415611c3a57611eff600183612946565b9150611f0c600a86612b8c565b611f17906030612aa2565b60f81b818381518110611f2c57611f2c6129ae565b60200101906001600160f81b031916908160001a905350611f4e600a86612b26565b9450611eee565b6001600160a01b038316611fb057611fab81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611fd3565b816001600160a01b0316836001600160a01b031614611fd357611fd3838261213e565b6001600160a01b038216611fea576109bc816121db565b826001600160a01b0316826001600160a01b0316146109bc576109bc828261228a565b61201783836122ce565b6120246000848484612040565b6109bc5760405162461bcd60e51b815260040161077090612b3a565b60006001600160a01b0384163b1561213357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612084903390899088908890600401612ba0565b6020604051808303816000875af19250505080156120bf575060408051601f3d908101601f191682019092526120bc91810190612bdd565b60015b612119573d8080156120ed576040519150601f19603f3d011682016040523d82523d6000602084013e6120f2565b606091505b5080516121115760405162461bcd60e51b815260040161077090612b3a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c3a565b506001949350505050565b6000600161214b84610edc565b6121559190612946565b6000838152600760205260409020549091508082146121a8576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906121ed90600190612946565b60008381526009602052604081205460088054939450909284908110612215576122156129ae565b906000526020600020015490508060088381548110612236576122366129ae565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061226e5761226e612bfa565b6001900381819060005260206000200160009055905550505050565b600061229583610edc565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166123245760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610770565b6000818152600260205260409020546001600160a01b0316156123895760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610770565b61239560008383611f55565b6001600160a01b03821660009081526003602052604081208054600192906123be908490612aa2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612428906128f5565b90600052602060002090601f01602090048101928261244a5760008555612490565b82601f1061246357805160ff1916838001178555612490565b82800160010185558215612490579182015b82811115612490578251825591602001919060010190612475565b5061249c9291506124a0565b5090565b5b8082111561249c57600081556001016124a1565b6001600160e01b0319811681146124cb57600080fd5b50565b6000602082840312156124e057600080fd5b81356124eb816124b5565b9392505050565b6000806040838503121561250557600080fd5b50508035926020909101359150565b60005b8381101561252f578181015183820152602001612517565b838111156111cc5750506000910152565b60008151808452612558816020860160208601612514565b601f01601f19169290920160200192915050565b6020815260006124eb6020830184612540565b60006020828403121561259157600080fd5b5035919050565b80356001600160a01b0381168114610b3857600080fd5b600080604083850312156125c257600080fd5b6125cb83612598565b946020939093013593505050565b6000602082840312156125eb57600080fd5b6124eb82612598565b60008060006060848603121561260957600080fd5b61261284612598565b925061262060208501612598565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561266f5761266f612630565b604052919050565b600067ffffffffffffffff83111561269157612691612630565b6126a4601f8401601f1916602001612646565b90508281528383830111156126b857600080fd5b828260208301376000602084830101529392505050565b6000602082840312156126e157600080fd5b813567ffffffffffffffff8111156126f857600080fd5b8201601f8101841361270957600080fd5b611c3a84823560208401612677565b80358015158114610b3857600080fd5b6000806040838503121561273b57600080fd5b61274483612598565b915061275260208401612718565b90509250929050565b6000806000806080858703121561277157600080fd5b61277a85612598565b935061278860208601612598565b925060408501359150606085013567ffffffffffffffff8111156127ab57600080fd5b8501601f810187136127bc57600080fd5b6127cb87823560208401612677565b91505092959194509250565b600080604083850312156127ea57600080fd5b823567ffffffffffffffff8082111561280257600080fd5b818501915085601f83011261281657600080fd5b813560208282111561282a5761282a612630565b8160051b925061283b818401612646565b828152928401810192818101908985111561285557600080fd5b948201945b8486101561287a5761286b86612598565b8252948201949082019061285a565b96506128899050878201612718565b9450505050509250929050565b600080604083850312156128a957600080fd5b6128b283612598565b915061275260208401612598565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061290957607f821691505b6020821081141561292a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561295857612958612930565b500390565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156129d8576129d8612930565b5060010190565b600081516129f1818560208601612514565b9290920192915050565b600080845481600182811c915080831680612a1757607f831692505b6020808410821415612a3757634e487b7160e01b86526022600452602486fd5b818015612a4b5760018114612a5c57612a89565b60ff19861689528489019650612a89565b60008b81526020902060005b86811015612a815781548b820152908501908301612a68565b505084890196505b505050505050612a9981856129df565b95945050505050565b60008219821115612ab557612ab5612930565b500190565b6000816000190483118215151615612ad457612ad4612930565b500290565b6020808252601f908201527f4f766572666c6f7720666f722050524553414c455f4d494e545f4c494d495400604082015260600190565b634e487b7160e01b600052601260045260246000fd5b600082612b3557612b35612b10565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082612b9b57612b9b612b10565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612bd390830184612540565b9695505050505050565b600060208284031215612bef57600080fd5b81516124eb816124b5565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d9a133618853aff8f2c6374a062b343969f2a2d86540dfb8a5aa1fc3bd19590064736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106102305760003560e01c80636352211e1161012e578063bceae77b116100ab578063e985e9c51161006f578063e985e9c514610654578063efef39a11461069d578063f2fde38b146106b0578063f5ebec80146106d0578063fefd229d146106e657600080fd5b8063bceae77b146105be578063bf3d3e3a146105d4578063bf8bcee4146105f4578063c87b56dd14610614578063e43f696e1461063457600080fd5b80638da5cb5b116100f25780638da5cb5b1461052b57806395d89b4114610549578063a22cb4651461055e578063b88753431461057e578063b88d4fde1461059e57600080fd5b80636352211e146104965780636a3f0150146104b657806370a08231146104d6578063715018a6146104f65780638ba4cc3c1461050b57600080fd5b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce71461040a57806355f804b31461042a5780635e1e10041461044a578063611f3f101461046a57806362dc6e211461048057600080fd5b80632f745c5914610389578063386e8dcd146103a95780633ccfd60b146103bf57806342842e0e146103d45780634615a9a7146103f457600080fd5b8063095ea7b311610203578063095ea7b3146102e65780630b2df33d1461030657806318160ddd146103345780631c75b6b21461034957806323b872dd1461036957600080fd5b806301ffc9a7146102355780630442bfa81461026a57806306fdde031461028c578063081812fc146102ae575b600080fd5b34801561024157600080fd5b506102556102503660046124ce565b610706565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061028a6102853660046124f2565b610731565b005b34801561029857600080fd5b506102a1610784565b604051610261919061256c565b3480156102ba57600080fd5b506102ce6102c936600461257f565b610816565b6040516001600160a01b039091168152602001610261565b3480156102f257600080fd5b5061028a6103013660046125af565b6108ab565b34801561031257600080fd5b506103266103213660046125d9565b6109c1565b604051908152602001610261565b34801561034057600080fd5b50600854610326565b34801561035557600080fd5b5061028a61036436600461257f565b610b3d565b34801561037557600080fd5b5061028a6103843660046125f4565b610b81565b34801561039557600080fd5b506103266103a43660046125af565b610bb2565b3480156103b557600080fd5b50610326600e5481565b3480156103cb57600080fd5b5061028a610c48565b3480156103e057600080fd5b5061028a6103ef3660046125f4565b610cba565b34801561040057600080fd5b5061032660145481565b34801561041657600080fd5b5061032661042536600461257f565b610cd5565b34801561043657600080fd5b5061028a6104453660046126cf565b610d68565b34801561045657600080fd5b5061028a6104653660046125d9565b610dba565b34801561047657600080fd5b5061032660105481565b34801561048c57600080fd5b50610326600f5481565b3480156104a257600080fd5b506102ce6104b136600461257f565b610e1b565b3480156104c257600080fd5b5061028a6104d13660046124f2565b610e92565b3480156104e257600080fd5b506103266104f13660046125d9565b610edc565b34801561050257600080fd5b5061028a610f63565b34801561051757600080fd5b5061028a6105263660046125af565b610fec565b34801561053757600080fd5b50600a546001600160a01b03166102ce565b34801561055557600080fd5b506102a161107c565b34801561056a57600080fd5b5061028a610579366004612728565b61108b565b34801561058a57600080fd5b5061028a6105993660046124f2565b611150565b3480156105aa57600080fd5b5061028a6105b936600461275b565b61119a565b3480156105ca57600080fd5b5061032660165481565b3480156105e057600080fd5b5061028a6105ef3660046127d7565b6111d2565b34801561060057600080fd5b5061028a61060f36600461257f565b611278565b34801561062057600080fd5b506102a161062f36600461257f565b6112bc565b34801561064057600080fd5b5061028a61064f3660046127d7565b61136a565b34801561066057600080fd5b5061025561066f366004612896565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61028a6106ab36600461257f565b611410565b3480156106bc57600080fd5b5061028a6106cb3660046125d9565b611943565b3480156106dc57600080fd5b5061032660155481565b3480156106f257600080fd5b5061028a6107013660046124f2565b611a43565b60006001600160e01b0319821663780e9d6360e01b148061072b575061072b82611a8d565b92915050565b600a546001600160a01b03163314806107545750600b546001600160a01b031633145b6107795760405162461bcd60e51b8152600401610770906128c0565b60405180910390fd5b600f91909155601055565b606060008054610793906128f5565b80601f01602080910402602001604051908101604052809291908181526020018280546107bf906128f5565b801561080c5780601f106107e15761010080835404028352916020019161080c565b820191906000526020600020905b8154815290600101906020018083116107ef57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661088f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610770565b506000908152600460205260409020546001600160a01b031690565b60006108b682610e1b565b9050806001600160a01b0316836001600160a01b031614156109245760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610770565b336001600160a01b03821614806109405750610940813361066f565b6109b25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610770565b6109bc8383611add565b505050565b6000601354601b546109d39190612946565b421080156109ef5750601254601b546109ec9190612946565b42115b15610a69576001600160a01b03821660009081526017602052604090205460ff161515600114610a615760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c7920564950206d656d6265722063616e206d696e74206e6f77000000006044820152606401610770565b506000919050565b601b5442108015610a7b5750601b5442105b15610b30576001600160a01b03821660009081526017602052604090205460ff16151560011480610ac957506001600160a01b03821660009081526018602052604090205460ff1615156001145b610b285760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c792056495020616e642057686974656c697374206d656d6265722063616044820152696e206d696e74206e6f7760b01b6064820152608401610770565b5050600f5490565b505060105490565b919050565b600a546001600160a01b0316331480610b605750600b546001600160a01b031633145b610b7c5760405162461bcd60e51b8152600401610770906128c0565b601155565b610b8b3382611b4b565b610ba75760405162461bcd60e51b81526004016107709061295d565b6109bc838383611c42565b6000610bbd83610edc565b8210610c1f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610770565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b0316331480610c6b5750600b546001600160a01b031633145b610c875760405162461bcd60e51b8152600401610770906128c0565b6040514790339082156108fc029083906000818181858888f19350505050158015610cb6573d6000803e3d6000fd5b5050565b6109bc8383836040518060200160405280600081525061119a565b6000610ce060085490565b8210610d435760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610770565b60088281548110610d5657610d566129ae565b90600052602060002001549050919050565b600a546001600160a01b0316331480610d8b5750600b546001600160a01b031633145b610da75760405162461bcd60e51b8152600401610770906128c0565b8051610cb690601c90602084019061241c565b600a546001600160a01b0316331480610ddd5750600b546001600160a01b031633145b610df95760405162461bcd60e51b8152600401610770906128c0565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260408120546001600160a01b03168061072b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610770565b600a546001600160a01b0316331480610eb55750600b546001600160a01b031633145b610ed15760405162461bcd60e51b8152600401610770906128c0565b601291909155601355565b60006001600160a01b038216610f475760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610770565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331480610f865750600b546001600160a01b031633145b610fa25760405162461bcd60e51b8152600401610770906128c0565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b600a546001600160a01b031633148061100f5750600b546001600160a01b031633145b61102b5760405162461bcd60e51b8152600401610770906128c0565b60005b818110156109bc576000611041601d5490565b9050600e5461104f601d5490565b10156110695761105f601d611ded565b6110698482611e0a565b5080611074816129c4565b91505061102e565b606060018054610793906128f5565b6001600160a01b0382163314156110e45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610770565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314806111735750600b546001600160a01b031633145b61118f5760405162461bcd60e51b8152600401610770906128c0565b601b91909155601a55565b6111a43383611b4b565b6111c05760405162461bcd60e51b81526004016107709061295d565b6111cc84848484611e24565b50505050565b600a546001600160a01b03163314806111f55750600b546001600160a01b031633145b6112115760405162461bcd60e51b8152600401610770906128c0565b60005b82518110156109bc578160176000858481518110611234576112346129ae565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611270816129c4565b915050611214565b600a546001600160a01b031633148061129b5750600b546001600160a01b031633145b6112b75760405162461bcd60e51b8152600401610770906128c0565b600e55565b6000818152600260205260409020546060906001600160a01b031661131a5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b6044820152606401610770565b42601a54101561135657601c61132f83611e57565b6040516020016113409291906129fb565b6040516020818303038152906040529050919050565b505060408051602081019091526000815290565b600a546001600160a01b031633148061138d5750600b546001600160a01b031633145b6113a95760405162461bcd60e51b8152600401610770906128c0565b60005b82518110156109bc5781601860008584815181106113cc576113cc6129ae565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611408816129c4565b9150506113ac565b600e54601d54106114635760405162461bcd60e51b815260206004820152601f60248201527f507572636861736520776f756c642065786365656420544d4e554d5f4d4158006044820152606401610770565b600a546001600160a01b031633146118f25733600090815260196020526040902054611490908290612aa2565b33600081815260196020526040902091909155349082906114b0906109c1565b6114ba9190612aba565b11156115085760405162461bcd60e51b815260206004820152601c60248201527f45544820616d6f756e74206973206e6f742073756666696369656e74000000006044820152606401610770565b3360009081526017602052604090205460ff1615156001141561169357601254601b546115359190612946565b42116115835760405162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374206973206e6f742061637469766520666f722056495000006044820152606401610770565b601354601b546115939190612946565b4210156115d0576014543360009081526019602052604090205411156115cb5760405162461bcd60e51b815260040161077090612ad9565b61180f565b601b54421015611618576015546014546115ea9190612aa2565b3360009081526019602052604090205411156115cb5760405162461bcd60e51b815260040161077090612ad9565b60165460155460145461162b9190612aa2565b6116359190612aa2565b3360009081526019602052604090205411156115cb5760405162461bcd60e51b815260206004820152601e60248201527f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d495400006044820152606401610770565b3360009081526018602052604090205460ff1615156001141561176457601354601b546116c09190612946565b42116117195760405162461bcd60e51b815260206004820152602260248201527f436f6e7472616374206973206e6f742061637469766520666f722070726573616044820152616c6560f01b6064820152608401610770565b601b54421015611754576015543360009081526019602052604090205411156115cb5760405162461bcd60e51b815260040161077090612ad9565b6016546015546116359190612aa2565b601b5442116117ae5760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206973206e6f742061637469766560501b6044820152606401610770565b60165433600090815260196020526040902054111561180f5760405162461bcd60e51b815260206004820152601e60248201527f4f766572666c6f7720666f72205055424c49435f4d494e545f4c494d495400006044820152606401610770565b601154156118b75760006064601154346118299190612aba565b6118339190612b26565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561186e573d6000803e3d6000fd5b50600c546001600160a01b03166108fc6118888334612946565b6040518115909202916000818181858888f193505050501580156118b0573d6000803e3d6000fd5b50506118f2565b600c546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156118f0573d6000803e3d6000fd5b505b60005b81811015610cb6576000611908601d5490565b9050600e54611916601d5490565b101561193057611926601d611ded565b6119303382611e0a565b508061193b816129c4565b9150506118f5565b600a546001600160a01b03163314806119665750600b546001600160a01b031633145b6119825760405162461bcd60e51b8152600401610770906128c0565b6001600160a01b0381166119e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610770565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b0316331480611a665750600b546001600160a01b031633145b611a825760405162461bcd60e51b8152600401610770906128c0565b601591909155601655565b60006001600160e01b031982166380ac58cd60e01b1480611abe57506001600160e01b03198216635b5e139f60e01b145b8061072b57506301ffc9a760e01b6001600160e01b031983161461072b565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611b1282610e1b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611bc45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610770565b6000611bcf83610e1b565b9050806001600160a01b0316846001600160a01b03161480611c0a5750836001600160a01b0316611bff84610816565b6001600160a01b0316145b80611c3a57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611c5582610e1b565b6001600160a01b031614611cbd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610770565b6001600160a01b038216611d1f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610770565b611d2a838383611f55565b611d35600082611add565b6001600160a01b0383166000908152600360205260408120805460019290611d5e908490612946565b90915550506001600160a01b0382166000908152600360205260408120805460019290611d8c908490612aa2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001816000016000828254611e029190612aa2565b909155505050565b610cb682826040518060200160405280600081525061200d565b611e2f848484611c42565b611e3b84848484612040565b6111cc5760405162461bcd60e51b815260040161077090612b3a565b606081611e7b5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ea55780611e8f816129c4565b9150611e9e9050600a83612b26565b9150611e7f565b60008167ffffffffffffffff811115611ec057611ec0612630565b6040519080825280601f01601f191660200182016040528015611eea576020820181803683370190505b5090505b8415611c3a57611eff600183612946565b9150611f0c600a86612b8c565b611f17906030612aa2565b60f81b818381518110611f2c57611f2c6129ae565b60200101906001600160f81b031916908160001a905350611f4e600a86612b26565b9450611eee565b6001600160a01b038316611fb057611fab81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611fd3565b816001600160a01b0316836001600160a01b031614611fd357611fd3838261213e565b6001600160a01b038216611fea576109bc816121db565b826001600160a01b0316826001600160a01b0316146109bc576109bc828261228a565b61201783836122ce565b6120246000848484612040565b6109bc5760405162461bcd60e51b815260040161077090612b3a565b60006001600160a01b0384163b1561213357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612084903390899088908890600401612ba0565b6020604051808303816000875af19250505080156120bf575060408051601f3d908101601f191682019092526120bc91810190612bdd565b60015b612119573d8080156120ed576040519150601f19603f3d011682016040523d82523d6000602084013e6120f2565b606091505b5080516121115760405162461bcd60e51b815260040161077090612b3a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c3a565b506001949350505050565b6000600161214b84610edc565b6121559190612946565b6000838152600760205260409020549091508082146121a8576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906121ed90600190612946565b60008381526009602052604081205460088054939450909284908110612215576122156129ae565b906000526020600020015490508060088381548110612236576122366129ae565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061226e5761226e612bfa565b6001900381819060005260206000200160009055905550505050565b600061229583610edc565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166123245760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610770565b6000818152600260205260409020546001600160a01b0316156123895760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610770565b61239560008383611f55565b6001600160a01b03821660009081526003602052604081208054600192906123be908490612aa2565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612428906128f5565b90600052602060002090601f01602090048101928261244a5760008555612490565b82601f1061246357805160ff1916838001178555612490565b82800160010185558215612490579182015b82811115612490578251825591602001919060010190612475565b5061249c9291506124a0565b5090565b5b8082111561249c57600081556001016124a1565b6001600160e01b0319811681146124cb57600080fd5b50565b6000602082840312156124e057600080fd5b81356124eb816124b5565b9392505050565b6000806040838503121561250557600080fd5b50508035926020909101359150565b60005b8381101561252f578181015183820152602001612517565b838111156111cc5750506000910152565b60008151808452612558816020860160208601612514565b601f01601f19169290920160200192915050565b6020815260006124eb6020830184612540565b60006020828403121561259157600080fd5b5035919050565b80356001600160a01b0381168114610b3857600080fd5b600080604083850312156125c257600080fd5b6125cb83612598565b946020939093013593505050565b6000602082840312156125eb57600080fd5b6124eb82612598565b60008060006060848603121561260957600080fd5b61261284612598565b925061262060208501612598565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561266f5761266f612630565b604052919050565b600067ffffffffffffffff83111561269157612691612630565b6126a4601f8401601f1916602001612646565b90508281528383830111156126b857600080fd5b828260208301376000602084830101529392505050565b6000602082840312156126e157600080fd5b813567ffffffffffffffff8111156126f857600080fd5b8201601f8101841361270957600080fd5b611c3a84823560208401612677565b80358015158114610b3857600080fd5b6000806040838503121561273b57600080fd5b61274483612598565b915061275260208401612718565b90509250929050565b6000806000806080858703121561277157600080fd5b61277a85612598565b935061278860208601612598565b925060408501359150606085013567ffffffffffffffff8111156127ab57600080fd5b8501601f810187136127bc57600080fd5b6127cb87823560208401612677565b91505092959194509250565b600080604083850312156127ea57600080fd5b823567ffffffffffffffff8082111561280257600080fd5b818501915085601f83011261281657600080fd5b813560208282111561282a5761282a612630565b8160051b925061283b818401612646565b828152928401810192818101908985111561285557600080fd5b948201945b8486101561287a5761286b86612598565b8252948201949082019061285a565b96506128899050878201612718565b9450505050509250929050565b600080604083850312156128a957600080fd5b6128b283612598565b915061275260208401612598565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061290957607f821691505b6020821081141561292a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561295857612958612930565b500390565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156129d8576129d8612930565b5060010190565b600081516129f1818560208601612514565b9290920192915050565b600080845481600182811c915080831680612a1757607f831692505b6020808410821415612a3757634e487b7160e01b86526022600452602486fd5b818015612a4b5760018114612a5c57612a89565b60ff19861689528489019650612a89565b60008b81526020902060005b86811015612a815781548b820152908501908301612a68565b505084890196505b505050505050612a9981856129df565b95945050505050565b60008219821115612ab557612ab5612930565b500190565b6000816000190483118215151615612ad457612ad4612930565b500290565b6020808252601f908201527f4f766572666c6f7720666f722050524553414c455f4d494e545f4c494d495400604082015260600190565b634e487b7160e01b600052601260045260246000fd5b600082612b3557612b35612b10565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082612b9b57612b9b612b10565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612bd390830184612540565b9695505050505050565b600060208284031215612bef57600080fd5b81516124eb816124b5565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d9a133618853aff8f2c6374a062b343969f2a2d86540dfb8a5aa1fc3bd19590064736f6c634300080a0033
Deployed Bytecode Sourcemap
46971:7148:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39256:300;;;;;;;;;;-1:-1:-1;39256:300:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;39256:300:0;;;;;;;;49455:184;;;;;;;;;;-1:-1:-1;49455:184:0;;;;;:::i;:::-;;:::i;:::-;;22885:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24467:308::-;;;;;;;;;;-1:-1:-1;24467:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1967:32:1;;;1949:51;;1937:2;1922:18;24467:308:0;1803:203:1;23990:411:0;;;;;;;;;;-1:-1:-1;23990:411:0;;;;;:::i;:::-;;:::i;50070:629::-;;;;;;;;;;-1:-1:-1;50070:629:0;;;;;:::i;:::-;;:::i;:::-;;;2785:25:1;;;2773:2;2758:18;50070:629:0;2639:177:1;40059:113:0;;;;;;;;;;-1:-1:-1;40147:10:0;:17;40059:113;;48675:89;;;;;;;;;;-1:-1:-1;48675:89:0;;;;;:::i;:::-;;:::i;25526:376::-;;;;;;;;;;-1:-1:-1;25526:376:0;;;;;:::i;:::-;;:::i;39640:343::-;;;;;;;;;;-1:-1:-1;39640:343:0;;;;;:::i;:::-;;:::i;47251:31::-;;;;;;;;;;;;;;;;53969:147;;;;;;;;;;;;;:::i;25973:185::-;;;;;;;;;;-1:-1:-1;25973:185:0;;;;;:::i;:::-;;:::i;47620:33::-;;;;;;;;;;;;;;;;40249:320;;;;;;;;;;-1:-1:-1;40249:320:0;;;;;:::i;:::-;;:::i;49958:104::-;;;;;;;;;;-1:-1:-1;49958:104:0;;;;;:::i;:::-;;:::i;48341:130::-;;;;;;;;;;-1:-1:-1;48341:130:0;;;;;:::i;:::-;;:::i;47361:52::-;;;;;;;;;;;;;;;;47289:53;;;;;;;;;;;;;;;;22492:326;;;;;;;;;;-1:-1:-1;22492:326:0;;;;;:::i;:::-;;:::i;48772:195::-;;;;;;;;;;-1:-1:-1;48772:195:0;;;;;:::i;:::-;;:::i;22135:295::-;;;;;;;;;;-1:-1:-1;22135:295:0;;;;;:::i;:::-;;:::i;37735:148::-;;;;;;;;;;;;;:::i;50707:358::-;;;;;;;;;;-1:-1:-1;50707:358:0;;;;;:::i;:::-;;:::i;37019:87::-;;;;;;;;;;-1:-1:-1;37092:6:0;;-1:-1:-1;;;;;37092:6:0;37019:87;;23054:104;;;;;;;;;;;;;:::i;24847:327::-;;;;;;;;;;-1:-1:-1;24847:327:0;;;;;:::i;:::-;;:::i;48479:188::-;;;;;;;;;;-1:-1:-1;48479:188:0;;;;;:::i;:::-;;:::i;26229:365::-;;;;;;;;;;-1:-1:-1;26229:365:0;;;;;:::i;:::-;;:::i;47704:36::-;;;;;;;;;;;;;;;;49220:227;;;;;;;;;;-1:-1:-1;49220:227:0;;;;;:::i;:::-;;:::i;49647:97::-;;;;;;;;;;-1:-1:-1;49647:97:0;;;;;:::i;:::-;;:::i;53634:327::-;;;;;;;;;;-1:-1:-1;53634:327:0;;;;;:::i;:::-;;:::i;48975:237::-;;;;;;;;;;-1:-1:-1;48975:237:0;;;;;:::i;:::-;;:::i;25245:214::-;;;;;;;;;;-1:-1:-1;25245:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;25416:25:0;;;25387:4;25416:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25245:214;51073:2553;;;;;;:::i;:::-;;:::i;38038:281::-;;;;;;;;;;-1:-1:-1;38038:281:0;;;;;:::i;:::-;;:::i;47660:37::-;;;;;;;;;;;;;;;;49752:198;;;;;;;;;;-1:-1:-1;49752:198:0;;;;;:::i;:::-;;:::i;39256:300::-;39403:4;-1:-1:-1;;;;;;39445:50:0;;-1:-1:-1;;;39445:50:0;;:103;;;39512:36;39536:11;39512:23;:36::i;:::-;39425:123;39256:300;-1:-1:-1;;39256:300:0:o;49455:184::-;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;;;;;;;;;49558:13:::1;:32:::0;;;;49601:12:::1;:30:::0;49455:184::o;22885:100::-;22939:13;22972:5;22965:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22885:100;:::o;24467:308::-;24588:7;28230:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28230:16:0;24613:110;;;;-1:-1:-1;;;24613:110:0;;7770:2:1;24613:110:0;;;7752:21:1;7809:2;7789:18;;;7782:30;7848:34;7828:18;;;7821:62;-1:-1:-1;;;7899:18:1;;;7892:42;7951:19;;24613:110:0;7568:408:1;24613:110:0;-1:-1:-1;24743:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24743:24:0;;24467:308::o;23990:411::-;24071:13;24087:23;24102:7;24087:14;:23::i;:::-;24071:39;;24135:5;-1:-1:-1;;;;;24129:11:0;:2;-1:-1:-1;;;;;24129:11:0;;;24121:57;;;;-1:-1:-1;;;24121:57:0;;8183:2:1;24121:57:0;;;8165:21:1;8222:2;8202:18;;;8195:30;8261:34;8241:18;;;8234:62;-1:-1:-1;;;8312:18:1;;;8305:31;8353:19;;24121:57:0;7981:397:1;24121:57:0;16975:10;-1:-1:-1;;;;;24213:21:0;;;;:62;;-1:-1:-1;24238:37:0;24255:5;16975:10;25245:214;:::i;24238:37::-;24191:168;;;;-1:-1:-1;;;24191:168:0;;8585:2:1;24191:168:0;;;8567:21:1;8624:2;8604:18;;;8597:30;8663:34;8643:18;;;8636:62;8734:26;8714:18;;;8707:54;8778:19;;24191:168:0;8383:420:1;24191:168:0;24372:21;24381:2;24385:7;24372:8;:21::i;:::-;24060:341;23990:411;;:::o;50070:629::-;50120:7;50180:19;;50162:15;;:37;;;;:::i;:::-;50144:15;:55;:110;;;;;50239:15;;50221;;:33;;;;:::i;:::-;50203:15;:51;50144:110;50140:552;;;-1:-1:-1;;;;;50279:21:0;;;;;;:15;:21;;;;;;;;:29;;:21;:29;50271:70;;;;-1:-1:-1;;;50271:70:0;;9272:2:1;50271:70:0;;;9254:21:1;9311:2;9291:18;;;9284:30;9350;9330:18;;;9323:58;9398:18;;50271:70:0;9070:352:1;50271:70:0;-1:-1:-1;50363:1:0;;50070:629;-1:-1:-1;50070:629:0:o;50140:552::-;50404:15;;50386;:33;:70;;;;;50441:15;;50423;:33;50386:70;50382:310;;;-1:-1:-1;;;;;50481:21:0;;;;;;:15;:21;;;;;;;;:29;;:21;:29;;:64;;-1:-1:-1;;;;;;50514:23:0;;;;;;:17;:23;;;;;;;;:31;;:23;:31;50481:64;50473:120;;;;-1:-1:-1;;;50473:120:0;;9629:2:1;50473:120:0;;;9611:21:1;9668:2;9648:18;;;9641:30;9707:34;9687:18;;;9680:62;-1:-1:-1;;;9758:18:1;;;9751:40;9808:19;;50473:120:0;9427:406:1;50473:120:0;-1:-1:-1;;50615:13:0;;;50070:629::o;50382:310::-;-1:-1:-1;;50668:12:0;;;50070:629::o;50382:310::-;50070:629;;;:::o;48675:89::-;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;48740:7:::1;:16:::0;48675:89::o;25526:376::-;25735:41;16975:10;25768:7;25735:18;:41::i;:::-;25713:140;;;;-1:-1:-1;;;25713:140:0;;;;;;;:::i;:::-;25866:28;25876:4;25882:2;25886:7;25866:9;:28::i;39640:343::-;39782:7;39837:23;39854:5;39837:16;:23::i;:::-;39829:5;:31;39807:124;;;;-1:-1:-1;;;39807:124:0;;10458:2:1;39807:124:0;;;10440:21:1;10497:2;10477:18;;;10470:30;10536:34;10516:18;;;10509:62;-1:-1:-1;;;10587:18:1;;;10580:41;10638:19;;39807:124:0;10256:407:1;39807:124:0;-1:-1:-1;;;;;;39949:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;39640:343::o;53969:147::-;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;54071:37:::1;::::0;54037:21:::1;::::0;54079:10:::1;::::0;54071:37;::::1;;;::::0;54037:21;;54019:15:::1;54071:37:::0;54019:15;54071:37;54037:21;54079:10;54071:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;54008:108;53969:147::o:0;25973:185::-;26111:39;26128:4;26134:2;26138:7;26111:39;;;;;;;;;;;;:16;:39::i;40249:320::-;40369:7;40424:30;40147:10;:17;;40059:113;40424:30;40416:5;:38;40394:132;;;;-1:-1:-1;;;40394:132:0;;10870:2:1;40394:132:0;;;10852:21:1;10909:2;10889:18;;;10882:30;10948:34;10928:18;;;10921:62;-1:-1:-1;;;10999:18:1;;;10992:42;11051:19;;40394:132:0;10668:408:1;40394:132:0;40544:10;40555:5;40544:17;;;;;;;;:::i;:::-;;;;;;;;;40537:24;;40249:320;;;:::o;49958:104::-;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;50031:23;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;48341:130::-:0;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;48422:15:::1;:41:::0;;-1:-1:-1;;;;;;48422:41:0::1;-1:-1:-1::0;;;;;48422:41:0;;;::::1;::::0;;;::::1;::::0;;48341:130::o;22492:326::-;22609:7;22650:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22650:16:0;22699:19;22677:110;;;;-1:-1:-1;;;22677:110:0;;11415:2:1;22677:110:0;;;11397:21:1;11454:2;11434:18;;;11427:30;11493:34;11473:18;;;11466:62;-1:-1:-1;;;11544:18:1;;;11537:39;11593:19;;22677:110:0;11213:405:1;48772:195:0;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;48878:15:::1;:31:::0;;;;48920:19:::1;:39:::0;48772:195::o;22135:295::-;22252:7;-1:-1:-1;;;;;22299:19:0;;22277:111;;;;-1:-1:-1;;;22277:111:0;;11825:2:1;22277:111:0;;;11807:21:1;11864:2;11844:18;;;11837:30;11903:34;11883:18;;;11876:62;-1:-1:-1;;;11954:18:1;;;11947:40;12004:19;;22277:111:0;11623:406:1;22277:111:0;-1:-1:-1;;;;;;22406:16:0;;;;;:9;:16;;;;;;;22135:295::o;37735:148::-;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;37826:6:::1;::::0;37805:40:::1;::::0;37842:1:::1;::::0;-1:-1:-1;;;;;37826:6:0::1;::::0;37805:40:::1;::::0;37842:1;;37805:40:::1;37856:6;:19:::0;;-1:-1:-1;;;;;;37856:19:0::1;::::0;;37735:148::o;50707:358::-;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;50795:9:::1;50790:268;50814:14;50810:1;:18;50790:268;;;50850:15;50868:22;:12;46557:14:::0;;46465:114;50868:22:::1;50850:40;;50936:9;;50911:22;:12;46557:14:::0;;46465:114;50911:22:::1;:34;50907:140;;;50966:24;:12;:22;:24::i;:::-;51009:22;51019:2;51023:7;51009:9;:22::i;:::-;-1:-1:-1::0;50830:3:0;::::1;::::0;::::1;:::i;:::-;;;;50790:268;;23054:104:::0;23110:13;23143:7;23136:14;;;;;:::i;24847:327::-;-1:-1:-1;;;;;24982:24:0;;16975:10;24982:24;;24974:62;;;;-1:-1:-1;;;24974:62:0;;12376:2:1;24974:62:0;;;12358:21:1;12415:2;12395:18;;;12388:30;12454:27;12434:18;;;12427:55;12499:18;;24974:62:0;12174:349:1;24974:62:0;16975:10;25049:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;25049:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;25049:53:0;;;;;;;;;;25118:48;;540:41:1;;;25049:42:0;;16975:10;25118:48;;513:18:1;25118:48:0;;;;;;;24847:327;;:::o;48479:188::-;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;48584:15:::1;:32:::0;;;;48627:15:::1;:32:::0;48479:188::o;26229:365::-;26418:41;16975:10;26451:7;26418:18;:41::i;:::-;26396:140;;;;-1:-1:-1;;;26396:140:0;;;;;;;:::i;:::-;26547:39;26561:4;26567:2;26571:7;26580:5;26547:13;:39::i;:::-;26229:365;;;;:::o;49220:227::-;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;49322:9:::1;49317:123;49341:14;:21;49337:1;:25;49317:123;;;49421:7;49384:15;:34;49400:14;49415:1;49400:17;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;49384:34:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;49384:34:0;:44;;-1:-1:-1;;49384:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49364:3;::::1;::::0;::::1;:::i;:::-;;;;49317:123;;49647:97:::0;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;49716:9:::1;:20:::0;49647:97::o;53634:327::-;28206:4;28230:16;;;:7;:16;;;;;;53707:13;;-1:-1:-1;;;;;28230:16:0;53738:49;;;;-1:-1:-1;;;53738:49:0;;12730:2:1;53738:49:0;;;12712:21:1;12769:2;12749:18;;;12742:30;-1:-1:-1;;;12788:18:1;;;12781:50;12848:18;;53738:49:0;12528:344:1;53738:49:0;53822:15;53804;;:33;53800:132;;;53885:13;53900:18;:7;:16;:18::i;:::-;53868:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53854:66;;53634:327;;;:::o;53800:132::-;-1:-1:-1;;53944:9:0;;;;;;;;;-1:-1:-1;53944:9:0;;;53634:327::o;48975:237::-;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;49081:9:::1;49076:129;49100:16;:23;49096:1;:27;49076:129;;;49186:7;49145:17;:38;49163:16;49180:1;49163:19;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;49145:38:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;49145:38:0;:48;;-1:-1:-1;;49145:48:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49125:3;::::1;::::0;::::1;:::i;:::-;;;;49076:129;;51073:2553:::0;51176:9;;51151:12;46557:14;51151:34;51143:77;;;;-1:-1:-1;;;51143:77:0;;14574:2:1;51143:77:0;;;14556:21:1;14613:2;14593:18;;;14586:30;14652:33;14632:18;;;14625:61;14703:18;;51143:77:0;14372:355:1;51143:77:0;37092:6;;-1:-1:-1;;;;;37092:6:0;51237:10;:21;51233:2098;;51325:10;51307:29;;;;:17;:29;;;;;;:46;;51339:14;;51307:46;:::i;:::-;51293:10;51275:29;;;;:17;:29;;;;;:78;;;;51428:9;;51410:14;;51390:17;;:5;:17::i;:::-;:34;;;;:::i;:::-;:47;;51382:87;;;;-1:-1:-1;;;51382:87:0;;15240:2:1;51382:87:0;;;15222:21:1;15279:2;15259:18;;;15252:30;15318;15298:18;;;15291:58;15366:18;;51382:87:0;15038:352:1;51382:87:0;51506:10;51490:27;;;;:15;:27;;;;;;;;:35;;:27;:35;51486:1527;;;51590:15;;51572;;:33;;;;:::i;:::-;51554:15;:51;51546:93;;;;-1:-1:-1;;;51546:93:0;;15597:2:1;51546:93:0;;;15579:21:1;15636:2;15616:18;;;15609:30;15675:32;15655:18;;;15648:60;15725:18;;51546:93:0;15395:354:1;51546:93:0;51700:19;;51682:15;;:37;;;;:::i;:::-;51664:15;:55;51660:573;;;51785:14;;51770:10;51752:29;;;;:17;:29;;;;;;:47;;51744:90;;;;-1:-1:-1;;;51744:90:0;;;;;;;:::i;:::-;51486:1527;;51660:573;51882:15;;51864;:33;51860:373;;;51980:18;;51963:14;;:35;;;;:::i;:::-;51948:10;51930:29;;;;:17;:29;;;;;;:68;;51922:112;;;;-1:-1:-1;;;51922:112:0;;;;;;;:::i;51860:373::-;52162:17;;52141:18;;52124:14;;:35;;;;:::i;:::-;:55;;;;:::i;:::-;52109:10;52091:29;;;;:17;:29;;;;;;:88;;52083:130;;;;-1:-1:-1;;;52083:130:0;;16316:2:1;52083:130:0;;;16298:21:1;16355:2;16335:18;;;16328:30;16394:32;16374:18;;;16367:60;16444:18;;52083:130:0;16114:354:1;51486:1527:0;52276:10;52258:29;;;;:17;:29;;;;;;;;:37;;:29;:37;52254:759;;;52360:19;;52342:15;;:37;;;;:::i;:::-;52324:15;:55;52316:101;;;;-1:-1:-1;;;52316:101:0;;16675:2:1;52316:101:0;;;16657:21:1;16714:2;16694:18;;;16687:30;16753:34;16733:18;;;16726:62;-1:-1:-1;;;16804:18:1;;;16797:32;16846:19;;52316:101:0;16473:398:1;52316:101:0;52460:15;;52442;:33;52438:339;;;52541:18;;52526:10;52508:29;;;;:17;:29;;;;;;:51;;52500:95;;;;-1:-1:-1;;;52500:95:0;;;;;;;:::i;52438:339::-;52706:17;;52685:18;;:38;;;;:::i;52254:759::-;52843:15;;52825;:33;52817:67;;;;-1:-1:-1;;;52817:67:0;;17078:2:1;52817:67:0;;;17060:21:1;17117:2;17097:18;;;17090:30;-1:-1:-1;;;17136:18:1;;;17129:52;17198:18;;52817:67:0;16876:346:1;52817:67:0;52946:17;;52931:10;52913:29;;;;:17;:29;;;;;;:50;;52905:92;;;;-1:-1:-1;;;52905:92:0;;16316:2:1;52905:92:0;;;16298:21:1;16355:2;16335:18;;;16328:30;16394:32;16374:18;;;16367:60;16444:18;;52905:92:0;16114:354:1;52905:92:0;53033:7;;:11;53029:291;;53065:17;53109:3;53098:7;;53086:9;:19;;;;:::i;:::-;53085:27;;;;:::i;:::-;53131:11;;:31;;53065:47;;-1:-1:-1;;;;;;53131:11:0;;:31;;;;;53065:47;;53131:11;:31;:11;:31;53065:47;53131:11;:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53181:15:0;;-1:-1:-1;;;;;53181:15:0;:47;53206:21;53218:9;53206;:21;:::i;:::-;53181:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53046:198;53029:291;;;53269:15;;:35;;-1:-1:-1;;;;;53269:15:0;;;;53294:9;53269:35;;;;;:15;:35;:15;:35;53294:9;53269:15;:35;;;;;;;;;;;;;;;;;;;;;53029:291;53348:9;53343:276;53367:14;53363:1;:18;53343:276;;;53403:15;53421:22;:12;46557:14;;46465:114;53421:22;53403:40;;53489:9;;53464:22;:12;46557:14;;46465:114;53464:22;:34;53460:148;;;53519:24;:12;:22;:24::i;:::-;53562:30;53572:10;53584:7;53562:9;:30::i;:::-;-1:-1:-1;53383:3:0;;;;:::i;:::-;;;;53343:276;;38038:281;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38141:22:0;::::1;38119:110;;;::::0;-1:-1:-1;;;38119:110:0;;17686:2:1;38119:110:0::1;::::0;::::1;17668:21:1::0;17725:2;17705:18;;;17698:30;17764:34;17744:18;;;17737:62;-1:-1:-1;;;17815:18:1;;;17808:36;17861:19;;38119:110:0::1;17484:402:1::0;38119:110:0::1;38266:6;::::0;38245:38:::1;::::0;-1:-1:-1;;;;;38245:38:0;;::::1;::::0;38266:6:::1;::::0;38245:38:::1;::::0;38266:6:::1;::::0;38245:38:::1;38294:6;:17:::0;;-1:-1:-1;;;;;;38294:17:0::1;-1:-1:-1::0;;;;;38294:17:0;;;::::1;::::0;;;::::1;::::0;;38038:281::o;49752:198::-;37092:6;;-1:-1:-1;;;;;37092:6:0;16975:10;37253:23;;:51;;-1:-1:-1;37280:8:0;;-1:-1:-1;;;;;37280:8:0;16975:10;37280:24;37253:51;37231:133;;;;-1:-1:-1;;;37231:133:0;;;;;;;:::i;:::-;49859:18:::1;:37:::0;;;;49907:17:::1;:35:::0;49752:198::o;21716:355::-;21863:4;-1:-1:-1;;;;;;21905:40:0;;-1:-1:-1;;;21905:40:0;;:105;;-1:-1:-1;;;;;;;21962:48:0;;-1:-1:-1;;;21962:48:0;21905:105;:158;;;-1:-1:-1;;;;;;;;;;20326:40:0;;;22027:36;20167:207;32264:174;32339:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;32339:29:0;-1:-1:-1;;;;;32339:29:0;;;;;;;;:24;;32393:23;32339:24;32393:14;:23::i;:::-;-1:-1:-1;;;;;32384:46:0;;;;;;;;;;;32264:174;;:::o;28435:452::-;28564:4;28230:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28230:16:0;28586:110;;;;-1:-1:-1;;;28586:110:0;;18093:2:1;28586:110:0;;;18075:21:1;18132:2;18112:18;;;18105:30;18171:34;18151:18;;;18144:62;-1:-1:-1;;;18222:18:1;;;18215:42;18274:19;;28586:110:0;17891:408:1;28586:110:0;28707:13;28723:23;28738:7;28723:14;:23::i;:::-;28707:39;;28776:5;-1:-1:-1;;;;;28765:16:0;:7;-1:-1:-1;;;;;28765:16:0;;:64;;;;28822:7;-1:-1:-1;;;;;28798:31:0;:20;28810:7;28798:11;:20::i;:::-;-1:-1:-1;;;;;28798:31:0;;28765:64;:113;;;-1:-1:-1;;;;;;25416:25:0;;;25387:4;25416:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28846:32;28757:122;28435:452;-1:-1:-1;;;;28435:452:0:o;31531:615::-;31704:4;-1:-1:-1;;;;;31677:31:0;:23;31692:7;31677:14;:23::i;:::-;-1:-1:-1;;;;;31677:31:0;;31655:122;;;;-1:-1:-1;;;31655:122:0;;18506:2:1;31655:122:0;;;18488:21:1;18545:2;18525:18;;;18518:30;18584:34;18564:18;;;18557:62;-1:-1:-1;;;18635:18:1;;;18628:39;18684:19;;31655:122:0;18304:405:1;31655:122:0;-1:-1:-1;;;;;31796:16:0;;31788:65;;;;-1:-1:-1;;;31788:65:0;;18916:2:1;31788:65:0;;;18898:21:1;18955:2;18935:18;;;18928:30;18994:34;18974:18;;;18967:62;-1:-1:-1;;;19045:18:1;;;19038:34;19089:19;;31788:65:0;18714:400:1;31788:65:0;31866:39;31887:4;31893:2;31897:7;31866:20;:39::i;:::-;31970:29;31987:1;31991:7;31970:8;:29::i;:::-;-1:-1:-1;;;;;32012:15:0;;;;;;:9;:15;;;;;:20;;32031:1;;32012:15;:20;;32031:1;;32012:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32043:13:0;;;;;;:9;:13;;;;;:18;;32060:1;;32043:13;:18;;32060:1;;32043:18;:::i;:::-;;;;-1:-1:-1;;32072:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32072:21:0;-1:-1:-1;;;;;32072:21:0;;;;;;;;;32111:27;;32072:16;;32111:27;;;;;;;31531:615;;;:::o;46587:117::-;46684:1;46666:7;:14;;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;;46587:117:0:o;29229:110::-;29305:26;29315:2;29319:7;29305:26;;;;;;;;;;;;:9;:26::i;27476:352::-;27633:28;27643:4;27649:2;27653:7;27633:9;:28::i;:::-;27694:48;27717:4;27723:2;27727:7;27736:5;27694:22;:48::i;:::-;27672:148;;;;-1:-1:-1;;;27672:148:0;;;;;;;:::i;17567:723::-;17623:13;17844:10;17840:53;;-1:-1:-1;;17871:10:0;;;;;;;;;;;;-1:-1:-1;;;17871:10:0;;;;;17567:723::o;17840:53::-;17918:5;17903:12;17959:78;17966:9;;17959:78;;17992:8;;;;:::i;:::-;;-1:-1:-1;18015:10:0;;-1:-1:-1;18023:2:0;18015:10;;:::i;:::-;;;17959:78;;;18047:19;18079:6;18069:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18069:17:0;;18047:39;;18097:154;18104:10;;18097:154;;18131:11;18141:1;18131:11;;:::i;:::-;;-1:-1:-1;18200:10:0;18208:2;18200:5;:10;:::i;:::-;18187:24;;:2;:24;:::i;:::-;18174:39;;18157:6;18164;18157:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;18157:56:0;;;;;;;;-1:-1:-1;18228:11:0;18237:2;18228:11;;:::i;:::-;;;18097:154;;41182:589;-1:-1:-1;;;;;41388:18:0;;41384:187;;41423:40;41455:7;42598:10;:17;;42571:24;;;;:15;:24;;;;;:44;;;42626:24;;;;;;;;;;;;42494:164;41423:40;41384:187;;;41493:2;-1:-1:-1;;;;;41485:10:0;:4;-1:-1:-1;;;;;41485:10:0;;41481:90;;41512:47;41545:4;41551:7;41512:32;:47::i;:::-;-1:-1:-1;;;;;41585:16:0;;41581:183;;41618:45;41655:7;41618:36;:45::i;41581:183::-;41691:4;-1:-1:-1;;;;;41685:10:0;:2;-1:-1:-1;;;;;41685:10:0;;41681:83;;41712:40;41740:2;41744:7;41712:27;:40::i;29566:321::-;29696:18;29702:2;29706:7;29696:5;:18::i;:::-;29747:54;29778:1;29782:2;29786:7;29795:5;29747:22;:54::i;:::-;29725:154;;;;-1:-1:-1;;;29725:154:0;;;;;;;:::i;33003:1053::-;33158:4;-1:-1:-1;;;;;33179:13:0;;8674:20;8722:8;33175:874;;33232:175;;-1:-1:-1;;;33232:175:0;;-1:-1:-1;;;;;33232:36:0;;;;;:175;;16975:10;;33326:4;;33353:7;;33383:5;;33232:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33232:175:0;;;;;;;;-1:-1:-1;;33232:175:0;;;;;;;;;;;;:::i;:::-;;;33211:783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33594:13:0;;33590:389;;33637:108;;-1:-1:-1;;;33637:108:0;;;;;;;:::i;33590:389::-;33929:6;33923:13;33914:6;33910:2;33906:15;33899:38;33211:783;-1:-1:-1;;;;;;33471:55:0;-1:-1:-1;;;33471:55:0;;-1:-1:-1;33464:62:0;;33175:874;-1:-1:-1;34033:4:0;33003:1053;;;;;;:::o;43285:1002::-;43565:22;43615:1;43590:22;43607:4;43590:16;:22::i;:::-;:26;;;;:::i;:::-;43627:18;43648:26;;;:17;:26;;;;;;43565:51;;-1:-1:-1;43781:28:0;;;43777:328;;-1:-1:-1;;;;;43848:18:0;;43826:19;43848:18;;;:12;:18;;;;;;;;:34;;;;;;;;;43899:30;;;;;;:44;;;44016:30;;:17;:30;;;;;:43;;;43777:328;-1:-1:-1;44201:26:0;;;;:17;:26;;;;;;;;44194:33;;;-1:-1:-1;;;;;44245:18:0;;;;;:12;:18;;;;;:34;;;;;;;44238:41;43285:1002::o;44582:1079::-;44860:10;:17;44835:22;;44860:21;;44880:1;;44860:21;:::i;:::-;44892:18;44913:24;;;:15;:24;;;;;;45286:10;:26;;44835:46;;-1:-1:-1;44913:24:0;;44835:46;;45286:26;;;;;;:::i;:::-;;;;;;;;;45264:48;;45350:11;45325:10;45336;45325:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;45430:28;;;:15;:28;;;;;;;:41;;;45602:24;;;;;45595:31;45637:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;44653:1008;;;44582:1079;:::o;42072:221::-;42157:14;42174:20;42191:2;42174:16;:20::i;:::-;-1:-1:-1;;;;;42205:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;42250:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;42072:221:0:o;30223:382::-;-1:-1:-1;;;;;30303:16:0;;30295:61;;;;-1:-1:-1;;;30295:61:0;;20748:2:1;30295:61:0;;;20730:21:1;;;20767:18;;;20760:30;20826:34;20806:18;;;20799:62;20878:18;;30295:61:0;20546:356:1;30295:61:0;28206:4;28230:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28230:16:0;:30;30367:58;;;;-1:-1:-1;;;30367:58:0;;21109:2:1;30367:58:0;;;21091:21:1;21148:2;21128:18;;;21121:30;21187;21167:18;;;21160:58;21235:18;;30367:58:0;20907:352:1;30367:58:0;30438:45;30467:1;30471:2;30475:7;30438:20;:45::i;:::-;-1:-1:-1;;;;;30496:13:0;;;;;;:9;:13;;;;;:18;;30513:1;;30496:13;:18;;30513:1;;30496:18;:::i;:::-;;;;-1:-1:-1;;30525:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30525:21:0;-1:-1:-1;;;;;30525:21:0;;;;;;;;30564:33;;30525:16;;;30564:33;;30525:16;;30564:33;30223:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;68:71;14:131;:::o;150:245::-;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:248::-;660:6;668;721:2;709:9;700:7;696:23;692:32;689:52;;;737:1;734;727:12;689:52;-1:-1:-1;;760:23:1;;;830:2;815:18;;;802:32;;-1:-1:-1;592:248:1:o;845:258::-;917:1;927:113;941:6;938:1;935:13;927:113;;;1017:11;;;1011:18;998:11;;;991:39;963:2;956:10;927:113;;;1058:6;1055:1;1052:13;1049:48;;;-1:-1:-1;;1093:1:1;1075:16;;1068:27;845:258::o;1108:269::-;1161:3;1199:5;1193:12;1226:6;1221:3;1214:19;1242:63;1298:6;1291:4;1286:3;1282:14;1275:4;1268:5;1264:16;1242:63;:::i;:::-;1359:2;1338:15;-1:-1:-1;;1334:29:1;1325:39;;;;1366:4;1321:50;;1108:269;-1:-1:-1;;1108:269:1:o;1382:231::-;1531:2;1520:9;1513:21;1494:4;1551:56;1603:2;1592:9;1588:18;1580:6;1551:56;:::i;1618:180::-;1677:6;1730:2;1718:9;1709:7;1705:23;1701:32;1698:52;;;1746:1;1743;1736:12;1698:52;-1:-1:-1;1769:23:1;;1618:180;-1:-1:-1;1618:180:1:o;2011:173::-;2079:20;;-1:-1:-1;;;;;2128:31:1;;2118:42;;2108:70;;2174:1;2171;2164:12;2189:254;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2357:29;2376:9;2357:29;:::i;:::-;2347:39;2433:2;2418:18;;;;2405:32;;-1:-1:-1;;;2189:254:1:o;2448:186::-;2507:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:52;;;2576:1;2573;2566:12;2528:52;2599:29;2618:9;2599:29;:::i;2821:328::-;2898:6;2906;2914;2967:2;2955:9;2946:7;2942:23;2938:32;2935:52;;;2983:1;2980;2973:12;2935:52;3006:29;3025:9;3006:29;:::i;:::-;2996:39;;3054:38;3088:2;3077:9;3073:18;3054:38;:::i;:::-;3044:48;;3139:2;3128:9;3124:18;3111:32;3101:42;;2821:328;;;;;:::o;3154:127::-;3215:10;3210:3;3206:20;3203:1;3196:31;3246:4;3243:1;3236:15;3270:4;3267:1;3260:15;3286:275;3357:2;3351:9;3422:2;3403:13;;-1:-1:-1;;3399:27:1;3387:40;;3457:18;3442:34;;3478:22;;;3439:62;3436:88;;;3504:18;;:::i;:::-;3540:2;3533:22;3286:275;;-1:-1:-1;3286:275:1:o;3566:407::-;3631:5;3665:18;3657:6;3654:30;3651:56;;;3687:18;;:::i;:::-;3725:57;3770:2;3749:15;;-1:-1:-1;;3745:29:1;3776:4;3741:40;3725:57;:::i;:::-;3716:66;;3805:6;3798:5;3791:21;3845:3;3836:6;3831:3;3827:16;3824:25;3821:45;;;3862:1;3859;3852:12;3821:45;3911:6;3906:3;3899:4;3892:5;3888:16;3875:43;3965:1;3958:4;3949:6;3942:5;3938:18;3934:29;3927:40;3566:407;;;;;:::o;3978:451::-;4047:6;4100:2;4088:9;4079:7;4075:23;4071:32;4068:52;;;4116:1;4113;4106:12;4068:52;4156:9;4143:23;4189:18;4181:6;4178:30;4175:50;;;4221:1;4218;4211:12;4175:50;4244:22;;4297:4;4289:13;;4285:27;-1:-1:-1;4275:55:1;;4326:1;4323;4316:12;4275:55;4349:74;4415:7;4410:2;4397:16;4392:2;4388;4384:11;4349:74;:::i;4434:160::-;4499:20;;4555:13;;4548:21;4538:32;;4528:60;;4584:1;4581;4574:12;4599:254;4664:6;4672;4725:2;4713:9;4704:7;4700:23;4696:32;4693:52;;;4741:1;4738;4731:12;4693:52;4764:29;4783:9;4764:29;:::i;:::-;4754:39;;4812:35;4843:2;4832:9;4828:18;4812:35;:::i;:::-;4802:45;;4599:254;;;;;:::o;4858:667::-;4953:6;4961;4969;4977;5030:3;5018:9;5009:7;5005:23;5001:33;4998:53;;;5047:1;5044;5037:12;4998:53;5070:29;5089:9;5070:29;:::i;:::-;5060:39;;5118:38;5152:2;5141:9;5137:18;5118:38;:::i;:::-;5108:48;;5203:2;5192:9;5188:18;5175:32;5165:42;;5258:2;5247:9;5243:18;5230:32;5285:18;5277:6;5274:30;5271:50;;;5317:1;5314;5307:12;5271:50;5340:22;;5393:4;5385:13;;5381:27;-1:-1:-1;5371:55:1;;5422:1;5419;5412:12;5371:55;5445:74;5511:7;5506:2;5493:16;5488:2;5484;5480:11;5445:74;:::i;:::-;5435:84;;;4858:667;;;;;;;:::o;5530:1022::-;5620:6;5628;5681:2;5669:9;5660:7;5656:23;5652:32;5649:52;;;5697:1;5694;5687:12;5649:52;5737:9;5724:23;5766:18;5807:2;5799:6;5796:14;5793:34;;;5823:1;5820;5813:12;5793:34;5861:6;5850:9;5846:22;5836:32;;5906:7;5899:4;5895:2;5891:13;5887:27;5877:55;;5928:1;5925;5918:12;5877:55;5964:2;5951:16;5986:4;6009:2;6005;6002:10;5999:36;;;6015:18;;:::i;:::-;6061:2;6058:1;6054:10;6044:20;;6084:28;6108:2;6104;6100:11;6084:28;:::i;:::-;6146:15;;;6216:11;;;6212:20;;;6177:12;;;;6244:19;;;6241:39;;;6276:1;6273;6266:12;6241:39;6300:11;;;;6320:148;6336:6;6331:3;6328:15;6320:148;;;6402:23;6421:3;6402:23;:::i;:::-;6390:36;;6353:12;;;;6446;;;;6320:148;;;6487:5;-1:-1:-1;6511:35:1;;-1:-1:-1;6527:18:1;;;6511:35;:::i;:::-;6501:45;;;;;;5530:1022;;;;;:::o;6557:260::-;6625:6;6633;6686:2;6674:9;6665:7;6661:23;6657:32;6654:52;;;6702:1;6699;6692:12;6654:52;6725:29;6744:9;6725:29;:::i;:::-;6715:39;;6773:38;6807:2;6796:9;6792:18;6773:38;:::i;6822:356::-;7024:2;7006:21;;;7043:18;;;7036:30;7102:34;7097:2;7082:18;;7075:62;7169:2;7154:18;;6822:356::o;7183:380::-;7262:1;7258:12;;;;7305;;;7326:61;;7380:4;7372:6;7368:17;7358:27;;7326:61;7433:2;7425:6;7422:14;7402:18;7399:38;7396:161;;;7479:10;7474:3;7470:20;7467:1;7460:31;7514:4;7511:1;7504:15;7542:4;7539:1;7532:15;7396:161;;7183:380;;;:::o;8808:127::-;8869:10;8864:3;8860:20;8857:1;8850:31;8900:4;8897:1;8890:15;8924:4;8921:1;8914:15;8940:125;8980:4;9008:1;9005;9002:8;8999:34;;;9013:18;;:::i;:::-;-1:-1:-1;9050:9:1;;8940:125::o;9838:413::-;10040:2;10022:21;;;10079:2;10059:18;;;10052:30;10118:34;10113:2;10098:18;;10091:62;-1:-1:-1;;;10184:2:1;10169:18;;10162:47;10241:3;10226:19;;9838:413::o;11081:127::-;11142:10;11137:3;11133:20;11130:1;11123:31;11173:4;11170:1;11163:15;11197:4;11194:1;11187:15;12034:135;12073:3;-1:-1:-1;;12094:17:1;;12091:43;;;12114:18;;:::i;:::-;-1:-1:-1;12161:1:1;12150:13;;12034:135::o;13003:185::-;13045:3;13083:5;13077:12;13098:52;13143:6;13138:3;13131:4;13124:5;13120:16;13098:52;:::i;:::-;13166:16;;;;;13003:185;-1:-1:-1;;13003:185:1:o;13193:1174::-;13369:3;13398:1;13431:6;13425:13;13461:3;13483:1;13511:9;13507:2;13503:18;13493:28;;13571:2;13560:9;13556:18;13593;13583:61;;13637:4;13629:6;13625:17;13615:27;;13583:61;13663:2;13711;13703:6;13700:14;13680:18;13677:38;13674:165;;;-1:-1:-1;;;13738:33:1;;13794:4;13791:1;13784:15;13824:4;13745:3;13812:17;13674:165;13855:18;13882:104;;;;14000:1;13995:320;;;;13848:467;;13882:104;-1:-1:-1;;13915:24:1;;13903:37;;13960:16;;;;-1:-1:-1;13882:104:1;;13995:320;12950:1;12943:14;;;12987:4;12974:18;;14090:1;14104:165;14118:6;14115:1;14112:13;14104:165;;;14196:14;;14183:11;;;14176:35;14239:16;;;;14133:10;;14104:165;;;14108:3;;14298:6;14293:3;14289:16;14282:23;;13848:467;;;;;;;14331:30;14357:3;14349:6;14331:30;:::i;:::-;14324:37;13193:1174;-1:-1:-1;;;;;13193:1174:1:o;14732:128::-;14772:3;14803:1;14799:6;14796:1;14793:13;14790:39;;;14809:18;;:::i;:::-;-1:-1:-1;14845:9:1;;14732:128::o;14865:168::-;14905:7;14971:1;14967;14963:6;14959:14;14956:1;14953:21;14948:1;14941:9;14934:17;14930:45;14927:71;;;14978:18;;:::i;:::-;-1:-1:-1;15018:9:1;;14865:168::o;15754:355::-;15956:2;15938:21;;;15995:2;15975:18;;;15968:30;16034:33;16029:2;16014:18;;16007:61;16100:2;16085:18;;15754:355::o;17227:127::-;17288:10;17283:3;17279:20;17276:1;17269:31;17319:4;17316:1;17309:15;17343:4;17340:1;17333:15;17359:120;17399:1;17425;17415:35;;17430:18;;:::i;:::-;-1:-1:-1;17464:9:1;;17359:120::o;19119:414::-;19321:2;19303:21;;;19360:2;19340:18;;;19333:30;19399:34;19394:2;19379:18;;19372:62;-1:-1:-1;;;19465:2:1;19450:18;;19443:48;19523:3;19508:19;;19119:414::o;19538:112::-;19570:1;19596;19586:35;;19601:18;;:::i;:::-;-1:-1:-1;19635:9:1;;19538:112::o;19655:500::-;-1:-1:-1;;;;;19924:15:1;;;19906:34;;19976:15;;19971:2;19956:18;;19949:43;20023:2;20008:18;;20001:34;;;20071:3;20066:2;20051:18;;20044:31;;;19849:4;;20092:57;;20129:19;;20121:6;20092:57;:::i;:::-;20084:65;19655:500;-1:-1:-1;;;;;;19655:500:1:o;20160:249::-;20229:6;20282:2;20270:9;20261:7;20257:23;20253:32;20250:52;;;20298:1;20295;20288:12;20250:52;20330:9;20324:16;20349:30;20373:5;20349:30;:::i;20414:127::-;20475:10;20470:3;20466:20;20463:1;20456:31;20506:4;20503:1;20496:15;20530:4;20527:1;20520:15
Swarm Source
ipfs://d9a133618853aff8f2c6374a062b343969f2a2d86540dfb8a5aa1fc3bd195900
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.