ERC-721
Overview
Max Total Supply
300 DRAGONEGGS
Holders
196
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DRAGONEGGSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DemonPartyDragonEggs
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-14 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (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`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (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); /** * @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: contracts/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 and Enumerable extensions */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; string private _name; string private _symbol; // nft ownership + burns data address[] public owners; uint public burnedTokens; function totalSupply() public override view returns (uint256) { return owners.length - burnedTokens; } function tokenByIndex(uint256 id) public override pure returns (uint256) { return id; } function tokenOfOwnerByIndex(address user, uint256 id) public override view returns (uint256) { uint256 ownedCount = 0; for(uint i = 0; i < owners.length; i++) { if(owners[i] == user) { if(ownedCount == id) { return i; } else { ownedCount++; } } } revert("ID_TOO_HIGH"); } // 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"); uint count; for(uint i = 0; i < owners.length; i++) { if(owner == owners[i]) { count++; } } return count; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { require(tokenId < owners.length, "ERC721: owner query for nonexistent token"); address owner = owners[tokenId]; 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}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public 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.length > tokenId && 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), "ALREADY_MINTED"); owners.push(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); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); // Clear approvals _approve(address(0), tokenId); // delete owners[tokenId]; owners[tokenId] = address(0); burnedTokens++; 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"); // Clear approvals from the previous owner _approve(address(0), tokenId); 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 /* TODO : MAKE PRIVATE */ ) public returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } } // File: contracts/DemonPartyDragonEggs.sol pragma solidity ^0.8.6; contract DemonPartyDragonEggs is ERC721, Ownable { //--------------------------------------------------------------- // CONSTANTS //--------------------------------------------------------------- uint256 public constant MAX_SUPPLY = 300; //--------------------------------------------------------------- // METADATA //--------------------------------------------------------------- string public baseURI; uint256 public startTimestamp; function tokenURI(uint256 id) public view virtual override returns (string memory) { require(_exists(id), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(baseURI, Strings.toString(id), ".json")); } //--------------------------------------------------------------- // CONSTRUCTOR //--------------------------------------------------------------- constructor() ERC721("DemonPartyDragonEggs", "DRAGONEGGS") { for(uint i = 0; i < 10; i++) { _safeMint(0x08D4bCe80056c95b1C9bc38fEC63901e3b563186, owners.length); } startTimestamp = 1652544000; } function mint() public payable { require(owners.length + 1 <= MAX_SUPPLY, "TOO_MANY_MINTS"); require(block.timestamp >= startTimestamp, "NOT_LIVE"); minters[msg.sender] += 1; require( (minters[msg.sender] ) <= 1, "ADDRESS_MAX_REACHED"); _safeMint(msg.sender, owners.length); } mapping (address => uint256) public minters; function burn(uint256 id) public { _burn(id); } //---------------------------------------------------------------- // ADMIN FUNCTIONS //---------------------------------------------------------------- function setBaseURI(string memory uri) public onlyOwner { baseURI = uri; } function setStartTimestamp(uint256 timestamp) public onlyOwner { startTimestamp = timestamp; } //--------------------------------------------------------------- // WITHDRAWAL //--------------------------------------------------------------- function withdraw(address to, uint amount) public onlyOwner { (bool success, ) = payable(to).call{value: amount}(""); require(success, "WITHDRAWAL_FAILED"); } function donate() payable public returns (bool success) { return true; } }
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":"MAX_SUPPLY","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"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"_checkOnERC721Received","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donate","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"id","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604080518082018252601481527f44656d6f6e5061727479447261676f6e4567677300000000000000000000000060208083019182528351808501909452600a845269445241474f4e4547475360b01b9084015281519192916200007991600091620004df565b5080516200008f906001906020840190620004df565b505050620000ac620000a66200010160201b60201c565b62000105565b60005b600a811015620000f257600254620000dd907308d4bce80056c95b1c9bc38fec63901e3b5631869062000157565b80620000e98162000670565b915050620000af565b5063627fd200600855620006b0565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001798282604051806020016040528060008152506200017d60201b60201c565b5050565b620001898383620001f9565b62000198600084848462000318565b620001f45760405162461bcd60e51b81526020600482015260326024820152600080516020620025e783398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084015b60405180910390fd5b505050565b6001600160a01b038216620002515760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401620001eb565b6200025c8162000481565b156200029c5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401620001eb565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600062000339846001600160a01b0316620004d060201b6200111f1760201c565b156200047557604051630a85bd0160e11b81526001600160a01b0385169063150b7a029062000373903390899088908890600401620005b8565b602060405180830381600087803b1580156200038e57600080fd5b505af1925050508015620003c1575060408051601f3d908101601f19168201909252620003be9181019062000585565b60015b6200045a573d808015620003f2576040519150601f19603f3d011682016040523d82523d6000602084013e620003f7565b606091505b508051620004525760405162461bcd60e51b81526020600482015260326024820152600080516020620025e783398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401620001eb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905062000479565b5060015b949350505050565b60025460009082108015620004ca575060006001600160a01b031660028381548110620004b257620004b26200069a565b6000918252602090912001546001600160a01b031614155b92915050565b6001600160a01b03163b151590565b828054620004ed9062000633565b90600052602060002090601f0160209004810192826200051157600085556200055c565b82601f106200052c57805160ff19168380011785556200055c565b828001600101855582156200055c579182015b828111156200055c5782518255916020019190600101906200053f565b506200056a9291506200056e565b5090565b5b808211156200056a57600081556001016200056f565b6000602082840312156200059857600080fd5b81516001600160e01b031981168114620005b157600080fd5b9392505050565b600060018060a01b038087168352602081871681850152856040850152608060608501528451915081608085015260005b82811015620006075785810182015185820160a001528101620005e9565b828111156200061a57600060a084870101525b5050601f01601f19169190910160a00195945050505050565b600181811c908216806200064857607f821691505b602082108114156200066a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200069357634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fd5b611f2780620006c06000396000f3fe6080604052600436106101e35760003560e01c80636352211e11610102578063c44bef7511610095578063ed88c68e11610064578063ed88c68e1461056a578063f2fde38b14610571578063f3fef3a314610591578063f46eccc4146105b157600080fd5b8063c44bef75146104cb578063c87b56dd146104eb578063e6fd48bc1461050b578063e985e9c51461052157600080fd5b80638da5cb5b116100d15780638da5cb5b1461045857806395d89b4114610476578063a22cb4651461048b578063b88d4fde146104ab57600080fd5b80636352211e146103ee5780636c0360eb1461040e57806370a0823114610423578063715018a61461044357600080fd5b806323b872dd1161017a57806342966c681161014957806342966c681461037a57806347b5dd541461039a5780634f6ccce7146103b057806355f804b3146103ce57600080fd5b806323b872dd146103045780632f745c591461032457806332cb6b0c1461034457806342842e0e1461035a57600080fd5b8063095ea7b3116101b6578063095ea7b3146102975780631249c58b146102b957806318160ddd146102c15780631fd01de1146102e457600080fd5b806301ffc9a7146101e8578063025e7c271461021d57806306fdde0314610255578063081812fc14610277575b600080fd5b3480156101f457600080fd5b50610208610203366004611a86565b6105de565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004611b09565b610630565b6040516001600160a01b039091168152602001610214565b34801561026157600080fd5b5061026a61065a565b6040516102149190611c62565b34801561028357600080fd5b5061023d610292366004611b09565b6106ec565b3480156102a357600080fd5b506102b76102b2366004611a5c565b610779565b005b6102b7610839565b3480156102cd57600080fd5b506102d6610952565b604051908152602001610214565b3480156102f057600080fd5b506102086102ff3660046119a4565b610969565b34801561031057600080fd5b506102b761031f366004611968565b610a77565b34801561033057600080fd5b506102d661033f366004611a5c565b610aa8565b34801561035057600080fd5b506102d661012c81565b34801561036657600080fd5b506102b7610375366004611968565b610b57565b34801561038657600080fd5b506102b7610395366004611b09565b610b72565b3480156103a657600080fd5b506102d660035481565b3480156103bc57600080fd5b506102d66103cb366004611b09565b90565b3480156103da57600080fd5b506102b76103e9366004611ac0565b610b7e565b3480156103fa57600080fd5b5061023d610409366004611b09565b610bbf565b34801561041a57600080fd5b5061026a610c56565b34801561042f57600080fd5b506102d661043e366004611913565b610ce4565b34801561044f57600080fd5b506102b7610db6565b34801561046457600080fd5b506006546001600160a01b031661023d565b34801561048257600080fd5b5061026a610dea565b34801561049757600080fd5b506102b76104a6366004611a20565b610df9565b3480156104b757600080fd5b506102b76104c63660046119a4565b610ebe565b3480156104d757600080fd5b506102b76104e6366004611b09565b610ef6565b3480156104f757600080fd5b5061026a610506366004611b09565b610f25565b34801561051757600080fd5b506102d660085481565b34801561052d57600080fd5b5061020861053c366004611935565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6001610208565b34801561057d57600080fd5b506102b761058c366004611913565b610fc6565b34801561059d57600080fd5b506102b76105ac366004611a5c565b61105e565b3480156105bd57600080fd5b506102d66105cc366004611913565b60096020526000908152604090205481565b60006001600160e01b031982166380ac58cd60e01b148061060f57506001600160e01b03198216635b5e139f60e01b145b8061062a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002818154811061064057600080fd5b6000918252602090912001546001600160a01b0316905081565b60606000805461066990611e19565b80601f016020809104026020016040519081016040528092919081815260200182805461069590611e19565b80156106e25780601f106106b7576101008083540402835291602001916106e2565b820191906000526020600020905b8154815290600101906020018083116106c557829003601f168201915b5050505050905090565b60006106f78261112e565b61075d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061078482610bbf565b9050806001600160a01b0316836001600160a01b031614156107f25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610754565b336001600160a01b038216148061080e575061080e813361053c565b61082a5760405162461bcd60e51b815260040161075490611cc7565b6108348383611178565b505050565b60025461012c9061084b906001611daa565b111561088a5760405162461bcd60e51b815260206004820152600e60248201526d544f4f5f4d414e595f4d494e545360901b6044820152606401610754565b6008544210156108c75760405162461bcd60e51b81526020600482015260086024820152674e4f545f4c49564560c01b6044820152606401610754565b3360009081526009602052604081208054600192906108e7908490611daa565b909155505033600090815260096020526040902054600110156109425760405162461bcd60e51b8152602060048201526013602482015272105111149154d4d7d3505617d4915050d21151606a1b6044820152606401610754565b6002546109509033906111e6565b565b60035460025460009161096491611dd6565b905090565b60006001600160a01b0384163b15610a6b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906109ad903390899088908890600401611c25565b602060405180830381600087803b1580156109c757600080fd5b505af19250505080156109f7575060408051601f3d908101601f191682019092526109f491810190611aa3565b60015b610a51573d808015610a25576040519150601f19603f3d011682016040523d82523d6000602084013e610a2a565b606091505b508051610a495760405162461bcd60e51b815260040161075490611c75565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610a6f565b5060015b949350505050565b610a813382611200565b610a9d5760405162461bcd60e51b815260040161075490611d59565b6108348383836112e6565b600080805b600254811015610b2057846001600160a01b031660028281548110610ad457610ad4611eaf565b6000918252602090912001546001600160a01b03161415610b0e5783821415610b0057915061062a9050565b81610b0a81611e54565b9250505b80610b1881611e54565b915050610aad565b5060405162461bcd60e51b815260206004820152600b60248201526a09288bea89e9ebe90928e960ab1b6044820152606401610754565b61083483838360405180602001604052806000815250610ebe565b610b7b8161143c565b50565b6006546001600160a01b03163314610ba85760405162461bcd60e51b815260040161075490611d24565b8051610bbb9060079060208401906117e8565b5050565b6002546000908210610c255760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610754565b600060028381548110610c3a57610c3a611eaf565b6000918252602090912001546001600160a01b03169392505050565b60078054610c6390611e19565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8f90611e19565b8015610cdc5780601f10610cb157610100808354040283529160200191610cdc565b820191906000526020600020905b815481529060010190602001808311610cbf57829003601f168201915b505050505081565b60006001600160a01b038216610d4f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610754565b6000805b600254811015610daf5760028181548110610d7057610d70611eaf565b6000918252602090912001546001600160a01b0385811691161415610d9d5781610d9981611e54565b9250505b80610da781611e54565b915050610d53565b5092915050565b6006546001600160a01b03163314610de05760405162461bcd60e51b815260040161075490611d24565b6109506000611519565b60606001805461066990611e19565b6001600160a01b038216331415610e525760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610754565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ec83383611200565b610ee45760405162461bcd60e51b815260040161075490611d59565b610ef08484848461156b565b50505050565b6006546001600160a01b03163314610f205760405162461bcd60e51b815260040161075490611d24565b600855565b6060610f308261112e565b610f945760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610754565b6007610f9f8361159e565b604051602001610fb0929190611b6a565b6040516020818303038152906040529050919050565b6006546001600160a01b03163314610ff05760405162461bcd60e51b815260040161075490611d24565b6001600160a01b0381166110555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610754565b610b7b81611519565b6006546001600160a01b031633146110885760405162461bcd60e51b815260040161075490611d24565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146110d5576040519150601f19603f3d011682016040523d82523d6000602084013e6110da565b606091505b50509050806108345760405162461bcd60e51b815260206004820152601160248201527015d2551211149055d05317d19052531151607a1b6044820152606401610754565b6001600160a01b03163b151590565b6002546000908210801561062a575060006001600160a01b03166002838154811061115b5761115b611eaf565b6000918252602090912001546001600160a01b0316141592915050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906111ad82610bbf565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610bbb82826040518060200160405280600081525061169c565b600061120b8261112e565b61126c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610754565b600061127783610bbf565b9050806001600160a01b0316846001600160a01b031614806112b25750836001600160a01b03166112a7846106ec565b6001600160a01b0316145b80610a6f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16610a6f565b826001600160a01b03166112f982610bbf565b6001600160a01b0316146113615760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610754565b6001600160a01b0382166113c35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610754565b6113ce600082611178565b81600282815481106113e2576113e2611eaf565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b600061144782610bbf565b9050336001600160a01b03821614806114655750611465813361053c565b6114815760405162461bcd60e51b815260040161075490611cc7565b61148c600083611178565b6000600283815481106114a1576114a1611eaf565b6000918252602082200180546001600160a01b0319166001600160a01b03939093169290921790915560038054916114d883611e54565b909155505060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6115768484846112e6565b61158284848484610969565b610ef05760405162461bcd60e51b815260040161075490611c75565b6060816115c25750506040805180820190915260018152600360fc1b602082015290565b8160005b81156115ec57806115d681611e54565b91506115e59050600a83611dc2565b91506115c6565b60008167ffffffffffffffff81111561160757611607611ec5565b6040519080825280601f01601f191660200182016040528015611631576020820181803683370190505b5090505b8415610a6f57611646600183611dd6565b9150611653600a86611e6f565b61165e906030611daa565b60f81b81838151811061167357611673611eaf565b60200101906001600160f81b031916908160001a905350611695600a86611dc2565b9450611635565b6116a683836116cf565b6116b36000848484610969565b6108345760405162461bcd60e51b815260040161075490611c75565b6001600160a01b0382166117255760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610754565b61172e8161112e565b1561176c5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610754565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546117f490611e19565b90600052602060002090601f016020900481019282611816576000855561185c565b82601f1061182f57805160ff191683800117855561185c565b8280016001018555821561185c579182015b8281111561185c578251825591602001919060010190611841565b5061186892915061186c565b5090565b5b80821115611868576000815560010161186d565b600067ffffffffffffffff8084111561189c5761189c611ec5565b604051601f8501601f19908116603f011681019082821181831017156118c4576118c4611ec5565b816040528093508581528686860111156118dd57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461190e57600080fd5b919050565b60006020828403121561192557600080fd5b61192e826118f7565b9392505050565b6000806040838503121561194857600080fd5b611951836118f7565b915061195f602084016118f7565b90509250929050565b60008060006060848603121561197d57600080fd5b611986846118f7565b9250611994602085016118f7565b9150604084013590509250925092565b600080600080608085870312156119ba57600080fd5b6119c3856118f7565b93506119d1602086016118f7565b925060408501359150606085013567ffffffffffffffff8111156119f457600080fd5b8501601f81018713611a0557600080fd5b611a1487823560208401611881565b91505092959194509250565b60008060408385031215611a3357600080fd5b611a3c836118f7565b915060208301358015158114611a5157600080fd5b809150509250929050565b60008060408385031215611a6f57600080fd5b611a78836118f7565b946020939093013593505050565b600060208284031215611a9857600080fd5b813561192e81611edb565b600060208284031215611ab557600080fd5b815161192e81611edb565b600060208284031215611ad257600080fd5b813567ffffffffffffffff811115611ae957600080fd5b8201601f81018413611afa57600080fd5b610a6f84823560208401611881565b600060208284031215611b1b57600080fd5b5035919050565b60008151808452611b3a816020860160208601611ded565b601f01601f19169290920160200192915050565b60008151611b60818560208601611ded565b9290920192915050565b600080845481600182811c915080831680611b8657607f831692505b6020808410821415611ba657634e487b7160e01b86526022600452602486fd5b818015611bba5760018114611bcb57611bf8565b60ff19861689528489019650611bf8565b60008b81526020902060005b86811015611bf05781548b820152908501908301611bd7565b505084890196505b505050505050611c1c611c0b8286611b4e565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611c5890830184611b22565b9695505050505050565b60208152600061192e6020830184611b22565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611dbd57611dbd611e83565b500190565b600082611dd157611dd1611e99565b500490565b600082821015611de857611de8611e83565b500390565b60005b83811015611e08578181015183820152602001611df0565b83811115610ef05750506000910152565b600181811c90821680611e2d57607f821691505b60208210811415611e4e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611e6857611e68611e83565b5060010190565b600082611e7e57611e7e611e99565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b7b57600080fdfea264697066735822122086e52b9df553cf0dc1ee06b619f79ab791584bc2e9e2626504ab08b51a20191d64736f6c634300080600334552433732313a207472616e7366657220746f206e6f6e204552433732315265
Deployed Bytecode
0x6080604052600436106101e35760003560e01c80636352211e11610102578063c44bef7511610095578063ed88c68e11610064578063ed88c68e1461056a578063f2fde38b14610571578063f3fef3a314610591578063f46eccc4146105b157600080fd5b8063c44bef75146104cb578063c87b56dd146104eb578063e6fd48bc1461050b578063e985e9c51461052157600080fd5b80638da5cb5b116100d15780638da5cb5b1461045857806395d89b4114610476578063a22cb4651461048b578063b88d4fde146104ab57600080fd5b80636352211e146103ee5780636c0360eb1461040e57806370a0823114610423578063715018a61461044357600080fd5b806323b872dd1161017a57806342966c681161014957806342966c681461037a57806347b5dd541461039a5780634f6ccce7146103b057806355f804b3146103ce57600080fd5b806323b872dd146103045780632f745c591461032457806332cb6b0c1461034457806342842e0e1461035a57600080fd5b8063095ea7b3116101b6578063095ea7b3146102975780631249c58b146102b957806318160ddd146102c15780631fd01de1146102e457600080fd5b806301ffc9a7146101e8578063025e7c271461021d57806306fdde0314610255578063081812fc14610277575b600080fd5b3480156101f457600080fd5b50610208610203366004611a86565b6105de565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004611b09565b610630565b6040516001600160a01b039091168152602001610214565b34801561026157600080fd5b5061026a61065a565b6040516102149190611c62565b34801561028357600080fd5b5061023d610292366004611b09565b6106ec565b3480156102a357600080fd5b506102b76102b2366004611a5c565b610779565b005b6102b7610839565b3480156102cd57600080fd5b506102d6610952565b604051908152602001610214565b3480156102f057600080fd5b506102086102ff3660046119a4565b610969565b34801561031057600080fd5b506102b761031f366004611968565b610a77565b34801561033057600080fd5b506102d661033f366004611a5c565b610aa8565b34801561035057600080fd5b506102d661012c81565b34801561036657600080fd5b506102b7610375366004611968565b610b57565b34801561038657600080fd5b506102b7610395366004611b09565b610b72565b3480156103a657600080fd5b506102d660035481565b3480156103bc57600080fd5b506102d66103cb366004611b09565b90565b3480156103da57600080fd5b506102b76103e9366004611ac0565b610b7e565b3480156103fa57600080fd5b5061023d610409366004611b09565b610bbf565b34801561041a57600080fd5b5061026a610c56565b34801561042f57600080fd5b506102d661043e366004611913565b610ce4565b34801561044f57600080fd5b506102b7610db6565b34801561046457600080fd5b506006546001600160a01b031661023d565b34801561048257600080fd5b5061026a610dea565b34801561049757600080fd5b506102b76104a6366004611a20565b610df9565b3480156104b757600080fd5b506102b76104c63660046119a4565b610ebe565b3480156104d757600080fd5b506102b76104e6366004611b09565b610ef6565b3480156104f757600080fd5b5061026a610506366004611b09565b610f25565b34801561051757600080fd5b506102d660085481565b34801561052d57600080fd5b5061020861053c366004611935565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6001610208565b34801561057d57600080fd5b506102b761058c366004611913565b610fc6565b34801561059d57600080fd5b506102b76105ac366004611a5c565b61105e565b3480156105bd57600080fd5b506102d66105cc366004611913565b60096020526000908152604090205481565b60006001600160e01b031982166380ac58cd60e01b148061060f57506001600160e01b03198216635b5e139f60e01b145b8061062a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002818154811061064057600080fd5b6000918252602090912001546001600160a01b0316905081565b60606000805461066990611e19565b80601f016020809104026020016040519081016040528092919081815260200182805461069590611e19565b80156106e25780601f106106b7576101008083540402835291602001916106e2565b820191906000526020600020905b8154815290600101906020018083116106c557829003601f168201915b5050505050905090565b60006106f78261112e565b61075d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061078482610bbf565b9050806001600160a01b0316836001600160a01b031614156107f25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610754565b336001600160a01b038216148061080e575061080e813361053c565b61082a5760405162461bcd60e51b815260040161075490611cc7565b6108348383611178565b505050565b60025461012c9061084b906001611daa565b111561088a5760405162461bcd60e51b815260206004820152600e60248201526d544f4f5f4d414e595f4d494e545360901b6044820152606401610754565b6008544210156108c75760405162461bcd60e51b81526020600482015260086024820152674e4f545f4c49564560c01b6044820152606401610754565b3360009081526009602052604081208054600192906108e7908490611daa565b909155505033600090815260096020526040902054600110156109425760405162461bcd60e51b8152602060048201526013602482015272105111149154d4d7d3505617d4915050d21151606a1b6044820152606401610754565b6002546109509033906111e6565b565b60035460025460009161096491611dd6565b905090565b60006001600160a01b0384163b15610a6b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906109ad903390899088908890600401611c25565b602060405180830381600087803b1580156109c757600080fd5b505af19250505080156109f7575060408051601f3d908101601f191682019092526109f491810190611aa3565b60015b610a51573d808015610a25576040519150601f19603f3d011682016040523d82523d6000602084013e610a2a565b606091505b508051610a495760405162461bcd60e51b815260040161075490611c75565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610a6f565b5060015b949350505050565b610a813382611200565b610a9d5760405162461bcd60e51b815260040161075490611d59565b6108348383836112e6565b600080805b600254811015610b2057846001600160a01b031660028281548110610ad457610ad4611eaf565b6000918252602090912001546001600160a01b03161415610b0e5783821415610b0057915061062a9050565b81610b0a81611e54565b9250505b80610b1881611e54565b915050610aad565b5060405162461bcd60e51b815260206004820152600b60248201526a09288bea89e9ebe90928e960ab1b6044820152606401610754565b61083483838360405180602001604052806000815250610ebe565b610b7b8161143c565b50565b6006546001600160a01b03163314610ba85760405162461bcd60e51b815260040161075490611d24565b8051610bbb9060079060208401906117e8565b5050565b6002546000908210610c255760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610754565b600060028381548110610c3a57610c3a611eaf565b6000918252602090912001546001600160a01b03169392505050565b60078054610c6390611e19565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8f90611e19565b8015610cdc5780601f10610cb157610100808354040283529160200191610cdc565b820191906000526020600020905b815481529060010190602001808311610cbf57829003601f168201915b505050505081565b60006001600160a01b038216610d4f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610754565b6000805b600254811015610daf5760028181548110610d7057610d70611eaf565b6000918252602090912001546001600160a01b0385811691161415610d9d5781610d9981611e54565b9250505b80610da781611e54565b915050610d53565b5092915050565b6006546001600160a01b03163314610de05760405162461bcd60e51b815260040161075490611d24565b6109506000611519565b60606001805461066990611e19565b6001600160a01b038216331415610e525760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610754565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ec83383611200565b610ee45760405162461bcd60e51b815260040161075490611d59565b610ef08484848461156b565b50505050565b6006546001600160a01b03163314610f205760405162461bcd60e51b815260040161075490611d24565b600855565b6060610f308261112e565b610f945760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610754565b6007610f9f8361159e565b604051602001610fb0929190611b6a565b6040516020818303038152906040529050919050565b6006546001600160a01b03163314610ff05760405162461bcd60e51b815260040161075490611d24565b6001600160a01b0381166110555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610754565b610b7b81611519565b6006546001600160a01b031633146110885760405162461bcd60e51b815260040161075490611d24565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146110d5576040519150601f19603f3d011682016040523d82523d6000602084013e6110da565b606091505b50509050806108345760405162461bcd60e51b815260206004820152601160248201527015d2551211149055d05317d19052531151607a1b6044820152606401610754565b6001600160a01b03163b151590565b6002546000908210801561062a575060006001600160a01b03166002838154811061115b5761115b611eaf565b6000918252602090912001546001600160a01b0316141592915050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906111ad82610bbf565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610bbb82826040518060200160405280600081525061169c565b600061120b8261112e565b61126c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610754565b600061127783610bbf565b9050806001600160a01b0316846001600160a01b031614806112b25750836001600160a01b03166112a7846106ec565b6001600160a01b0316145b80610a6f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16610a6f565b826001600160a01b03166112f982610bbf565b6001600160a01b0316146113615760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610754565b6001600160a01b0382166113c35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610754565b6113ce600082611178565b81600282815481106113e2576113e2611eaf565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b600061144782610bbf565b9050336001600160a01b03821614806114655750611465813361053c565b6114815760405162461bcd60e51b815260040161075490611cc7565b61148c600083611178565b6000600283815481106114a1576114a1611eaf565b6000918252602082200180546001600160a01b0319166001600160a01b03939093169290921790915560038054916114d883611e54565b909155505060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6115768484846112e6565b61158284848484610969565b610ef05760405162461bcd60e51b815260040161075490611c75565b6060816115c25750506040805180820190915260018152600360fc1b602082015290565b8160005b81156115ec57806115d681611e54565b91506115e59050600a83611dc2565b91506115c6565b60008167ffffffffffffffff81111561160757611607611ec5565b6040519080825280601f01601f191660200182016040528015611631576020820181803683370190505b5090505b8415610a6f57611646600183611dd6565b9150611653600a86611e6f565b61165e906030611daa565b60f81b81838151811061167357611673611eaf565b60200101906001600160f81b031916908160001a905350611695600a86611dc2565b9450611635565b6116a683836116cf565b6116b36000848484610969565b6108345760405162461bcd60e51b815260040161075490611c75565b6001600160a01b0382166117255760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610754565b61172e8161112e565b1561176c5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610754565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546117f490611e19565b90600052602060002090601f016020900481019282611816576000855561185c565b82601f1061182f57805160ff191683800117855561185c565b8280016001018555821561185c579182015b8281111561185c578251825591602001919060010190611841565b5061186892915061186c565b5090565b5b80821115611868576000815560010161186d565b600067ffffffffffffffff8084111561189c5761189c611ec5565b604051601f8501601f19908116603f011681019082821181831017156118c4576118c4611ec5565b816040528093508581528686860111156118dd57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461190e57600080fd5b919050565b60006020828403121561192557600080fd5b61192e826118f7565b9392505050565b6000806040838503121561194857600080fd5b611951836118f7565b915061195f602084016118f7565b90509250929050565b60008060006060848603121561197d57600080fd5b611986846118f7565b9250611994602085016118f7565b9150604084013590509250925092565b600080600080608085870312156119ba57600080fd5b6119c3856118f7565b93506119d1602086016118f7565b925060408501359150606085013567ffffffffffffffff8111156119f457600080fd5b8501601f81018713611a0557600080fd5b611a1487823560208401611881565b91505092959194509250565b60008060408385031215611a3357600080fd5b611a3c836118f7565b915060208301358015158114611a5157600080fd5b809150509250929050565b60008060408385031215611a6f57600080fd5b611a78836118f7565b946020939093013593505050565b600060208284031215611a9857600080fd5b813561192e81611edb565b600060208284031215611ab557600080fd5b815161192e81611edb565b600060208284031215611ad257600080fd5b813567ffffffffffffffff811115611ae957600080fd5b8201601f81018413611afa57600080fd5b610a6f84823560208401611881565b600060208284031215611b1b57600080fd5b5035919050565b60008151808452611b3a816020860160208601611ded565b601f01601f19169290920160200192915050565b60008151611b60818560208601611ded565b9290920192915050565b600080845481600182811c915080831680611b8657607f831692505b6020808410821415611ba657634e487b7160e01b86526022600452602486fd5b818015611bba5760018114611bcb57611bf8565b60ff19861689528489019650611bf8565b60008b81526020902060005b86811015611bf05781548b820152908501908301611bd7565b505084890196505b505050505050611c1c611c0b8286611b4e565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611c5890830184611b22565b9695505050505050565b60208152600061192e6020830184611b22565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611dbd57611dbd611e83565b500190565b600082611dd157611dd1611e99565b500490565b600082821015611de857611de8611e83565b500390565b60005b83811015611e08578181015183820152602001611df0565b83811115610ef05750506000910152565b600181811c90821680611e2d57607f821691505b60208210811415611e4e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611e6857611e68611e83565b5060010190565b600082611e7e57611e7e611e99565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b7b57600080fdfea264697066735822122086e52b9df553cf0dc1ee06b619f79ab791584bc2e9e2626504ab08b51a20191d64736f6c63430008060033
Deployed Bytecode Sourcemap
36197:2308:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25447:279;;;;;;;;;;-1:-1:-1;25447:279:0;;;;;:::i;:::-;;:::i;:::-;;;6995:14:1;;6988:22;6970:41;;6958:2;6943:18;25447:279:0;;;;;;;;24300:23;;;;;;;;;;-1:-1:-1;24300:23:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6293:32:1;;;6275:51;;6263:2;6248:18;24300:23:0;6230:102:1;26434:94:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27873:211::-;;;;;;;;;;-1:-1:-1;27873:211:0;;;;;:::i;:::-;;:::i;27440:377::-;;;;;;;;;;-1:-1:-1;27440:377:0;;;;;:::i;:::-;;:::i;:::-;;37306:306;;;:::i;24359:110::-;;;;;;;;;;;;;:::i;:::-;;;15473:25:1;;;15461:2;15446:18;24359:110:0;15428:76:1;35407:699:0;;;;;;;;;;-1:-1:-1;35407:699:0;;;;;:::i;:::-;;:::i;28703:311::-;;;;;;;;;;-1:-1:-1;28703:311:0;;;;;:::i;:::-;;:::i;24574:360::-;;;;;;;;;;-1:-1:-1;24574:360:0;;;;;:::i;:::-;;:::i;36408:40::-;;;;;;;;;;;;36445:3;36408:40;;29075:165;;;;;;;;;;-1:-1:-1;29075:165:0;;;;;:::i;:::-;;:::i;37668:55::-;;;;;;;;;;-1:-1:-1;37668:55:0;;;;;:::i;:::-;;:::i;24328:24::-;;;;;;;;;;;;;;;;24475:95;;;;;;;;;;-1:-1:-1;24475:95:0;;;;;:::i;:::-;24562:2;24475:95;37894:82;;;;;;;;;;-1:-1:-1;37894:82:0;;;;;:::i;:::-;;:::i;26149:228::-;;;;;;;;;;-1:-1:-1;26149:228:0;;;;;:::i;:::-;;:::i;36609:21::-;;;;;;;;;;;;;:::i;25780:317::-;;;;;;;;;;-1:-1:-1;25780:317:0;;;;;:::i;:::-;;:::i;4730:103::-;;;;;;;;;;;;;:::i;4079:87::-;;;;;;;;;;-1:-1:-1;4152:6:0;;-1:-1:-1;;;;;4152:6:0;4079:87;;26587:98;;;;;;;;;;;;;:::i;28146:281::-;;;;;;;;;;-1:-1:-1;28146:281:0;;;;;:::i;:::-;;:::i;29301:300::-;;;;;;;;;;-1:-1:-1;29301:300:0;;;;;:::i;:::-;;:::i;37980:102::-;;;;;;;;;;-1:-1:-1;37980:102:0;;;;;:::i;:::-;;:::i;36671:245::-;;;;;;;;;;-1:-1:-1;36671:245:0;;;;;:::i;:::-;;:::i;36635:29::-;;;;;;;;;;;;;;;;28488:158;;;;;;;;;;-1:-1:-1;28488:158:0;;;;;:::i;:::-;-1:-1:-1;;;;;28605:25:0;;;28585:4;28605:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28488:158;38422:80;38492:4;38422:80;;4988:201;;;;;;;;;;-1:-1:-1;4988:201:0;;;;;:::i;:::-;;:::i;38245:171::-;;;;;;;;;;-1:-1:-1;38245:171:0;;;;;:::i;:::-;;:::i;37618:43::-;;;;;;;;;;-1:-1:-1;37618:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;25447:279;25549:4;-1:-1:-1;;;;;;25574:40:0;;-1:-1:-1;;;25574:40:0;;:99;;-1:-1:-1;;;;;;;25625:48:0;;-1:-1:-1;;;25625:48:0;25574:99;:146;;;-1:-1:-1;;;;;;;;;;16995:40:0;;;25684:36;25562:158;25447:279;-1:-1:-1;;25447:279:0:o;24300:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24300:23:0;;-1:-1:-1;24300:23:0;:::o;26434:94::-;26488:13;26517:5;26510:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26434:94;:::o;27873:211::-;27949:7;27973:16;27981:7;27973;:16::i;:::-;27965:73;;;;-1:-1:-1;;;27965:73:0;;11744:2:1;27965:73:0;;;11726:21:1;11783:2;11763:18;;;11756:30;11822:34;11802:18;;;11795:62;-1:-1:-1;;;11873:18:1;;;11866:42;11925:19;;27965:73:0;;;;;;;;;-1:-1:-1;28054:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28054:24:0;;27873:211::o;27440:377::-;27517:13;27533:23;27548:7;27533:14;:23::i;:::-;27517:39;;27577:5;-1:-1:-1;;;;;27571:11:0;:2;-1:-1:-1;;;;;27571:11:0;;;27563:57;;;;-1:-1:-1;;;27563:57:0;;13690:2:1;27563:57:0;;;13672:21:1;13729:2;13709:18;;;13702:30;13768:34;13748:18;;;13741:62;-1:-1:-1;;;13819:18:1;;;13812:31;13860:19;;27563:57:0;13662:223:1;27563:57:0;2883:10;-1:-1:-1;;;;;27645:21:0;;;;:62;;-1:-1:-1;27670:37:0;27687:5;2883:10;28488:158;:::i;27670:37::-;27629:152;;;;-1:-1:-1;;;27629:152:0;;;;;;;:::i;:::-;27790:21;27799:2;27803:7;27790:8;:21::i;:::-;27510:307;27440:377;;:::o;37306:306::-;37352:6;:13;36445:3;;37352:17;;37368:1;37352:17;:::i;:::-;:31;;37344:58;;;;-1:-1:-1;;;37344:58:0;;7448:2:1;37344:58:0;;;7430:21:1;7487:2;7467:18;;;7460:30;-1:-1:-1;;;7506:18:1;;;7499:44;7560:18;;37344:58:0;7420:164:1;37344:58:0;37436:14;;37417:15;:33;;37409:54;;;;-1:-1:-1;;;37409:54:0;;15193:2:1;37409:54:0;;;15175:21:1;15232:1;15212:18;;;15205:29;-1:-1:-1;;;15250:18:1;;;15243:38;15298:18;;37409:54:0;15165:157:1;37409:54:0;37480:10;37472:19;;;;:7;:19;;;;;:24;;37495:1;;37472:19;:24;;37495:1;;37472:24;:::i;:::-;;;;-1:-1:-1;;37521:10:0;37513:19;;;;:7;:19;;;;;;37538:1;-1:-1:-1;37512:27:0;37503:60;;;;-1:-1:-1;;;37503:60:0;;7791:2:1;37503:60:0;;;7773:21:1;7830:2;7810:18;;;7803:30;-1:-1:-1;;;7849:18:1;;;7842:49;7908:18;;37503:60:0;7763:169:1;37503:60:0;37592:6;:13;37570:36;;37580:10;;37570:9;:36::i;:::-;37306:306::o;24359:110::-;24451:12;;24435:6;:13;24412:7;;24435:28;;;:::i;:::-;24428:35;;24359:110;:::o;35407:699::-;35574:4;-1:-1:-1;;;;;35591:13:0;;7075:19;:23;35587:514;;35621:72;;-1:-1:-1;;;35621:72:0;;-1:-1:-1;;;;;35621:36:0;;;;;:72;;2883:10;;35672:4;;35678:7;;35687:5;;35621:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35621:72:0;;;;;;;;-1:-1:-1;;35621:72:0;;;;;;;;;;;;:::i;:::-;;;35617:443;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35841:13:0;;35837:214;;35874:60;;-1:-1:-1;;;35874:60:0;;;;;;;:::i;35837:214::-;36019:6;36013:13;36004:6;36000:2;35996:15;35989:38;35617:443;-1:-1:-1;;;;;;35736:51:0;-1:-1:-1;;;35736:51:0;;-1:-1:-1;35729:58:0;;35587:514;-1:-1:-1;36089:4:0;35587:514;35407:699;;;;;;:::o;28703:311::-;28876:41;2883:10;28909:7;28876:18;:41::i;:::-;28868:103;;;;-1:-1:-1;;;28868:103:0;;;;;;;:::i;:::-;28980:28;28990:4;28996:2;29000:7;28980:9;:28::i;24574:360::-;24659:7;;;24704:195;24724:6;:13;24720:17;;24704:195;;;24769:4;-1:-1:-1;;;;;24756:17:0;:6;24763:1;24756:9;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24756:9:0;:17;24753:139;;;24803:2;24789:10;:16;24786:97;;;24827:1;-1:-1:-1;24820:8:0;;-1:-1:-1;24820:8:0;24786:97;24859:12;;;;:::i;:::-;;;;24786:97;24739:3;;;;:::i;:::-;;;;24704:195;;;-1:-1:-1;24907:21:0;;-1:-1:-1;;;24907:21:0;;14510:2:1;24907:21:0;;;14492::1;14549:2;14529:18;;;14522:30;-1:-1:-1;;;14568:18:1;;;14561:41;14619:18;;24907:21:0;14482:161:1;29075:165:0;29195:39;29212:4;29218:2;29222:7;29195:39;;;;;;;;;;;;:16;:39::i;37668:55::-;37708:9;37714:2;37708:5;:9::i;:::-;37668:55;:::o;37894:82::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;37957:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;;37894:82:::0;:::o;26149:228::-;26255:6;:13;26221:7;;26245:23;;26237:77;;;;-1:-1:-1;;;26237:77:0;;10973:2:1;26237:77:0;;;10955:21:1;11012:2;10992:18;;;10985:30;11051:34;11031:18;;;11024:62;-1:-1:-1;;;11102:18:1;;;11095:39;11151:19;;26237:77:0;10945:231:1;26237:77:0;26321:13;26337:6;26344:7;26337:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;26337:15:0;;26149:228;-1:-1:-1;;;26149:228:0:o;36609:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25780:317::-;25852:7;-1:-1:-1;;;;;25876:19:0;;25868:74;;;;-1:-1:-1;;;25868:74:0;;10562:2:1;25868:74:0;;;10544:21:1;10601:2;10581:18;;;10574:30;10640:34;10620:18;;;10613:62;-1:-1:-1;;;10691:18:1;;;10684:40;10741:19;;25868:74:0;10534:232:1;25868:74:0;25949:10;;25966:107;25986:6;:13;25982:17;;25966:107;;;26027:6;26034:1;26027:9;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;26018:18:0;;;26027:9;;26018:18;26015:51;;;26049:7;;;;:::i;:::-;;;;26015:51;26001:3;;;;:::i;:::-;;;;25966:107;;;-1:-1:-1;26086:5:0;25780:317;-1:-1:-1;;25780:317:0:o;4730:103::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;4795:30:::1;4822:1;4795:18;:30::i;26587:98::-:0;26643:13;26672:7;26665:14;;;;;:::i;28146:281::-;-1:-1:-1;;;;;28245:24:0;;2883:10;28245:24;;28237:62;;;;-1:-1:-1;;;28237:62:0;;9370:2:1;28237:62:0;;;9352:21:1;9409:2;9389:18;;;9382:30;9448:27;9428:18;;;9421:55;9493:18;;28237:62:0;9342:175:1;28237:62:0;2883:10;28308:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;28308:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;28308:53:0;;;;;;;;;;28373:48;;6970:41:1;;;28308:42:0;;2883:10;28373:48;;6943:18:1;28373:48:0;;;;;;;28146:281;;:::o;29301:300::-;29454:41;2883:10;29487:7;29454:18;:41::i;:::-;29446:103;;;;-1:-1:-1;;;29446:103:0;;;;;;;:::i;:::-;29556:39;29570:4;29576:2;29580:7;29589:5;29556:13;:39::i;:::-;29301:300;;;;:::o;37980:102::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;38050:14:::1;:26:::0;37980:102::o;36671:245::-;36739:13;36769:11;36777:2;36769:7;:11::i;:::-;36761:71;;;;-1:-1:-1;;;36761:71:0;;13274:2:1;36761:71:0;;;13256:21:1;13313:2;13293:18;;;13286:30;13352:34;13332:18;;;13325:62;-1:-1:-1;;;13403:18:1;;;13396:45;13458:19;;36761:71:0;13246:237:1;36761:71:0;36870:7;36879:20;36896:2;36879:16;:20::i;:::-;36853:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36839:71;;36671:245;;;:::o;4988:201::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5077:22:0;::::1;5069:73;;;::::0;-1:-1:-1;;;5069:73:0;;8558:2:1;5069:73:0::1;::::0;::::1;8540:21:1::0;8597:2;8577:18;;;8570:30;8636:34;8616:18;;;8609:62;-1:-1:-1;;;8687:18:1;;;8680:36;8733:19;;5069:73:0::1;8530:228:1::0;5069:73:0::1;5153:28;5172:8;5153:18;:28::i;38245:171::-:0;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;38313:12:::1;38339:2;-1:-1:-1::0;;;;;38331:16:0::1;38355:6;38331:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38312:54;;;38381:7;38373:37;;;::::0;-1:-1:-1;;;38373:37:0;;12518:2:1;38373:37:0::1;::::0;::::1;12500:21:1::0;12557:2;12537:18;;;12530:30;-1:-1:-1;;;12576:18:1;;;12569:47;12633:18;;38373:37:0::1;12490:167:1::0;6780:326:0;-1:-1:-1;;;;;7075:19:0;;:23;;;6780:326::o;31041:147::-;31126:6;:13;31106:4;;31126:23;-1:-1:-1;31126:56:0;;;;;31180:1;-1:-1:-1;;;;;31153:29:0;:6;31160:7;31153:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;31153:15:0;:29;;31119:63;31041:147;-1:-1:-1;;31041:147:0:o;34697:164::-;34768:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34768:29:0;-1:-1:-1;;;;;34768:29:0;;;;;;;;:24;;34818:23;34768:24;34818:14;:23::i;:::-;-1:-1:-1;;;;;34809:46:0;;;;;;;;;;;34697:164;;:::o;32000:104::-;32072:26;32082:2;32086:7;32072:26;;;;;;;;;;;;:9;:26::i;31341:334::-;31434:4;31455:16;31463:7;31455;:16::i;:::-;31447:73;;;;-1:-1:-1;;;31447:73:0;;9724:2:1;31447:73:0;;;9706:21:1;9763:2;9743:18;;;9736:30;9802:34;9782:18;;;9775:62;-1:-1:-1;;;9853:18:1;;;9846:42;9905:19;;31447:73:0;9696:234:1;31447:73:0;31527:13;31543:23;31558:7;31543:14;:23::i;:::-;31527:39;;31592:5;-1:-1:-1;;;;;31581:16:0;:7;-1:-1:-1;;;;;31581:16:0;;:51;;;;31625:7;-1:-1:-1;;;;;31601:31:0;:20;31613:7;31601:11;:20::i;:::-;-1:-1:-1;;;;;31601:31:0;;31581:51;:87;;;-1:-1:-1;;;;;;28605:25:0;;;28585:4;28605:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31636:32;28488:158;34166:425;34307:4;-1:-1:-1;;;;;34280:31:0;:23;34295:7;34280:14;:23::i;:::-;-1:-1:-1;;;;;34280:31:0;;34272:85;;;;-1:-1:-1;;;34272:85:0;;12864:2:1;34272:85:0;;;12846:21:1;12903:2;12883:18;;;12876:30;12942:34;12922:18;;;12915:62;-1:-1:-1;;;12993:18:1;;;12986:39;13042:19;;34272:85:0;12836:231:1;34272:85:0;-1:-1:-1;;;;;34372:16:0;;34364:65;;;;-1:-1:-1;;;34364:65:0;;8965:2:1;34364:65:0;;;8947:21:1;9004:2;8984:18;;;8977:30;9043:34;9023:18;;;9016:62;-1:-1:-1;;;9094:18:1;;;9087:34;9138:19;;34364:65:0;8937:226:1;34364:65:0;34486:29;34503:1;34507:7;34486:8;:29::i;:::-;34542:2;34524:6;34531:7;34524:15;;;;;;;;:::i;:::-;;;;;;;;;:20;;-1:-1:-1;;;;;;34524:20:0;-1:-1:-1;;;;;34524:20:0;;;;;;34558:27;;34577:7;;34558:27;;;;;;;;;;34524:15;34558:27;34166:425;;;:::o;33383:464::-;33439:13;33455:23;33470:7;33455:14;:23::i;:::-;33439:39;-1:-1:-1;2883:10:0;-1:-1:-1;;;;;33503:21:0;;;;:62;;-1:-1:-1;33528:37:0;33545:5;2883:10;28488:158;:::i;33528:37::-;33487:152;;;;-1:-1:-1;;;33487:152:0;;;;;;;:::i;:::-;33672:29;33689:1;33693:7;33672:8;:29::i;:::-;33768:1;33742:6;33749:7;33742:15;;;;;;;;:::i;:::-;;;;;;;;;:28;;-1:-1:-1;;;;;;33742:28:0;-1:-1:-1;;;;;33742:28:0;;;;;;;;;;;33777:12;:14;;;;;;:::i;:::-;;;;-1:-1:-1;;33805:36:0;;33833:7;;33829:1;;-1:-1:-1;;;;;33805:36:0;;;;;33829:1;;33805:36;33432:415;33383:464;:::o;5349:191::-;5442:6;;;-1:-1:-1;;;;;5459:17:0;;;-1:-1:-1;;;;;;5459:17:0;;;;;;;5492:40;;5442:6;;;5459:17;5442:6;;5492:40;;5423:16;;5492:40;5412:128;5349:191;:::o;30458:287::-;30593:28;30603:4;30609:2;30613:7;30593:9;:28::i;:::-;30636:48;30659:4;30665:2;30669:7;30678:5;30636:22;:48::i;:::-;30628:111;;;;-1:-1:-1;;;30628:111:0;;;;;;;:::i;365:723::-;421:13;642:10;638:53;;-1:-1:-1;;669:10:0;;;;;;;;;;;;-1:-1:-1;;;669:10:0;;;;;365:723::o;638:53::-;716:5;701:12;757:78;764:9;;757:78;;790:8;;;;:::i;:::-;;-1:-1:-1;813:10:0;;-1:-1:-1;821:2:0;813:10;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;867:17:0;;845:39;;895:154;902:10;;895:154;;929:11;939:1;929:11;;:::i;:::-;;-1:-1:-1;998:10:0;1006:2;998:5;:10;:::i;:::-;985:24;;:2;:24;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;955:56:0;;;;;;;;-1:-1:-1;1026:11:0;1035:2;1026:11;;:::i;:::-;;;895:154;;32320:281;32432:18;32438:2;32442:7;32432:5;:18::i;:::-;32473:54;32504:1;32508:2;32512:7;32521:5;32473:22;:54::i;:::-;32457:138;;;;-1:-1:-1;;;32457:138:0;;;;;;;:::i;32916:255::-;-1:-1:-1;;;;;32992:16:0;;32984:61;;;;-1:-1:-1;;;32984:61:0;;11383:2:1;32984:61:0;;;11365:21:1;;;11402:18;;;11395:30;11461:34;11441:18;;;11434:62;11513:18;;32984:61:0;11355:182:1;32984:61:0;33061:16;33069:7;33061;:16::i;:::-;33060:17;33052:44;;;;-1:-1:-1;;;33052:44:0;;14850:2:1;33052:44:0;;;14832:21:1;14889:2;14869:18;;;14862:30;-1:-1:-1;;;14908:18:1;;;14901:44;14962:18;;33052:44:0;14822:164:1;33052:44:0;33105:6;:15;;;;;;;-1:-1:-1;33105:15:0;;;;;;;-1:-1:-1;;;;;;33105:15:0;-1:-1:-1;;;;;33105:15:0;;;;;;;;33132:33;;33157:7;;-1:-1:-1;33132:33:0;;-1:-1:-1;;33132:33:0;32916:255;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:186::-;887:6;940:2;928:9;919:7;915:23;911:32;908:2;;;956:1;953;946:12;908:2;979:29;998:9;979:29;:::i;:::-;969:39;898:116;-1:-1:-1;;;898:116:1:o;1019:260::-;1087:6;1095;1148:2;1136:9;1127:7;1123:23;1119:32;1116:2;;;1164:1;1161;1154:12;1116:2;1187:29;1206:9;1187:29;:::i;:::-;1177:39;;1235:38;1269:2;1258:9;1254:18;1235:38;:::i;:::-;1225:48;;1106:173;;;;;:::o;1284:328::-;1361:6;1369;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:2;;;1446:1;1443;1436:12;1398:2;1469:29;1488:9;1469:29;:::i;:::-;1459:39;;1517:38;1551:2;1540:9;1536:18;1517:38;:::i;:::-;1507:48;;1602:2;1591:9;1587:18;1574:32;1564:42;;1388:224;;;;;:::o;1617:666::-;1712:6;1720;1728;1736;1789:3;1777:9;1768:7;1764:23;1760:33;1757:2;;;1806:1;1803;1796:12;1757:2;1829:29;1848:9;1829:29;:::i;:::-;1819:39;;1877:38;1911:2;1900:9;1896:18;1877:38;:::i;:::-;1867:48;;1962:2;1951:9;1947:18;1934:32;1924:42;;2017:2;2006:9;2002:18;1989:32;2044:18;2036:6;2033:30;2030:2;;;2076:1;2073;2066:12;2030:2;2099:22;;2152:4;2144:13;;2140:27;-1:-1:-1;2130:2:1;;2181:1;2178;2171:12;2130:2;2204:73;2269:7;2264:2;2251:16;2246:2;2242;2238:11;2204:73;:::i;:::-;2194:83;;;1747:536;;;;;;;:::o;2288:347::-;2353:6;2361;2414:2;2402:9;2393:7;2389:23;2385:32;2382:2;;;2430:1;2427;2420:12;2382:2;2453:29;2472:9;2453:29;:::i;:::-;2443:39;;2532:2;2521:9;2517:18;2504:32;2579:5;2572:13;2565:21;2558:5;2555:32;2545:2;;2601:1;2598;2591:12;2545:2;2624:5;2614:15;;;2372:263;;;;;:::o;2640:254::-;2708:6;2716;2769:2;2757:9;2748:7;2744:23;2740:32;2737:2;;;2785:1;2782;2775:12;2737:2;2808:29;2827:9;2808:29;:::i;:::-;2798:39;2884:2;2869:18;;;;2856:32;;-1:-1:-1;;;2727:167:1:o;2899:245::-;2957:6;3010:2;2998:9;2989:7;2985:23;2981:32;2978:2;;;3026:1;3023;3016:12;2978:2;3065:9;3052:23;3084:30;3108:5;3084:30;:::i;3149:249::-;3218:6;3271:2;3259:9;3250:7;3246:23;3242:32;3239:2;;;3287:1;3284;3277:12;3239:2;3319:9;3313:16;3338:30;3362:5;3338:30;:::i;3403:450::-;3472:6;3525:2;3513:9;3504:7;3500:23;3496:32;3493:2;;;3541:1;3538;3531:12;3493:2;3581:9;3568:23;3614:18;3606:6;3603:30;3600:2;;;3646:1;3643;3636:12;3600:2;3669:22;;3722:4;3714:13;;3710:27;-1:-1:-1;3700:2:1;;3751:1;3748;3741:12;3700:2;3774:73;3839:7;3834:2;3821:16;3816:2;3812;3808:11;3774:73;:::i;3858:180::-;3917:6;3970:2;3958:9;3949:7;3945:23;3941:32;3938:2;;;3986:1;3983;3976:12;3938:2;-1:-1:-1;4009:23:1;;3928:110;-1:-1:-1;3928:110:1:o;4043:257::-;4084:3;4122:5;4116:12;4149:6;4144:3;4137:19;4165:63;4221:6;4214:4;4209:3;4205:14;4198:4;4191:5;4187:16;4165:63;:::i;:::-;4282:2;4261:15;-1:-1:-1;;4257:29:1;4248:39;;;;4289:4;4244:50;;4092:208;-1:-1:-1;;4092:208:1:o;4305:185::-;4347:3;4385:5;4379:12;4400:52;4445:6;4440:3;4433:4;4426:5;4422:16;4400:52;:::i;:::-;4468:16;;;;;4355:135;-1:-1:-1;;4355:135:1:o;4613:1301::-;4890:3;4919:1;4952:6;4946:13;4982:3;5004:1;5032:9;5028:2;5024:18;5014:28;;5092:2;5081:9;5077:18;5114;5104:2;;5158:4;5150:6;5146:17;5136:27;;5104:2;5184;5232;5224:6;5221:14;5201:18;5198:38;5195:2;;;-1:-1:-1;;;5259:33:1;;5315:4;5312:1;5305:15;5345:4;5266:3;5333:17;5195:2;5376:18;5403:104;;;;5521:1;5516:320;;;;5369:467;;5403:104;-1:-1:-1;;5436:24:1;;5424:37;;5481:16;;;;-1:-1:-1;5403:104:1;;5516:320;15582:1;15575:14;;;15619:4;15606:18;;5611:1;5625:165;5639:6;5636:1;5633:13;5625:165;;;5717:14;;5704:11;;;5697:35;5760:16;;;;5654:10;;5625:165;;;5629:3;;5819:6;5814:3;5810:16;5803:23;;5369:467;;;;;;;5852:56;5877:30;5903:3;5895:6;5877:30;:::i;:::-;-1:-1:-1;;;4555:20:1;;4600:1;4591:11;;4545:63;5852:56;5845:63;4898:1016;-1:-1:-1;;;;;4898:1016:1:o;6337:488::-;-1:-1:-1;;;;;6606:15:1;;;6588:34;;6658:15;;6653:2;6638:18;;6631:43;6705:2;6690:18;;6683:34;;;6753:3;6748:2;6733:18;;6726:31;;;6531:4;;6774:45;;6799:19;;6791:6;6774:45;:::i;:::-;6766:53;6540:285;-1:-1:-1;;;;;;6540:285:1:o;7022:219::-;7171:2;7160:9;7153:21;7134:4;7191:44;7231:2;7220:9;7216:18;7208:6;7191:44;:::i;7937:414::-;8139:2;8121:21;;;8178:2;8158:18;;;8151:30;8217:34;8212:2;8197:18;;8190:62;-1:-1:-1;;;8283:2:1;8268:18;;8261:48;8341:3;8326:19;;8111:240::o;9935:420::-;10137:2;10119:21;;;10176:2;10156:18;;;10149:30;10215:34;10210:2;10195:18;;10188:62;10286:26;10281:2;10266:18;;10259:54;10345:3;10330:19;;10109:246::o;11955:356::-;12157:2;12139:21;;;12176:18;;;12169:30;12235:34;12230:2;12215:18;;12208:62;12302:2;12287:18;;12129:182::o;13890:413::-;14092:2;14074:21;;;14131:2;14111:18;;;14104:30;14170:34;14165:2;14150:18;;14143:62;-1:-1:-1;;;14236:2:1;14221:18;;14214:47;14293:3;14278:19;;14064:239::o;15635:128::-;15675:3;15706:1;15702:6;15699:1;15696:13;15693:2;;;15712:18;;:::i;:::-;-1:-1:-1;15748:9:1;;15683:80::o;15768:120::-;15808:1;15834;15824:2;;15839:18;;:::i;:::-;-1:-1:-1;15873:9:1;;15814:74::o;15893:125::-;15933:4;15961:1;15958;15955:8;15952:2;;;15966:18;;:::i;:::-;-1:-1:-1;16003:9:1;;15942:76::o;16023:258::-;16095:1;16105:113;16119:6;16116:1;16113:13;16105:113;;;16195:11;;;16189:18;16176:11;;;16169:39;16141:2;16134:10;16105:113;;;16236:6;16233:1;16230:13;16227:2;;;-1:-1:-1;;16271:1:1;16253:16;;16246:27;16076:205::o;16286:380::-;16365:1;16361:12;;;;16408;;;16429:2;;16483:4;16475:6;16471:17;16461:27;;16429:2;16536;16528:6;16525:14;16505:18;16502:38;16499:2;;;16582:10;16577:3;16573:20;16570:1;16563:31;16617:4;16614:1;16607:15;16645:4;16642:1;16635:15;16499:2;;16341:325;;;:::o;16671:135::-;16710:3;-1:-1:-1;;16731:17:1;;16728:2;;;16751:18;;:::i;:::-;-1:-1:-1;16798:1:1;16787:13;;16718:88::o;16811:112::-;16843:1;16869;16859:2;;16874:18;;:::i;:::-;-1:-1:-1;16908:9:1;;16849:74::o;16928:127::-;16989:10;16984:3;16980:20;16977:1;16970:31;17020:4;17017:1;17010:15;17044:4;17041:1;17034:15;17060:127;17121:10;17116:3;17112:20;17109:1;17102:31;17152:4;17149:1;17142:15;17176:4;17173:1;17166:15;17192:127;17253:10;17248:3;17244:20;17241:1;17234:31;17284:4;17281:1;17274:15;17308:4;17305:1;17298:15;17324:127;17385:10;17380:3;17376:20;17373:1;17366:31;17416:4;17413:1;17406:15;17440:4;17437:1;17430:15;17456:131;-1:-1:-1;;;;;;17530:32:1;;17520:43;;17510:2;;17577:1;17574;17567:12
Swarm Source
ipfs://86e52b9df553cf0dc1ee06b619f79ab791584bc2e9e2626504ab08b51a20191d
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.