Overview
ETH Balance
0.001 ETH
Eth Value
$3.04 (@ $3,039.52/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 338 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 20707866 | 61 days ago | IN | 0 ETH | 0.00022777 | ||||
Safe Transfer Fr... | 20707817 | 61 days ago | IN | 0 ETH | 0.00012173 | ||||
Set Approval For... | 19998319 | 160 days ago | IN | 0 ETH | 0.00102425 | ||||
Transfer From | 19386120 | 246 days ago | IN | 0 ETH | 0.00892508 | ||||
Set Approval For... | 19386117 | 246 days ago | IN | 0 ETH | 0.00409962 | ||||
Safe Transfer Fr... | 19378055 | 247 days ago | IN | 0 ETH | 0.00803777 | ||||
Set Approval For... | 19160363 | 278 days ago | IN | 0 ETH | 0.00069224 | ||||
Safe Transfer Fr... | 18964849 | 305 days ago | IN | 0 ETH | 0.002748 | ||||
Safe Transfer Fr... | 18964845 | 305 days ago | IN | 0 ETH | 0.00235198 | ||||
Safe Transfer Fr... | 18964843 | 305 days ago | IN | 0 ETH | 0.00220011 | ||||
Safe Transfer Fr... | 18964841 | 305 days ago | IN | 0 ETH | 0.00236738 | ||||
Safe Transfer Fr... | 18964797 | 305 days ago | IN | 0 ETH | 0.00261442 | ||||
Transfer From | 18770688 | 332 days ago | IN | 0 ETH | 0.00785727 | ||||
Set Approval For... | 18594065 | 357 days ago | IN | 0 ETH | 0.0011413 | ||||
Set Approval For... | 17827948 | 464 days ago | IN | 0 ETH | 0.00151548 | ||||
Transfer From | 17792195 | 469 days ago | IN | 0 ETH | 0.00308058 | ||||
Set Approval For... | 17780836 | 471 days ago | IN | 0 ETH | 0.00043584 | ||||
Transfer From | 17779368 | 471 days ago | IN | 0 ETH | 0.00278753 | ||||
Set Approval For... | 17719243 | 480 days ago | IN | 0 ETH | 0.0020709 | ||||
Set Approval For... | 17666009 | 487 days ago | IN | 0 ETH | 0.0008664 | ||||
Set Approval For... | 17307488 | 537 days ago | IN | 0 ETH | 0.00125777 | ||||
Set Approval For... | 17174461 | 556 days ago | IN | 0 ETH | 0.00302794 | ||||
Set Approval For... | 17130728 | 562 days ago | IN | 0 ETH | 0.00104033 | ||||
Set Approval For... | 16835643 | 604 days ago | IN | 0 ETH | 0.00114086 | ||||
Set Approval For... | 16780096 | 612 days ago | IN | 0 ETH | 0.00160218 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
KibaGenesis
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-28 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: node_modules\openzeppelin-solidity\contracts\token\ERC721\IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: node_modules\openzeppelin-solidity\contracts\token\ERC721\IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: node_modules\openzeppelin-solidity\contracts\token\ERC721\extensions\IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: node_modules\openzeppelin-solidity\contracts\utils\Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: value}( data ); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: node_modules\openzeppelin-solidity\contracts\utils\Context.sol pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: node_modules\openzeppelin-solidity\contracts\utils\Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: node_modules\openzeppelin-solidity\contracts\utils\introspection\ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: node_modules\openzeppelin-solidity\contracts\token\ERC721\ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: node_modules\openzeppelin-solidity\contracts\token\ERC721\extensions\IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: openzeppelin-solidity\contracts\token\ERC721\extensions\ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts\lib\Counters.sol pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { counter._value += 1; } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); { counter._value = value - 1; } } } // File: openzeppelin-solidity\contracts\access\Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; address private _creator; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; _creator = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require( owner() == _msgSender() || _creator == _msgSender(), "Ownable: caller is not the owner" ); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.8.0; contract KibaGenesis is ERC721Enumerable, Ownable { using Counters for Counters.Counter; using Strings for uint256; //mappings for whitelisted addresses and total minted per address mapping(address => bool) whitelisted; mapping(address => uint) minted; // max / limits uint256 public MAX_MINTED = 112; uint256 public PURCHASE_LIMIT = 1; //minting for public active bool private _isActive = false; //minting for whitelisted addresses active bool private _whitelistActive = false; // uri string private _tokenBaseURI = ""; // whitelisting address[] private _addresses; Counters.Counter private mintedCount; constructor() ERC721("Kiba Inu Genesis I", "KIBA") { _addresses = [ 0x2d866CaD6Ce8d9F7d69B1782a6Aa629766B53E46, 0x4b948C4e76633E3e09Fb366Ac78D34c74edf7c21, 0x64a9EB1B7B8601ED4bBc5F68934469ffDa7ef543, 0xFD5B061127Be14dED27D8a8f380fD760321326E8, 0x5C29616AF35b94212b8f3e2405c99240b641b2eA, 0xD1453C1310846EC5Ba080fCb1D3E128e9D124745, 0x88BB48b275288239D26f9aF4f58Edd0dd0cC2407, 0x1B91e2C9Db800889eA34373eFaAb59c9dFdDd443, 0xE0A779360c53e10226194Fc892413a3Aa98fF943, 0x1088902574eF10b572BABeFc7418E79B4323fADF, 0x2f50cf82BF670DfF6bf41aE1F62DF193fE5c2755, 0xC53c9A7db86f5cB302D9eBad3a8527Ec4CCCaBd4, 0x7271875cDdB4B3331b470A8Ee9DF7312D023a249, 0x7CA96Db04642b82b4b1785354Ae316F6d0F8e963, 0x1d7401Cdc9D2646428F44Ebbc3db57E5ffe3b065, 0x0116Aa239011cA326f8E979416727884099a5990, 0x6859BF91ba5330e8500E87eA5391cE6f22C9503F, 0xfF221Fcb5F6c31cF03f11e4f1EfC961f32A831b1, 0x69Fe7b81fE510062684C634225Bc9a8403EC7A1E, 0xDBC09659dCE1A67340eab42596d0cEF3641072BE, 0xBd90D521C288cB778F47d9258Fa20BAabD64dE40, 0x3671f4Cb43695c1D461ef8A32BfCf89d1df708Cf, 0xc63b5a24ba7Be3E1B06e54a24D3F54D188f856C8, 0xDe99d90Bca10ba6c2d3Df2C0D52aA8717C3AAbDb, 0x8c9D2cC7d217b79464BC6B331008a2B7d39C85B7, 0x942496A3a0f7E246AA46470df96e6a1F40de765c, 0xa07988E37dcC6687fd19665Bb402ae394E87aAF1, 0x977738Eab01796aa79CAc893D11ab5448faDC54F, 0xa37F7FE808ea441Fc34461485ce8DbB52351e742, 0x4662938ECa7B49308aedE2Ca8e141De3aE4fD16f, 0xD1022B0fFbB0E2585387A7bE3Fe6126c6b613DB5, 0x296a070f102614C782F2C2aa426Ea3f0d1a0DAa7, 0x2e7E9AA546640b06274Ec6dBD291491F85a5c4D5, 0xf86f189bA628C8512a9fE44AFc01F7c36e50a6E9, 0xBa6323A401E5047e8b19C7d58A75688e70D01cc6, 0x9c60176FCE90D3D89477Ff21a2024cCB938d1f08, 0x4ae11242726C74be06E87026d51FDb5bCBc23E23, 0xeafb453eAb4bE6421383C2FBEC39D0f73f36da96, 0x6cb65809bF80359c86A50C3BcCe8F5e78dBd8766, 0x859bc104B5b547cb95bb19a0dCB616f04C9B341C, 0x069AE2D2A4233e9f8616b34513A025EA3a8762E5, 0xAf1cA1107a0abB87B18A336559BFf6bf3De6CC68, 0x9ceB5e7787798B4E4BBB1927109B33E319d38e8e, 0x794eeD24D8132cC231cf7EA493e5515b8F4DABAc, 0x1B7CB5F7998010616b6bA971c5A5b9802A8eec51, 0x1F8690f69F941c85CB94295c24E4EfC5Cda90B62, 0xF01f8c14bA72C14c866104c95Ec3df5238920D7A, 0xd99a8538582a1D0F5e64ef179992Ea0C1227b4C3, 0xDf88fF458C2d28c9523CA9C469152E2Cb6304E12, 0x05b2CC62d243035798fE38cA46AFBD1857CB8982, 0xDb0C9B83FC4c413ce85A4B613F3503F4f992Bc46, 0xE735fE25D6c8949168dF0977e80ccB1D915A2f5d, 0x04C803052F88e52b7456C32402AdD6B2BAf045Ce, 0xb6B26fd32870E8675856Fd193a71ba7f78577e93, 0xd9404ce7Dace093e1ff67dF3808E74D6F7cC03a1, 0xDcA13472B0b7ca18EA0b1Cf6Ed33dF8b3CCFe99b, 0xC804b6FA0A2232cf2E6Eba1339Ade0A28DDF0a38, 0x53DEAA1fcCBD434e2A596d511FaC13BDc6629bE6, 0x6C3336B576D1d7E00c88E61B3474cCe59A9624b7, 0xe57DDD314E39d569fc30c27cFB14Ed70F2636fc2, 0x7B0cc731F5a42dA432fE685F76e5eA193DA28672, 0xF0439C5f7A71cec2a6A541e9FcfeA1c18510C106, 0x1ea0BB9f20dF10d8fFF7c04611998B44dbC65c07, 0x2448C8d82B2b1029deD78d7cD984F23A6CA4CeE1, 0x83CD515740B2b858B0D53944771DE3c3076BC563, 0xf373501Cff547deb137E1A3A23710b7B0da9D86e, 0x02BC786450F46E648B3a25CAe9FB825D466CCBd6, 0x4a083Ceff06e20711b64B4cD21400c8156d51309, 0xCC7a3976365B3E090006a7561989BF81C974D22f, 0x1678db462f33a92cb5e6bc442Fe565523b808186, 0x2448C8d82B2b1029deD78d7cD984F23A6CA4CeE1, 0x1ea0BB9f20dF10d8fFF7c04611998B44dbC65c07 ]; for(uint i = 0; i < _addresses.length; i++) { address _address = address(_addresses[i]); whitelisted[_address]=true; } } function canMint ( address account ) external view returns ( bool ) { // genesis collection can only mint 1 per account return account == owner() ? true : minted[account] < PURCHASE_LIMIT; } function isAccountWhitelisted ( address account ) external view returns (bool) { return whitelisted[account]; } function isActive ( ) external view returns (bool) { return _isActive; } function isWhitelistActive ( ) external view returns (bool) { return _whitelistActive; } function setWhitelistActive (bool _isWhitelistActive) external onlyOwner { _whitelistActive = _isWhitelistActive; } function setWhitelisted (address account, bool whitelistActive) external onlyOwner { whitelisted[account] = whitelistActive; } function setActive(bool isMintActive) external onlyOwner { _isActive = isMintActive; } function setBaseURI(string memory baseURI) external onlyOwner { _tokenBaseURI = baseURI; } function setPurchaseLimit(uint256 purchaseLimit) external onlyOwner { PURCHASE_LIMIT = purchaseLimit; } function gift(address to, uint256 numberOfTokens) external onlyOwner { for (uint256 i = 0; i < numberOfTokens; i++) { uint256 tokenId = mintedCount.current() + 1; if (tokenId < MAX_MINTED) { mintedCount.increment(); _safeMint(to, tokenId); minted[to] += 1; } } } function normalMint() external payable { require(_isActive, "Minting is not active"); require(mintedCount.current() + 1 < MAX_MINTED,"Purchase would exceed MAX_MINTED"); // owner can mint as many as they pleases address contractOwner = owner(); if (address(msg.sender) != contractOwner) { require(minted[msg.sender] < PURCHASE_LIMIT, "Only one whitelist minting is allowed per address"); } // JSON files start at 1.json uint256 tokenId = mintedCount.current() + 1; if (mintedCount.current() < MAX_MINTED) { mintedCount.increment(); _safeMint(msg.sender, tokenId); minted[msg.sender] += 1; } } function whitelistMint() external { require(_whitelistActive, "whitelist not active"); require(whitelisted[msg.sender], "Only whitelisted addresses can mint"); // owner can mint as many as they please address contractOwner = owner(); if (address(msg.sender) != contractOwner) { require(minted[msg.sender] < PURCHASE_LIMIT, "Only one whitelist minting is allowed per address"); } // JSON files start at 1.json uint256 tokenId = mintedCount.current() + 1; if (mintedCount.current() < MAX_MINTED) { mintedCount.increment(); _safeMint(msg.sender, tokenId); minted[msg.sender] += 1; } } // function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) { // require(_exists(tokenId), "Token does not exist"); // return string(abi.encodePacked(_tokenBaseURI, tokenId.toString())); // } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "Token Does not exist"); string memory baseURI = _tokenBaseURI; return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, Strings.toString(tokenId),".json")) : ""; } }
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_MINTED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PURCHASE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"canMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAccountWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"isWhitelistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"normalMint","outputs":[],"stateMutability":"payable","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":[],"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":"bool","name":"isMintActive","type":"bool"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"purchaseLimit","type":"uint256"}],"name":"setPurchaseLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isWhitelistActive","type":"bool"}],"name":"setWhitelistActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"whitelistActive","type":"bool"}],"name":"setWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistMint","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6070600e556001600f556010805461ffff1916905560a060408190526000608081905262000030916011916200091e565b503480156200003e57600080fd5b5060408051808201825260128152714b69626120496e752047656e65736973204960701b6020808301918252835180850190945260048452634b49424160e01b90840152815191929162000095916000916200091e565b508051620000ab9060019060208401906200091e565b5050506000620000c06200091a60201b60201c565b600a80546001600160a01b0383166001600160a01b03199182168117909255600b805490911682179055604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506040805161090081018252732d866cad6ce8d9f7d69b1782a6aa629766b53e468152734b948c4e76633e3e09fb366ac78d34c74edf7c2160208201527364a9eb1b7b8601ed4bbc5f68934469ffda7ef5439181019190915273fd5b061127be14ded27d8a8f380fd760321326e86060820152735c29616af35b94212b8f3e2405c99240b641b2ea608082015273d1453c1310846ec5ba080fcb1d3e128e9d12474560a08201527388bb48b275288239d26f9af4f58edd0dd0cc240760c0820152731b91e2c9db800889ea34373efaab59c9dfddd44360e082015273e0a779360c53e10226194fc892413a3aa98ff943610100820152731088902574ef10b572babefc7418e79b4323fadf610120820152732f50cf82bf670dff6bf41ae1f62df193fe5c275561014082015273c53c9a7db86f5cb302d9ebad3a8527ec4cccabd4610160820152737271875cddb4b3331b470a8ee9df7312d023a249610180820152737ca96db04642b82b4b1785354ae316f6d0f8e9636101a0820152731d7401cdc9d2646428f44ebbc3db57e5ffe3b0656101c0820152730116aa239011ca326f8e979416727884099a59906101e0820152736859bf91ba5330e8500e87ea5391ce6f22c9503f61020082015273ff221fcb5f6c31cf03f11e4f1efc961f32a831b16102208201527369fe7b81fe510062684c634225bc9a8403ec7a1e61024082015273dbc09659dce1a67340eab42596d0cef3641072be61026082015273bd90d521c288cb778f47d9258fa20baabd64de40610280820152733671f4cb43695c1d461ef8a32bfcf89d1df708cf6102a082015273c63b5a24ba7be3e1b06e54a24d3f54d188f856c86102c082015273de99d90bca10ba6c2d3df2c0d52aa8717c3aabdb6102e0820152738c9d2cc7d217b79464bc6b331008a2b7d39c85b761030082015273942496a3a0f7e246aa46470df96e6a1f40de765c61032082015273a07988e37dcc6687fd19665bb402ae394e87aaf161034082015273977738eab01796aa79cac893d11ab5448fadc54f61036082015273a37f7fe808ea441fc34461485ce8dbb52351e742610380820152734662938eca7b49308aede2ca8e141de3ae4fd16f6103a082015273d1022b0ffbb0e2585387a7be3fe6126c6b613db56103c082015273296a070f102614c782f2c2aa426ea3f0d1a0daa76103e0820152732e7e9aa546640b06274ec6dbd291491f85a5c4d561040082015273f86f189ba628c8512a9fe44afc01f7c36e50a6e961042082015273ba6323a401e5047e8b19c7d58a75688e70d01cc6610440820152739c60176fce90d3d89477ff21a2024ccb938d1f08610460820152734ae11242726c74be06e87026d51fdb5bcbc23e2361048082015273eafb453eab4be6421383c2fbec39d0f73f36da966104a0820152736cb65809bf80359c86a50c3bcce8f5e78dbd87666104c082015273859bc104b5b547cb95bb19a0dcb616f04c9b341c6104e082015273069ae2d2a4233e9f8616b34513a025ea3a8762e561050082015273af1ca1107a0abb87b18a336559bff6bf3de6cc68610520820152739ceb5e7787798b4e4bbb1927109b33e319d38e8e61054082015273794eed24d8132cc231cf7ea493e5515b8f4dabac610560820152731b7cb5f7998010616b6ba971c5a5b9802a8eec51610580820152731f8690f69f941c85cb94295c24e4efc5cda90b626105a082015273f01f8c14ba72c14c866104c95ec3df5238920d7a6105c082015273d99a8538582a1d0f5e64ef179992ea0c1227b4c36105e082015273df88ff458c2d28c9523ca9c469152e2cb6304e126106008201527305b2cc62d243035798fe38ca46afbd1857cb898261062082015273db0c9b83fc4c413ce85a4b613f3503f4f992bc4661064082015273e735fe25d6c8949168df0977e80ccb1d915a2f5d6106608201527304c803052f88e52b7456c32402add6b2baf045ce61068082015273b6b26fd32870e8675856fd193a71ba7f78577e936106a082015273d9404ce7dace093e1ff67df3808e74d6f7cc03a16106c082015273dca13472b0b7ca18ea0b1cf6ed33df8b3ccfe99b6106e082015273c804b6fa0a2232cf2e6eba1339ade0a28ddf0a386107008201527353deaa1fccbd434e2a596d511fac13bdc6629be6610720820152736c3336b576d1d7e00c88e61b3474cce59a9624b761074082015273e57ddd314e39d569fc30c27cfb14ed70f2636fc2610760820152737b0cc731f5a42da432fe685f76e5ea193da2867261078082015273f0439c5f7a71cec2a6a541e9fcfea1c18510c1066107a0820152731ea0bb9f20df10d8fff7c04611998b44dbc65c076107c08201819052732448c8d82b2b1029ded78d7cd984f23a6ca4cee16107e083018190527383cd515740b2b858b0d53944771de3c3076bc56361080084015273f373501cff547deb137e1a3a23710b7b0da9d86e6108208401527302bc786450f46e648b3a25cae9fb825d466ccbd6610840840152734a083ceff06e20711b64b4cd21400c8156d5130961086084015273cc7a3976365b3e090006a7561989bf81c974d22f610880840152731678db462f33a92cb5e6bc442fe565523b8081866108a08401526108c08301526108e08201526200089e906012906048620009ad565b5060005b6012548110156200091357600060128281548110620008d157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168252600c905260409020805460ff1916600117905550806200090a8162000a59565b915050620008a2565b5062000a81565b3390565b8280546200092c9062000a1c565b90600052602060002090601f0160209004810192826200095057600085556200099b565b82601f106200096b57805160ff19168380011785556200099b565b828001600101855582156200099b579182015b828111156200099b5782518255916020019190600101906200097e565b50620009a992915062000a05565b5090565b8280548282559060005260206000209081019282156200099b579160200282015b828111156200099b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620009ce565b5b80821115620009a9576000815560010162000a06565b60028104600182168062000a3157607f821691505b6020821081141562000a5357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000a7a57634e487b7160e01b81526011600452602481fd5b5060010190565b6126538062000a916000396000f3fe6080604052600436106101ee5760003560e01c8063715018a61161010d578063acec338a116100a0578063c87b56dd1161006f578063c87b56dd14610537578063cbce4c9714610557578063d75e611014610577578063e985e9c51461058c578063f2fde38b146105ac576101ee565b8063acec338a146104b7578063b88d4fde146104d7578063c2ba4744146104f7578063c3b754dc14610517576101ee565b80639281aa0b116100dc5780639281aa0b1461044d57806395d89b411461046d578063a22cb46514610482578063a560ed7b146104a2576101ee565b8063715018a6146103ee578063804f43cd146104035780638907e787146104185780638da5cb5b14610438576101ee565b80632f745c591161018557806355f804b31161015457806355f804b31461036e5780636352211e1461038e5780636edc4388146103ae57806370a08231146103ce576101ee565b80632f745c59146102f957806342842e0e146103195780634f6ccce714610339578063524513d614610359576101ee565b806318160ddd116101c157806318160ddd1461029a57806322f3e2d4146102bc57806323b872dd146102d15780632abadeca146102f1576101ee565b806301ffc9a7146101f357806306fdde0314610229578063081812fc1461024b578063095ea7b314610278575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611d6e565b6105cc565b6040516102209190611ec0565b60405180910390f35b34801561023557600080fd5b5061023e6105f9565b6040516102209190611ecb565b34801561025757600080fd5b5061026b610266366004611dec565b61068b565b6040516102209190611e6f565b34801561028457600080fd5b50610298610293366004611d2b565b6106d7565b005b3480156102a657600080fd5b506102af61076f565b60405161022091906124e0565b3480156102c857600080fd5b50610213610775565b3480156102dd57600080fd5b506102986102ec366004611c4e565b61077e565b6102986107b6565b34801561030557600080fd5b506102af610314366004611d2b565b6108c3565b34801561032557600080fd5b50610298610334366004611c4e565b610915565b34801561034557600080fd5b506102af610354366004611dec565b610930565b34801561036557600080fd5b5061021361098b565b34801561037a57600080fd5b50610298610389366004611da6565b610999565b34801561039a57600080fd5b5061026b6103a9366004611dec565b610a0b565b3480156103ba57600080fd5b506102986103c9366004611dec565b610a40565b3480156103da57600080fd5b506102af6103e9366004611c02565b610aa4565b3480156103fa57600080fd5b50610298610ae8565b34801561040f57600080fd5b50610298610b91565b34801561042457600080fd5b50610213610433366004611c02565b610be7565b34801561044457600080fd5b5061026b610c05565b34801561045957600080fd5b50610298610468366004611d02565b610c14565b34801561047957600080fd5b5061023e610c9e565b34801561048e57600080fd5b5061029861049d366004611d02565b610cad565b3480156104ae57600080fd5b506102af610d7b565b3480156104c357600080fd5b506102986104d2366004611d54565b610d81565b3480156104e357600080fd5b506102986104f2366004611c89565b610df3565b34801561050357600080fd5b50610213610512366004611c02565b610e32565b34801561052357600080fd5b50610298610532366004611d54565b610e7e565b34801561054357600080fd5b5061023e610552366004611dec565b610ef7565b34801561056357600080fd5b50610298610572366004611d2b565b610ffd565b34801561058357600080fd5b506102af6110e0565b34801561059857600080fd5b506102136105a7366004611c1c565b6110e6565b3480156105b857600080fd5b506102986105c7366004611c02565b611114565b60006001600160e01b0319821663780e9d6360e01b14806105f157506105f1826111f5565b90505b919050565b60606000805461060890612558565b80601f016020809104026020016040519081016040528092919081815260200182805461063490612558565b80156106815780601f1061065657610100808354040283529160200191610681565b820191906000526020600020905b81548152906001019060200180831161066457829003601f168201915b5050505050905090565b600061069682611235565b6106bb5760405162461bcd60e51b81526004016106b290612298565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006106e282610a0b565b9050806001600160a01b0316836001600160a01b031614156107165760405162461bcd60e51b81526004016106b290612402565b806001600160a01b0316610728611252565b6001600160a01b031614806107445750610744816105a7611252565b6107605760405162461bcd60e51b81526004016106b290612173565b61076a8383611256565b505050565b60085490565b60105460ff1690565b61078f610789611252565b826112c4565b6107ab5760405162461bcd60e51b81526004016106b290612443565b61076a838383611349565b60105460ff166107d85760405162461bcd60e51b81526004016106b290612319565b600e546107e56013611476565b6107f09060016124e9565b1061080d5760405162461bcd60e51b81526004016106b29061213e565b6000610817610c05565b9050336001600160a01b0382161461085957600f54336000908152600d6020526040902054106108595760405162461bcd60e51b81526004016106b290611ede565b60006108656013611476565b6108709060016124e9565b9050600e5461087f6013611476565b10156108bf5761088f601361147a565b6108993382611497565b336000908152600d602052604081208054600192906108b99084906124e9565b90915550505b5050565b60006108ce83610aa4565b82106108ec5760405162461bcd60e51b81526004016106b290611f2f565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61076a83838360405180602001604052806000815250610df3565b600061093a61076f565b82106109585760405162461bcd60e51b81526004016106b290612494565b6008828154811061097957634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b601054610100900460ff1690565b6109a1611252565b6001600160a01b03166109b2610c05565b6001600160a01b031614806109dc57506109ca611252565b600b546001600160a01b039081169116145b6109f85760405162461bcd60e51b81526004016106b2906122e4565b80516108bf906011906020840190611ad2565b6000818152600260205260408120546001600160a01b0316806105f15760405162461bcd60e51b81526004016106b29061221a565b610a48611252565b6001600160a01b0316610a59610c05565b6001600160a01b03161480610a835750610a71611252565b600b546001600160a01b039081169116145b610a9f5760405162461bcd60e51b81526004016106b2906122e4565b600f55565b60006001600160a01b038216610acc5760405162461bcd60e51b81526004016106b2906121d0565b506001600160a01b031660009081526003602052604090205490565b610af0611252565b6001600160a01b0316610b01610c05565b6001600160a01b03161480610b2b5750610b19611252565b600b546001600160a01b039081169116145b610b475760405162461bcd60e51b81526004016106b2906122e4565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b601054610100900460ff16610bb85760405162461bcd60e51b81526004016106b2906120c4565b336000908152600c602052604090205460ff1661080d5760405162461bcd60e51b81526004016106b2906123bf565b6001600160a01b03166000908152600c602052604090205460ff1690565b600a546001600160a01b031690565b610c1c611252565b6001600160a01b0316610c2d610c05565b6001600160a01b03161480610c575750610c45611252565b600b546001600160a01b039081169116145b610c735760405162461bcd60e51b81526004016106b2906122e4565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60606001805461060890612558565b610cb5611252565b6001600160a01b0316826001600160a01b03161415610ce65760405162461bcd60e51b81526004016106b29061208d565b8060056000610cf3611252565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610d37611252565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d6f9190611ec0565b60405180910390a35050565b600e5481565b610d89611252565b6001600160a01b0316610d9a610c05565b6001600160a01b03161480610dc45750610db2611252565b600b546001600160a01b039081169116145b610de05760405162461bcd60e51b81526004016106b2906122e4565b6010805460ff1916911515919091179055565b610e04610dfe611252565b836112c4565b610e205760405162461bcd60e51b81526004016106b290612443565b610e2c848484846114b1565b50505050565b6000610e3c610c05565b6001600160a01b0316826001600160a01b031614610e7657600f546001600160a01b0383166000908152600d6020526040902054106105f1565b506001919050565b610e86611252565b6001600160a01b0316610e97610c05565b6001600160a01b03161480610ec15750610eaf611252565b600b546001600160a01b039081169116145b610edd5760405162461bcd60e51b81526004016106b2906122e4565b601080549115156101000261ff0019909216919091179055565b6060610f0282611235565b610f1e5760405162461bcd60e51b81526004016106b290612391565b600060118054610f2d90612558565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5990612558565b8015610fa65780601f10610f7b57610100808354040283529160200191610fa6565b820191906000526020600020905b815481529060010190602001808311610f8957829003601f168201915b505050505090506000815111610fcb5760405180602001604052806000815250610ff6565b80610fd5846114e4565b604051602001610fe6929190611e30565b6040516020818303038152906040525b9392505050565b611005611252565b6001600160a01b0316611016610c05565b6001600160a01b03161480611040575061102e611252565b600b546001600160a01b039081169116145b61105c5760405162461bcd60e51b81526004016106b2906122e4565b60005b8181101561076a5760006110736013611476565b61107e9060016124e9565b9050600e548110156110cd57611094601361147a565b61109e8482611497565b6001600160a01b0384166000908152600d602052604081208054600192906110c79084906124e9565b90915550505b50806110d881612593565b91505061105f565b600f5481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61111c611252565b6001600160a01b031661112d610c05565b6001600160a01b031614806111575750611145611252565b600b546001600160a01b039081169116145b6111735760405162461bcd60e51b81526004016106b2906122e4565b6001600160a01b0381166111995760405162461bcd60e51b81526004016106b290611fcc565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b148061122657506001600160e01b03198216635b5e139f60e01b145b806105f157506105f1826115ff565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061128b82610a0b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006112cf82611235565b6112eb5760405162461bcd60e51b81526004016106b2906120f2565b60006112f683610a0b565b9050806001600160a01b0316846001600160a01b031614806113315750836001600160a01b03166113268461068b565b6001600160a01b0316145b80611341575061134181856110e6565b949350505050565b826001600160a01b031661135c82610a0b565b6001600160a01b0316146113825760405162461bcd60e51b81526004016106b290612348565b6001600160a01b0382166113a85760405162461bcd60e51b81526004016106b290612049565b6113b3838383611618565b6113be600082611256565b6001600160a01b03831660009081526003602052604081208054600192906113e7908490612515565b90915550506001600160a01b03821660009081526003602052604081208054600192906114159084906124e9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5490565b600181600001600082825461148f91906124e9565b909155505050565b6108bf8282604051806020016040528060008152506116a1565b6114bc848484611349565b6114c8848484846116d4565b610e2c5760405162461bcd60e51b81526004016106b290611f7a565b60608161150957506040805180820190915260018152600360fc1b60208201526105f4565b8160005b8115611533578061151d81612593565b915061152c9050600a83612501565b915061150d565b60008167ffffffffffffffff81111561155c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611586576020820181803683370190505b5090505b84156113415761159b600183612515565b91506115a8600a866125ae565b6115b39060306124e9565b60f81b8183815181106115d657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506115f8600a86612501565b945061158a565b6001600160e01b031981166301ffc9a760e01b14919050565b61162383838361076a565b6001600160a01b03831661163f5761163a816117ef565b611662565b816001600160a01b0316836001600160a01b031614611662576116628382611833565b6001600160a01b03821661167e57611679816118d0565b61076a565b826001600160a01b0316826001600160a01b03161461076a5761076a82826119a9565b6116ab83836119ed565b6116b860008484846116d4565b61076a5760405162461bcd60e51b81526004016106b290611f7a565b60006116e8846001600160a01b0316611acc565b156117e457836001600160a01b031663150b7a02611704611252565b8786866040518563ffffffff1660e01b81526004016117269493929190611e83565b602060405180830381600087803b15801561174057600080fd5b505af1925050508015611770575060408051601f3d908101601f1916820190925261176d91810190611d8a565b60015b6117ca573d80801561179e576040519150601f19603f3d011682016040523d82523d6000602084013e6117a3565b606091505b5080516117c25760405162461bcd60e51b81526004016106b290611f7a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611341565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161184084610aa4565b61184a9190612515565b60008381526007602052604090205490915080821461189d576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906118e290600190612515565b6000838152600960205260408120546008805493945090928490811061191857634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061194757634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061198d57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006119b483610aa4565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611a135760405162461bcd60e51b81526004016106b290612263565b611a1c81611235565b15611a395760405162461bcd60e51b81526004016106b290612012565b611a4560008383611618565b6001600160a01b0382166000908152600360205260408120805460019290611a6e9084906124e9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611ade90612558565b90600052602060002090601f016020900481019282611b005760008555611b46565b82601f10611b1957805160ff1916838001178555611b46565b82800160010185558215611b46579182015b82811115611b46578251825591602001919060010190611b2b565b50611b52929150611b56565b5090565b5b80821115611b525760008155600101611b57565b600067ffffffffffffffff80841115611b8657611b866125ee565b604051601f8501601f191681016020018281118282101715611baa57611baa6125ee565b604052848152915081838501861015611bc257600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146105f457600080fd5b803580151581146105f457600080fd5b600060208284031215611c13578081fd5b610ff682611bdb565b60008060408385031215611c2e578081fd5b611c3783611bdb565b9150611c4560208401611bdb565b90509250929050565b600080600060608486031215611c62578081fd5b611c6b84611bdb565b9250611c7960208501611bdb565b9150604084013590509250925092565b60008060008060808587031215611c9e578081fd5b611ca785611bdb565b9350611cb560208601611bdb565b925060408501359150606085013567ffffffffffffffff811115611cd7578182fd5b8501601f81018713611ce7578182fd5b611cf687823560208401611b6b565b91505092959194509250565b60008060408385031215611d14578182fd5b611d1d83611bdb565b9150611c4560208401611bf2565b60008060408385031215611d3d578182fd5b611d4683611bdb565b946020939093013593505050565b600060208284031215611d65578081fd5b610ff682611bf2565b600060208284031215611d7f578081fd5b8135610ff681612604565b600060208284031215611d9b578081fd5b8151610ff681612604565b600060208284031215611db7578081fd5b813567ffffffffffffffff811115611dcd578182fd5b8201601f81018413611ddd578182fd5b61134184823560208401611b6b565b600060208284031215611dfd578081fd5b5035919050565b60008151808452611e1c81602086016020860161252c565b601f01601f19169290920160200192915050565b60008351611e4281846020880161252c565b835190830190611e5681836020880161252c565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611eb690830184611e04565b9695505050505050565b901515815260200190565b600060208252610ff66020830184611e04565b60208082526031908201527f4f6e6c79206f6e652077686974656c697374206d696e74696e6720697320616c6040820152706c6f77656420706572206164647265737360781b606082015260800190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526014908201527377686974656c697374206e6f742061637469766560601b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f507572636861736520776f756c6420657863656564204d41585f4d494e544544604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601590820152744d696e74696e67206973206e6f742061637469766560581b604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b602080825260149082015273151bdad95b88111bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b60208082526023908201527f4f6e6c792077686974656c6973746564206164647265737365732063616e206d6040820152621a5b9d60ea1b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b600082198211156124fc576124fc6125c2565b500190565b600082612510576125106125d8565b500490565b600082821015612527576125276125c2565b500390565b60005b8381101561254757818101518382015260200161252f565b83811115610e2c5750506000910152565b60028104600182168061256c57607f821691505b6020821081141561258d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125a7576125a76125c2565b5060010190565b6000826125bd576125bd6125d8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461261a57600080fd5b5056fea2646970667358221220a164e604ec1decb6aa6ba3194cb91c0aaaa7d0ab99cae75f809f5ac445dd5c1964736f6c63430008000033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c8063715018a61161010d578063acec338a116100a0578063c87b56dd1161006f578063c87b56dd14610537578063cbce4c9714610557578063d75e611014610577578063e985e9c51461058c578063f2fde38b146105ac576101ee565b8063acec338a146104b7578063b88d4fde146104d7578063c2ba4744146104f7578063c3b754dc14610517576101ee565b80639281aa0b116100dc5780639281aa0b1461044d57806395d89b411461046d578063a22cb46514610482578063a560ed7b146104a2576101ee565b8063715018a6146103ee578063804f43cd146104035780638907e787146104185780638da5cb5b14610438576101ee565b80632f745c591161018557806355f804b31161015457806355f804b31461036e5780636352211e1461038e5780636edc4388146103ae57806370a08231146103ce576101ee565b80632f745c59146102f957806342842e0e146103195780634f6ccce714610339578063524513d614610359576101ee565b806318160ddd116101c157806318160ddd1461029a57806322f3e2d4146102bc57806323b872dd146102d15780632abadeca146102f1576101ee565b806301ffc9a7146101f357806306fdde0314610229578063081812fc1461024b578063095ea7b314610278575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611d6e565b6105cc565b6040516102209190611ec0565b60405180910390f35b34801561023557600080fd5b5061023e6105f9565b6040516102209190611ecb565b34801561025757600080fd5b5061026b610266366004611dec565b61068b565b6040516102209190611e6f565b34801561028457600080fd5b50610298610293366004611d2b565b6106d7565b005b3480156102a657600080fd5b506102af61076f565b60405161022091906124e0565b3480156102c857600080fd5b50610213610775565b3480156102dd57600080fd5b506102986102ec366004611c4e565b61077e565b6102986107b6565b34801561030557600080fd5b506102af610314366004611d2b565b6108c3565b34801561032557600080fd5b50610298610334366004611c4e565b610915565b34801561034557600080fd5b506102af610354366004611dec565b610930565b34801561036557600080fd5b5061021361098b565b34801561037a57600080fd5b50610298610389366004611da6565b610999565b34801561039a57600080fd5b5061026b6103a9366004611dec565b610a0b565b3480156103ba57600080fd5b506102986103c9366004611dec565b610a40565b3480156103da57600080fd5b506102af6103e9366004611c02565b610aa4565b3480156103fa57600080fd5b50610298610ae8565b34801561040f57600080fd5b50610298610b91565b34801561042457600080fd5b50610213610433366004611c02565b610be7565b34801561044457600080fd5b5061026b610c05565b34801561045957600080fd5b50610298610468366004611d02565b610c14565b34801561047957600080fd5b5061023e610c9e565b34801561048e57600080fd5b5061029861049d366004611d02565b610cad565b3480156104ae57600080fd5b506102af610d7b565b3480156104c357600080fd5b506102986104d2366004611d54565b610d81565b3480156104e357600080fd5b506102986104f2366004611c89565b610df3565b34801561050357600080fd5b50610213610512366004611c02565b610e32565b34801561052357600080fd5b50610298610532366004611d54565b610e7e565b34801561054357600080fd5b5061023e610552366004611dec565b610ef7565b34801561056357600080fd5b50610298610572366004611d2b565b610ffd565b34801561058357600080fd5b506102af6110e0565b34801561059857600080fd5b506102136105a7366004611c1c565b6110e6565b3480156105b857600080fd5b506102986105c7366004611c02565b611114565b60006001600160e01b0319821663780e9d6360e01b14806105f157506105f1826111f5565b90505b919050565b60606000805461060890612558565b80601f016020809104026020016040519081016040528092919081815260200182805461063490612558565b80156106815780601f1061065657610100808354040283529160200191610681565b820191906000526020600020905b81548152906001019060200180831161066457829003601f168201915b5050505050905090565b600061069682611235565b6106bb5760405162461bcd60e51b81526004016106b290612298565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006106e282610a0b565b9050806001600160a01b0316836001600160a01b031614156107165760405162461bcd60e51b81526004016106b290612402565b806001600160a01b0316610728611252565b6001600160a01b031614806107445750610744816105a7611252565b6107605760405162461bcd60e51b81526004016106b290612173565b61076a8383611256565b505050565b60085490565b60105460ff1690565b61078f610789611252565b826112c4565b6107ab5760405162461bcd60e51b81526004016106b290612443565b61076a838383611349565b60105460ff166107d85760405162461bcd60e51b81526004016106b290612319565b600e546107e56013611476565b6107f09060016124e9565b1061080d5760405162461bcd60e51b81526004016106b29061213e565b6000610817610c05565b9050336001600160a01b0382161461085957600f54336000908152600d6020526040902054106108595760405162461bcd60e51b81526004016106b290611ede565b60006108656013611476565b6108709060016124e9565b9050600e5461087f6013611476565b10156108bf5761088f601361147a565b6108993382611497565b336000908152600d602052604081208054600192906108b99084906124e9565b90915550505b5050565b60006108ce83610aa4565b82106108ec5760405162461bcd60e51b81526004016106b290611f2f565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61076a83838360405180602001604052806000815250610df3565b600061093a61076f565b82106109585760405162461bcd60e51b81526004016106b290612494565b6008828154811061097957634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b601054610100900460ff1690565b6109a1611252565b6001600160a01b03166109b2610c05565b6001600160a01b031614806109dc57506109ca611252565b600b546001600160a01b039081169116145b6109f85760405162461bcd60e51b81526004016106b2906122e4565b80516108bf906011906020840190611ad2565b6000818152600260205260408120546001600160a01b0316806105f15760405162461bcd60e51b81526004016106b29061221a565b610a48611252565b6001600160a01b0316610a59610c05565b6001600160a01b03161480610a835750610a71611252565b600b546001600160a01b039081169116145b610a9f5760405162461bcd60e51b81526004016106b2906122e4565b600f55565b60006001600160a01b038216610acc5760405162461bcd60e51b81526004016106b2906121d0565b506001600160a01b031660009081526003602052604090205490565b610af0611252565b6001600160a01b0316610b01610c05565b6001600160a01b03161480610b2b5750610b19611252565b600b546001600160a01b039081169116145b610b475760405162461bcd60e51b81526004016106b2906122e4565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b601054610100900460ff16610bb85760405162461bcd60e51b81526004016106b2906120c4565b336000908152600c602052604090205460ff1661080d5760405162461bcd60e51b81526004016106b2906123bf565b6001600160a01b03166000908152600c602052604090205460ff1690565b600a546001600160a01b031690565b610c1c611252565b6001600160a01b0316610c2d610c05565b6001600160a01b03161480610c575750610c45611252565b600b546001600160a01b039081169116145b610c735760405162461bcd60e51b81526004016106b2906122e4565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60606001805461060890612558565b610cb5611252565b6001600160a01b0316826001600160a01b03161415610ce65760405162461bcd60e51b81526004016106b29061208d565b8060056000610cf3611252565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610d37611252565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d6f9190611ec0565b60405180910390a35050565b600e5481565b610d89611252565b6001600160a01b0316610d9a610c05565b6001600160a01b03161480610dc45750610db2611252565b600b546001600160a01b039081169116145b610de05760405162461bcd60e51b81526004016106b2906122e4565b6010805460ff1916911515919091179055565b610e04610dfe611252565b836112c4565b610e205760405162461bcd60e51b81526004016106b290612443565b610e2c848484846114b1565b50505050565b6000610e3c610c05565b6001600160a01b0316826001600160a01b031614610e7657600f546001600160a01b0383166000908152600d6020526040902054106105f1565b506001919050565b610e86611252565b6001600160a01b0316610e97610c05565b6001600160a01b03161480610ec15750610eaf611252565b600b546001600160a01b039081169116145b610edd5760405162461bcd60e51b81526004016106b2906122e4565b601080549115156101000261ff0019909216919091179055565b6060610f0282611235565b610f1e5760405162461bcd60e51b81526004016106b290612391565b600060118054610f2d90612558565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5990612558565b8015610fa65780601f10610f7b57610100808354040283529160200191610fa6565b820191906000526020600020905b815481529060010190602001808311610f8957829003601f168201915b505050505090506000815111610fcb5760405180602001604052806000815250610ff6565b80610fd5846114e4565b604051602001610fe6929190611e30565b6040516020818303038152906040525b9392505050565b611005611252565b6001600160a01b0316611016610c05565b6001600160a01b03161480611040575061102e611252565b600b546001600160a01b039081169116145b61105c5760405162461bcd60e51b81526004016106b2906122e4565b60005b8181101561076a5760006110736013611476565b61107e9060016124e9565b9050600e548110156110cd57611094601361147a565b61109e8482611497565b6001600160a01b0384166000908152600d602052604081208054600192906110c79084906124e9565b90915550505b50806110d881612593565b91505061105f565b600f5481565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61111c611252565b6001600160a01b031661112d610c05565b6001600160a01b031614806111575750611145611252565b600b546001600160a01b039081169116145b6111735760405162461bcd60e51b81526004016106b2906122e4565b6001600160a01b0381166111995760405162461bcd60e51b81526004016106b290611fcc565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b148061122657506001600160e01b03198216635b5e139f60e01b145b806105f157506105f1826115ff565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061128b82610a0b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006112cf82611235565b6112eb5760405162461bcd60e51b81526004016106b2906120f2565b60006112f683610a0b565b9050806001600160a01b0316846001600160a01b031614806113315750836001600160a01b03166113268461068b565b6001600160a01b0316145b80611341575061134181856110e6565b949350505050565b826001600160a01b031661135c82610a0b565b6001600160a01b0316146113825760405162461bcd60e51b81526004016106b290612348565b6001600160a01b0382166113a85760405162461bcd60e51b81526004016106b290612049565b6113b3838383611618565b6113be600082611256565b6001600160a01b03831660009081526003602052604081208054600192906113e7908490612515565b90915550506001600160a01b03821660009081526003602052604081208054600192906114159084906124e9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5490565b600181600001600082825461148f91906124e9565b909155505050565b6108bf8282604051806020016040528060008152506116a1565b6114bc848484611349565b6114c8848484846116d4565b610e2c5760405162461bcd60e51b81526004016106b290611f7a565b60608161150957506040805180820190915260018152600360fc1b60208201526105f4565b8160005b8115611533578061151d81612593565b915061152c9050600a83612501565b915061150d565b60008167ffffffffffffffff81111561155c57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611586576020820181803683370190505b5090505b84156113415761159b600183612515565b91506115a8600a866125ae565b6115b39060306124e9565b60f81b8183815181106115d657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506115f8600a86612501565b945061158a565b6001600160e01b031981166301ffc9a760e01b14919050565b61162383838361076a565b6001600160a01b03831661163f5761163a816117ef565b611662565b816001600160a01b0316836001600160a01b031614611662576116628382611833565b6001600160a01b03821661167e57611679816118d0565b61076a565b826001600160a01b0316826001600160a01b03161461076a5761076a82826119a9565b6116ab83836119ed565b6116b860008484846116d4565b61076a5760405162461bcd60e51b81526004016106b290611f7a565b60006116e8846001600160a01b0316611acc565b156117e457836001600160a01b031663150b7a02611704611252565b8786866040518563ffffffff1660e01b81526004016117269493929190611e83565b602060405180830381600087803b15801561174057600080fd5b505af1925050508015611770575060408051601f3d908101601f1916820190925261176d91810190611d8a565b60015b6117ca573d80801561179e576040519150601f19603f3d011682016040523d82523d6000602084013e6117a3565b606091505b5080516117c25760405162461bcd60e51b81526004016106b290611f7a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611341565b506001949350505050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161184084610aa4565b61184a9190612515565b60008381526007602052604090205490915080821461189d576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906118e290600190612515565b6000838152600960205260408120546008805493945090928490811061191857634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061194757634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061198d57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006119b483610aa4565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611a135760405162461bcd60e51b81526004016106b290612263565b611a1c81611235565b15611a395760405162461bcd60e51b81526004016106b290612012565b611a4560008383611618565b6001600160a01b0382166000908152600360205260408120805460019290611a6e9084906124e9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b828054611ade90612558565b90600052602060002090601f016020900481019282611b005760008555611b46565b82601f10611b1957805160ff1916838001178555611b46565b82800160010185558215611b46579182015b82811115611b46578251825591602001919060010190611b2b565b50611b52929150611b56565b5090565b5b80821115611b525760008155600101611b57565b600067ffffffffffffffff80841115611b8657611b866125ee565b604051601f8501601f191681016020018281118282101715611baa57611baa6125ee565b604052848152915081838501861015611bc257600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146105f457600080fd5b803580151581146105f457600080fd5b600060208284031215611c13578081fd5b610ff682611bdb565b60008060408385031215611c2e578081fd5b611c3783611bdb565b9150611c4560208401611bdb565b90509250929050565b600080600060608486031215611c62578081fd5b611c6b84611bdb565b9250611c7960208501611bdb565b9150604084013590509250925092565b60008060008060808587031215611c9e578081fd5b611ca785611bdb565b9350611cb560208601611bdb565b925060408501359150606085013567ffffffffffffffff811115611cd7578182fd5b8501601f81018713611ce7578182fd5b611cf687823560208401611b6b565b91505092959194509250565b60008060408385031215611d14578182fd5b611d1d83611bdb565b9150611c4560208401611bf2565b60008060408385031215611d3d578182fd5b611d4683611bdb565b946020939093013593505050565b600060208284031215611d65578081fd5b610ff682611bf2565b600060208284031215611d7f578081fd5b8135610ff681612604565b600060208284031215611d9b578081fd5b8151610ff681612604565b600060208284031215611db7578081fd5b813567ffffffffffffffff811115611dcd578182fd5b8201601f81018413611ddd578182fd5b61134184823560208401611b6b565b600060208284031215611dfd578081fd5b5035919050565b60008151808452611e1c81602086016020860161252c565b601f01601f19169290920160200192915050565b60008351611e4281846020880161252c565b835190830190611e5681836020880161252c565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611eb690830184611e04565b9695505050505050565b901515815260200190565b600060208252610ff66020830184611e04565b60208082526031908201527f4f6e6c79206f6e652077686974656c697374206d696e74696e6720697320616c6040820152706c6f77656420706572206164647265737360781b606082015260800190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526014908201527377686974656c697374206e6f742061637469766560601b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f507572636861736520776f756c6420657863656564204d41585f4d494e544544604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601590820152744d696e74696e67206973206e6f742061637469766560581b604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b602080825260149082015273151bdad95b88111bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b60208082526023908201527f4f6e6c792077686974656c6973746564206164647265737365732063616e206d6040820152621a5b9d60ea1b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b600082198211156124fc576124fc6125c2565b500190565b600082612510576125106125d8565b500490565b600082821015612527576125276125c2565b500390565b60005b8381101561254757818101518382015260200161252f565b83811115610e2c5750506000910152565b60028104600182168061256c57607f821691505b6020821081141561258d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125a7576125a76125c2565b5060010190565b6000826125bd576125bd6125d8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461261a57600080fd5b5056fea2646970667358221220a164e604ec1decb6aa6ba3194cb91c0aaaa7d0ab99cae75f809f5ac445dd5c1964736f6c63430008000033
Deployed Bytecode Sourcemap
49583:8731:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36763:300;;;;;;;;;;-1:-1:-1;36763:300:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22883:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24465:308::-;;;;;;;;;;-1:-1:-1;24465:308:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23988:411::-;;;;;;;;;;-1:-1:-1;23988:411:0;;;;;:::i;:::-;;:::i;:::-;;37566:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;55015:86::-;;;;;;;;;;;;;:::i;25524:376::-;;;;;;;;;;-1:-1:-1;25524:376:0;;;;;:::i;:::-;;:::i;56235:741::-;;;:::i;37147:343::-;;;;;;;;;;-1:-1:-1;37147:343:0;;;;;:::i;:::-;;:::i;25971:185::-;;;;;;;;;;-1:-1:-1;25971:185:0;;;;;:::i;:::-;;:::i;37756:320::-;;;;;;;;;;-1:-1:-1;37756:320:0;;;;;:::i;:::-;;:::i;55109:102::-;;;;;;;;;;;;;:::i;55613:104::-;;;;;;;;;;-1:-1:-1;55613:104:0;;;;;:::i;:::-;;:::i;22490:326::-;;;;;;;;;;-1:-1:-1;22490:326:0;;;;;:::i;:::-;;:::i;55725:117::-;;;;;;;;;;-1:-1:-1;55725:117:0;;;;;:::i;:::-;;:::i;22133:295::-;;;;;;;;;;-1:-1:-1;22133:295:0;;;;;:::i;:::-;;:::i;46324:148::-;;;;;;;;;;;;;:::i;56984:741::-;;;;;;;;;;;;;:::i;54882:125::-;;;;;;;;;;-1:-1:-1;54882:125:0;;;;;:::i;:::-;;:::i;45608:87::-;;;;;;;;;;;;;:::i;55357:140::-;;;;;;;;;;-1:-1:-1;55357:140:0;;;;;:::i;:::-;;:::i;23052:104::-;;;;;;;;;;;;;:::i;24845:327::-;;;;;;;;;;-1:-1:-1;24845:327:0;;;;;:::i;:::-;;:::i;49891:31::-;;;;;;;;;;;;;:::i;55505:100::-;;;;;;;;;;-1:-1:-1;55505:100:0;;;;;:::i;:::-;;:::i;26227:365::-;;;;;;;;;;-1:-1:-1;26227:365:0;;;;;:::i;:::-;;:::i;54661:213::-;;;;;;;;;;-1:-1:-1;54661:213:0;;;;;:::i;:::-;;:::i;55220:129::-;;;;;;;;;;-1:-1:-1;55220:129:0;;;;;:::i;:::-;;:::i;57986:325::-;;;;;;;;;;-1:-1:-1;57986:325:0;;;;;:::i;:::-;;:::i;55850:377::-;;;;;;;;;;-1:-1:-1;55850:377:0;;;;;:::i;:::-;;:::i;49929:33::-;;;;;;;;;;;;;:::i;25243:214::-;;;;;;;;;;-1:-1:-1;25243:214:0;;;;;:::i;:::-;;:::i;46627:281::-;;;;;;;;;;-1:-1:-1;46627:281:0;;;;;:::i;:::-;;:::i;36763:300::-;36910:4;-1:-1:-1;;;;;;36952:50:0;;-1:-1:-1;;;36952:50:0;;:103;;;37019:36;37043:11;37019:23;:36::i;:::-;36932:123;;36763:300;;;;:::o;22883:100::-;22937:13;22970:5;22963:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22883:100;:::o;24465:308::-;24586:7;24633:16;24641:7;24633;:16::i;:::-;24611:110;;;;-1:-1:-1;;;24611:110:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;24741:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24741:24:0;;24465:308::o;23988:411::-;24069:13;24085:23;24100:7;24085:14;:23::i;:::-;24069:39;;24133:5;-1:-1:-1;;;;;24127:11:0;:2;-1:-1:-1;;;;;24127:11:0;;;24119:57;;;;-1:-1:-1;;;24119:57:0;;;;;;;:::i;:::-;24227:5;-1:-1:-1;;;;;24211:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;24211:21:0;;:62;;;;24236:37;24253:5;24260:12;:10;:12::i;24236:37::-;24189:168;;;;-1:-1:-1;;;24189:168:0;;;;;;;:::i;:::-;24370:21;24379:2;24383:7;24370:8;:21::i;:::-;23988:411;;;:::o;37566:113::-;37654:10;:17;37566:113;:::o;55015:86::-;55084:9;;;;55015:86;:::o;25524:376::-;25733:41;25752:12;:10;:12::i;:::-;25766:7;25733:18;:41::i;:::-;25711:140;;;;-1:-1:-1;;;25711:140:0;;;;;;;:::i;:::-;25864:28;25874:4;25880:2;25884:7;25864:9;:28::i;56235:741::-;56293:9;;;;56285:43;;;;-1:-1:-1;;;56285:43:0;;;;;;;:::i;:::-;56375:10;;56347:21;:11;:19;:21::i;:::-;:25;;56371:1;56347:25;:::i;:::-;:38;56339:82;;;;-1:-1:-1;;;56339:82:0;;;;;;;:::i;:::-;56483:21;56507:7;:5;:7::i;:::-;56483:31;-1:-1:-1;56537:10:0;-1:-1:-1;;;;;56529:36:0;;;56525:166;;56611:14;;56597:10;56590:18;;;;:6;:18;;;;;;:35;56582:97;;;;-1:-1:-1;;;56582:97:0;;;;;;;:::i;:::-;56740:15;56758:21;:11;:19;:21::i;:::-;:25;;56782:1;56758:25;:::i;:::-;56740:43;;56824:10;;56800:21;:11;:19;:21::i;:::-;:34;56796:173;;;56851:23;:11;:21;:23::i;:::-;56889:30;56899:10;56911:7;56889:9;:30::i;:::-;56941:10;56934:18;;;;:6;:18;;;;;:23;;56956:1;;56934:18;:23;;56956:1;;56934:23;:::i;:::-;;;;-1:-1:-1;;56796:173:0;56235:741;;:::o;37147:343::-;37289:7;37344:23;37361:5;37344:16;:23::i;:::-;37336:5;:31;37314:124;;;;-1:-1:-1;;;37314:124:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;37456:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;37147:343::o;25971:185::-;26109:39;26126:4;26132:2;26136:7;26109:39;;;;;;;;;;;;:16;:39::i;37756:320::-;37876:7;37931:30;:28;:30::i;:::-;37923:5;:38;37901:132;;;;-1:-1:-1;;;37901:132:0;;;;;;;:::i;:::-;38051:10;38062:5;38051:17;;;;;;-1:-1:-1;;;38051:17:0;;;;;;;;;;;;;;;;;38044:24;;37756:320;;;:::o;55109:102::-;55187:16;;;;;;;;55109:102::o;55613:104::-;45853:12;:10;:12::i;:::-;-1:-1:-1;;;;;45842:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;45842:23:0;;:51;;;;45881:12;:10;:12::i;:::-;45869:8;;-1:-1:-1;;;;;45869:8:0;;;:24;;;45842:51;45820:133;;;;-1:-1:-1;;;45820:133:0;;;;;;;:::i;:::-;55686:23;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;22490:326::-:0;22607:7;22648:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22648:16:0;22697:19;22675:110;;;;-1:-1:-1;;;22675:110:0;;;;;;;:::i;55725:117::-;45853:12;:10;:12::i;:::-;-1:-1:-1;;;;;45842:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;45842:23:0;;:51;;;;45881:12;:10;:12::i;:::-;45869:8;;-1:-1:-1;;;;;45869:8:0;;;:24;;;45842:51;45820:133;;;;-1:-1:-1;;;45820:133:0;;;;;;;:::i;:::-;55804:14:::1;:30:::0;55725:117::o;22133:295::-;22250:7;-1:-1:-1;;;;;22297:19:0;;22275:111;;;;-1:-1:-1;;;22275:111:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;22404:16:0;;;;;:9;:16;;;;;;;22133:295::o;46324:148::-;45853:12;:10;:12::i;:::-;-1:-1:-1;;;;;45842:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;45842:23:0;;:51;;;;45881:12;:10;:12::i;:::-;45869:8;;-1:-1:-1;;;;;45869:8:0;;;:24;;;45842:51;45820:133;;;;-1:-1:-1;;;45820:133:0;;;;;;;:::i;:::-;46415:6:::1;::::0;46394:40:::1;::::0;46431:1:::1;::::0;-1:-1:-1;;;;;46415:6:0::1;::::0;46394:40:::1;::::0;46431:1;;46394:40:::1;46445:6;:19:::0;;-1:-1:-1;;;;;;46445:19:0::1;::::0;;46324:148::o;56984:741::-;57038:16;;;;;;;57030:49;;;;-1:-1:-1;;;57030:49:0;;;;;;;:::i;:::-;57110:10;57098:23;;;;:11;:23;;;;;;;;57090:71;;;;-1:-1:-1;;;57090:71:0;;;;;;;:::i;54882:125::-;-1:-1:-1;;;;;54979:20:0;54955:4;54979:20;;;:11;:20;;;;;;;;;54882:125::o;45608:87::-;45681:6;;-1:-1:-1;;;;;45681:6:0;45608:87;:::o;55357:140::-;45853:12;:10;:12::i;:::-;-1:-1:-1;;;;;45842:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;45842:23:0;;:51;;;;45881:12;:10;:12::i;:::-;45869:8;;-1:-1:-1;;;;;45869:8:0;;;:24;;;45842:51;45820:133;;;;-1:-1:-1;;;45820:133:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;55451:20:0;;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:38;;-1:-1:-1;;55451:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55357:140::o;23052:104::-;23108:13;23141:7;23134:14;;;;;:::i;24845:327::-;24992:12;:10;:12::i;:::-;-1:-1:-1;;;;;24980:24:0;:8;-1:-1:-1;;;;;24980:24:0;;;24972:62;;;;-1:-1:-1;;;24972:62:0;;;;;;;:::i;:::-;25092:8;25047:18;:32;25066:12;:10;:12::i;:::-;-1:-1:-1;;;;;25047:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;25047:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;25047:53:0;;;;;;;;;;;25131:12;:10;:12::i;:::-;-1:-1:-1;;;;;25116:48:0;;25155:8;25116:48;;;;;;:::i;:::-;;;;;;;;24845:327;;:::o;49891:31::-;;;;:::o;55505:100::-;45853:12;:10;:12::i;:::-;-1:-1:-1;;;;;45842:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;45842:23:0;;:51;;;;45881:12;:10;:12::i;:::-;45869:8;;-1:-1:-1;;;;;45869:8:0;;;:24;;;45842:51;45820:133;;;;-1:-1:-1;;;45820:133:0;;;;;;;:::i;:::-;55573:9:::1;:24:::0;;-1:-1:-1;;55573:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55505:100::o;26227:365::-;26416:41;26435:12;:10;:12::i;:::-;26449:7;26416:18;:41::i;:::-;26394:140;;;;-1:-1:-1;;;26394:140:0;;;;;;;:::i;:::-;26545:39;26559:4;26565:2;26569:7;26578:5;26545:13;:39::i;:::-;26227:365;;;;:::o;54661:213::-;54722:4;54817:7;:5;:7::i;:::-;-1:-1:-1;;;;;54806:18:0;:7;-1:-1:-1;;;;;54806:18:0;;:60;;54852:14;;-1:-1:-1;;;;;54834:15:0;;;;;;:6;:15;;;;;;:32;54806:60;;;-1:-1:-1;54827:4:0;;54661:213;-1:-1:-1;54661:213:0:o;55220:129::-;45853:12;:10;:12::i;:::-;-1:-1:-1;;;;;45842:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;45842:23:0;;:51;;;;45881:12;:10;:12::i;:::-;45869:8;;-1:-1:-1;;;;;45869:8:0;;;:24;;;45842:51;45820:133;;;;-1:-1:-1;;;45820:133:0;;;;;;;:::i;:::-;55304:16:::1;:37:::0;;;::::1;;;;-1:-1:-1::0;;55304:37:0;;::::1;::::0;;;::::1;::::0;;55220:129::o;57986:325::-;58059:13;58093:16;58101:7;58093;:16::i;:::-;58085:49;;;;-1:-1:-1;;;58085:49:0;;;;;;;:::i;:::-;58147:21;58171:13;58147:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58226:1;58208:7;58202:21;:25;:101;;;;;;;;;;;;;;;;;58254:7;58263:25;58280:7;58263:16;:25::i;:::-;58237:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58202:101;58195:108;57986:325;-1:-1:-1;;;57986:325:0:o;55850:377::-;45853:12;:10;:12::i;:::-;-1:-1:-1;;;;;45842:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;45842:23:0;;:51;;;;45881:12;:10;:12::i;:::-;45869:8;;-1:-1:-1;;;;;45869:8:0;;;:24;;;45842:51;45820:133;;;;-1:-1:-1;;;45820:133:0;;;;;;;:::i;:::-;55935:9:::1;55930:290;55954:14;55950:1;:18;55930:290;;;55990:15;56008:21;:11;:19;:21::i;:::-;:25;::::0;56032:1:::1;56008:25;:::i;:::-;55990:43;;56064:10;;56054:7;:20;56050:159;;;56095:23;:11;:21;:23::i;:::-;56137:22;56147:2;56151:7;56137:9;:22::i;:::-;-1:-1:-1::0;;;;;56178:10:0;::::1;;::::0;;;:6:::1;:10;::::0;;;;:15;;56192:1:::1;::::0;56178:10;:15:::1;::::0;56192:1;;56178:15:::1;:::i;:::-;::::0;;;-1:-1:-1;;56050:159:0::1;-1:-1:-1::0;55970:3:0;::::1;::::0;::::1;:::i;:::-;;;;55930:290;;49929:33:::0;;;;:::o;25243:214::-;-1:-1:-1;;;;;25414:25:0;;;25385:4;25414:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25243:214::o;46627:281::-;45853:12;:10;:12::i;:::-;-1:-1:-1;;;;;45842:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;45842:23:0;;:51;;;;45881:12;:10;:12::i;:::-;45869:8;;-1:-1:-1;;;;;45869:8:0;;;:24;;;45842:51;45820:133;;;;-1:-1:-1;;;45820:133:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46730:22:0;::::1;46708:110;;;;-1:-1:-1::0;;;46708:110:0::1;;;;;;;:::i;:::-;46855:6;::::0;46834:38:::1;::::0;-1:-1:-1;;;;;46834:38:0;;::::1;::::0;46855:6:::1;::::0;46834:38:::1;::::0;46855:6:::1;::::0;46834:38:::1;46883:6;:17:::0;;-1:-1:-1;;;;;;46883:17:0::1;-1:-1:-1::0;;;;;46883:17:0;;;::::1;::::0;;;::::1;::::0;;46627:281::o;21714:355::-;21861:4;-1:-1:-1;;;;;;21903:40:0;;-1:-1:-1;;;21903:40:0;;:105;;-1:-1:-1;;;;;;;21960:48:0;;-1:-1:-1;;;21960:48:0;21903:105;:158;;;;22025:36;22049:11;22025:23;:36::i;28139:127::-;28204:4;28228:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28228:16:0;:30;;;28139:127::o;16893:98::-;16973:10;16893:98;:::o;32262:174::-;32337:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;32337:29:0;-1:-1:-1;;;;;32337:29:0;;;;;;;;:24;;32391:23;32337:24;32391:14;:23::i;:::-;-1:-1:-1;;;;;32382:46:0;;;;;;;;;;;32262:174;;:::o;28433:452::-;28562:4;28606:16;28614:7;28606;:16::i;:::-;28584:110;;;;-1:-1:-1;;;28584:110:0;;;;;;;:::i;:::-;28705:13;28721:23;28736:7;28721:14;:23::i;:::-;28705:39;;28774:5;-1:-1:-1;;;;;28763:16:0;:7;-1:-1:-1;;;;;28763:16:0;;:64;;;;28820:7;-1:-1:-1;;;;;28796:31:0;:20;28808:7;28796:11;:20::i;:::-;-1:-1:-1;;;;;28796:31:0;;28763:64;:113;;;;28844:32;28861:5;28868:7;28844:16;:32::i;:::-;28755:122;28433:452;-1:-1:-1;;;;28433:452:0:o;31529:615::-;31702:4;-1:-1:-1;;;;;31675:31:0;:23;31690:7;31675:14;:23::i;:::-;-1:-1:-1;;;;;31675:31:0;;31653:122;;;;-1:-1:-1;;;31653:122:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31794:16:0;;31786:65;;;;-1:-1:-1;;;31786:65:0;;;;;;;:::i;:::-;31864:39;31885:4;31891:2;31895:7;31864:20;:39::i;:::-;31968:29;31985:1;31989:7;31968:8;:29::i;:::-;-1:-1:-1;;;;;32010:15:0;;;;;;:9;:15;;;;;:20;;32029:1;;32010:15;:20;;32029:1;;32010:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32041:13:0;;;;;;:9;:13;;;;;:18;;32058:1;;32041:13;:18;;32058:1;;32041:18;:::i;:::-;;;;-1:-1:-1;;32070:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32070:21:0;-1:-1:-1;;;;;32070:21:0;;;;;;;;;32109:27;;32070:16;;32109:27;;;;;;;31529:615;;;:::o;43972:114::-;44064:14;;43972:114::o;44094:90::-;44175:1;44157:7;:14;;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;;44094:90:0:o;29227:110::-;29303:26;29313:2;29317:7;29303:26;;;;;;;;;;;;:9;:26::i;27474:352::-;27631:28;27641:4;27647:2;27651:7;27631:9;:28::i;:::-;27692:48;27715:4;27721:2;27725:7;27734:5;27692:22;:48::i;:::-;27670:148;;;;-1:-1:-1;;;27670:148:0;;;;;;;:::i;17565:723::-;17621:13;17842:10;17838:53;;-1:-1:-1;17869:10:0;;;;;;;;;;;;-1:-1:-1;;;17869:10:0;;;;;;17838:53;17916:5;17901:12;17957:78;17964:9;;17957:78;;17990:8;;;;:::i;:::-;;-1:-1:-1;18013:10:0;;-1:-1:-1;18021:2:0;18013:10;;:::i;:::-;;;17957:78;;;18045:19;18077:6;18067:17;;;;;;-1:-1:-1;;;18067:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18067:17:0;;18045:39;;18095:154;18102:10;;18095:154;;18129:11;18139:1;18129:11;;:::i;:::-;;-1:-1:-1;18198:10:0;18206:2;18198:5;:10;:::i;:::-;18185:24;;:2;:24;:::i;:::-;18172:39;;18155:6;18162;18155:14;;;;;;-1:-1:-1;;;18155:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;18155:56:0;;;;;;;;-1:-1:-1;18226:11:0;18235:2;18226:11;;:::i;:::-;;;18095:154;;20165:207;-1:-1:-1;;;;;;20324:40:0;;-1:-1:-1;;;20324:40:0;20165:207;;;:::o;38689:589::-;38833:45;38860:4;38866:2;38870:7;38833:26;:45::i;:::-;-1:-1:-1;;;;;38895:18:0;;38891:187;;38930:40;38962:7;38930:31;:40::i;:::-;38891:187;;;39000:2;-1:-1:-1;;;;;38992:10:0;:4;-1:-1:-1;;;;;38992:10:0;;38988:90;;39019:47;39052:4;39058:7;39019:32;:47::i;:::-;-1:-1:-1;;;;;39092:16:0;;39088:183;;39125:45;39162:7;39125:36;:45::i;:::-;39088:183;;;39198:4;-1:-1:-1;;;;;39192:10:0;:2;-1:-1:-1;;;;;39192:10:0;;39188:83;;39219:40;39247:2;39251:7;39219:27;:40::i;29564:321::-;29694:18;29700:2;29704:7;29694:5;:18::i;:::-;29745:54;29776:1;29780:2;29784:7;29793:5;29745:22;:54::i;:::-;29723:154;;;;-1:-1:-1;;;29723:154:0;;;;;;;:::i;33001:1053::-;33156:4;33177:15;:2;-1:-1:-1;;;;;33177:13:0;;:15::i;:::-;33173:874;;;33246:2;-1:-1:-1;;;;;33230:36:0;;33289:12;:10;:12::i;:::-;33324:4;33351:7;33381:5;33230:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33230:175:0;;;;;;;;-1:-1:-1;;33230:175:0;;;;;;;;;;;;:::i;:::-;;;33209:783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33592:13:0;;33588:389;;33635:108;;-1:-1:-1;;;33635:108:0;;;;;;;:::i;33588:389::-;33927:6;33921:13;33912:6;33908:2;33904:15;33897:38;33209:783;-1:-1:-1;;;;;;33469:55:0;-1:-1:-1;;;33469:55:0;;-1:-1:-1;33462:62:0;;33173:874;-1:-1:-1;34031:4:0;33001:1053;;;;;;:::o;40001:164::-;40105:10;:17;;40078:24;;;;:15;:24;;;;;:44;;;40133:24;;;;;;;;;;;;40001:164::o;40792:1002::-;41072:22;41122:1;41097:22;41114:4;41097:16;:22::i;:::-;:26;;;;:::i;:::-;41134:18;41155:26;;;:17;:26;;;;;;41072:51;;-1:-1:-1;41288:28:0;;;41284:328;;-1:-1:-1;;;;;41355:18:0;;41333:19;41355:18;;;:12;:18;;;;;;;;:34;;;;;;;;;41406:30;;;;;;:44;;;41523:30;;:17;:30;;;;;:43;;;41284:328;-1:-1:-1;41708:26:0;;;;:17;:26;;;;;;;;41701:33;;;-1:-1:-1;;;;;41752:18:0;;;;;:12;:18;;;;;:34;;;;;;;41745:41;40792:1002::o;42089:1079::-;42367:10;:17;42342:22;;42367:21;;42387:1;;42367:21;:::i;:::-;42399:18;42420:24;;;:15;:24;;;;;;42793:10;:26;;42342:46;;-1:-1:-1;42420:24:0;;42342:46;;42793:26;;;;-1:-1:-1;;;42793:26:0;;;;;;;;;;;;;;;;;42771:48;;42857:11;42832:10;42843;42832:22;;;;;;-1:-1:-1;;;42832:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;42937:28;;;:15;:28;;;;;;;:41;;;43109:24;;;;;43102:31;43144:10;:16;;;;;-1:-1:-1;;;43144:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;42089:1079;;;;:::o;39579:221::-;39664:14;39681:20;39698:2;39681:16;:20::i;:::-;-1:-1:-1;;;;;39712:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;39757:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;39579:221:0:o;30221:382::-;-1:-1:-1;;;;;30301:16:0;;30293:61;;;;-1:-1:-1;;;30293:61:0;;;;;;;:::i;:::-;30374:16;30382:7;30374;:16::i;:::-;30373:17;30365:58;;;;-1:-1:-1;;;30365:58:0;;;;;;;:::i;:::-;30436:45;30465:1;30469:2;30473:7;30436:20;:45::i;:::-;-1:-1:-1;;;;;30494:13:0;;;;;;:9;:13;;;;;:18;;30511:1;;30494:13;:18;;30511:1;;30494:18;:::i;:::-;;;;-1:-1:-1;;30523:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30523:21:0;-1:-1:-1;;;;;30523:21:0;;;;;;;;30562:33;;30523:16;;;30562:33;;30523:16;;30562:33;30221:382;;:::o;8292:444::-;8672:20;8720:8;;;8292:444::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:162;873:20;;929:13;;922:21;912:32;;902:2;;958:1;955;948:12;973:198;;1085:2;1073:9;1064:7;1060:23;1056:32;1053:2;;;1106:6;1098;1091:22;1053:2;1134:31;1155:9;1134:31;:::i;1176:274::-;;;1305:2;1293:9;1284:7;1280:23;1276:32;1273:2;;;1326:6;1318;1311:22;1273:2;1354:31;1375:9;1354:31;:::i;:::-;1344:41;;1404:40;1440:2;1429:9;1425:18;1404:40;:::i;:::-;1394:50;;1263:187;;;;;:::o;1455:342::-;;;;1601:2;1589:9;1580:7;1576:23;1572:32;1569:2;;;1622:6;1614;1607:22;1569:2;1650:31;1671:9;1650:31;:::i;:::-;1640:41;;1700:40;1736:2;1725:9;1721:18;1700:40;:::i;:::-;1690:50;;1787:2;1776:9;1772:18;1759:32;1749:42;;1559:238;;;;;:::o;1802:702::-;;;;;1974:3;1962:9;1953:7;1949:23;1945:33;1942:2;;;1996:6;1988;1981:22;1942:2;2024:31;2045:9;2024:31;:::i;:::-;2014:41;;2074:40;2110:2;2099:9;2095:18;2074:40;:::i;:::-;2064:50;;2161:2;2150:9;2146:18;2133:32;2123:42;;2216:2;2205:9;2201:18;2188:32;2243:18;2235:6;2232:30;2229:2;;;2280:6;2272;2265:22;2229:2;2308:22;;2361:4;2353:13;;2349:27;-1:-1:-1;2339:2:1;;2395:6;2387;2380:22;2339:2;2423:75;2490:7;2485:2;2472:16;2467:2;2463;2459:11;2423:75;:::i;:::-;2413:85;;;1932:572;;;;;;;:::o;2509:268::-;;;2635:2;2623:9;2614:7;2610:23;2606:32;2603:2;;;2656:6;2648;2641:22;2603:2;2684:31;2705:9;2684:31;:::i;:::-;2674:41;;2734:37;2767:2;2756:9;2752:18;2734:37;:::i;2782:266::-;;;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:31;2981:9;2960:31;:::i;:::-;2950:41;3038:2;3023:18;;;;3010:32;;-1:-1:-1;;;2869:179:1:o;3053:192::-;;3162:2;3150:9;3141:7;3137:23;3133:32;3130:2;;;3183:6;3175;3168:22;3130:2;3211:28;3229:9;3211:28;:::i;3250:257::-;;3361:2;3349:9;3340:7;3336:23;3332:32;3329:2;;;3382:6;3374;3367:22;3329:2;3426:9;3413:23;3445:32;3471:5;3445:32;:::i;3512:261::-;;3634:2;3622:9;3613:7;3609:23;3605:32;3602:2;;;3655:6;3647;3640:22;3602:2;3692:9;3686:16;3711:32;3737:5;3711:32;:::i;3778:482::-;;3900:2;3888:9;3879:7;3875:23;3871:32;3868:2;;;3921:6;3913;3906:22;3868:2;3966:9;3953:23;3999:18;3991:6;3988:30;3985:2;;;4036:6;4028;4021:22;3985:2;4064:22;;4117:4;4109:13;;4105:27;-1:-1:-1;4095:2:1;;4151:6;4143;4136:22;4095:2;4179:75;4246:7;4241:2;4228:16;4223:2;4219;4215:11;4179:75;:::i;4265:190::-;;4377:2;4365:9;4356:7;4352:23;4348:32;4345:2;;;4398:6;4390;4383:22;4345:2;-1:-1:-1;4426:23:1;;4335:120;-1:-1:-1;4335:120:1:o;4460:259::-;;4541:5;4535:12;4568:6;4563:3;4556:19;4584:63;4640:6;4633:4;4628:3;4624:14;4617:4;4610:5;4606:16;4584:63;:::i;:::-;4701:2;4680:15;-1:-1:-1;;4676:29:1;4667:39;;;;4708:4;4663:50;;4511:208;-1:-1:-1;;4511:208:1:o;4724:637::-;;5042:6;5036:13;5058:53;5104:6;5099:3;5092:4;5084:6;5080:17;5058:53;:::i;:::-;5174:13;;5133:16;;;;5196:57;5174:13;5133:16;5230:4;5218:17;;5196:57;:::i;:::-;-1:-1:-1;;;5275:20:1;;5304:22;;;5353:1;5342:13;;5012:349;-1:-1:-1;;;;5012:349:1:o;5366:203::-;-1:-1:-1;;;;;5530:32:1;;;;5512:51;;5500:2;5485:18;;5467:102::o;5574:490::-;-1:-1:-1;;;;;5843:15:1;;;5825:34;;5895:15;;5890:2;5875:18;;5868:43;5942:2;5927:18;;5920:34;;;5990:3;5985:2;5970:18;;5963:31;;;5574:490;;6011:47;;6038:19;;6030:6;6011:47;:::i;:::-;6003:55;5777:287;-1:-1:-1;;;;;;5777:287:1:o;6069:187::-;6234:14;;6227:22;6209:41;;6197:2;6182:18;;6164:92::o;6261:221::-;;6410:2;6399:9;6392:21;6430:46;6472:2;6461:9;6457:18;6449:6;6430:46;:::i;6487:413::-;6689:2;6671:21;;;6728:2;6708:18;;;6701:30;6767:34;6762:2;6747:18;;6740:62;-1:-1:-1;;;6833:2:1;6818:18;;6811:47;6890:3;6875:19;;6661:239::o;6905:407::-;7107:2;7089:21;;;7146:2;7126:18;;;7119:30;7185:34;7180:2;7165:18;;7158:62;-1:-1:-1;;;7251:2:1;7236:18;;7229:41;7302:3;7287:19;;7079:233::o;7317:414::-;7519:2;7501:21;;;7558:2;7538:18;;;7531:30;7597:34;7592:2;7577:18;;7570:62;-1:-1:-1;;;7663:2:1;7648:18;;7641:48;7721:3;7706:19;;7491:240::o;7736:402::-;7938:2;7920:21;;;7977:2;7957:18;;;7950:30;8016:34;8011:2;7996:18;;7989:62;-1:-1:-1;;;8082:2:1;8067:18;;8060:36;8128:3;8113:19;;7910:228::o;8143:352::-;8345:2;8327:21;;;8384:2;8364:18;;;8357:30;8423;8418:2;8403:18;;8396:58;8486:2;8471:18;;8317:178::o;8500:400::-;8702:2;8684:21;;;8741:2;8721:18;;;8714:30;8780:34;8775:2;8760:18;;8753:62;-1:-1:-1;;;8846:2:1;8831:18;;8824:34;8890:3;8875:19;;8674:226::o;8905:349::-;9107:2;9089:21;;;9146:2;9126:18;;;9119:30;9185:27;9180:2;9165:18;;9158:55;9245:2;9230:18;;9079:175::o;9259:344::-;9461:2;9443:21;;;9500:2;9480:18;;;9473:30;-1:-1:-1;;;9534:2:1;9519:18;;9512:50;9594:2;9579:18;;9433:170::o;9608:408::-;9810:2;9792:21;;;9849:2;9829:18;;;9822:30;9888:34;9883:2;9868:18;;9861:62;-1:-1:-1;;;9954:2:1;9939:18;;9932:42;10006:3;9991:19;;9782:234::o;10021:356::-;10223:2;10205:21;;;10242:18;;;10235:30;10301:34;10296:2;10281:18;;10274:62;10368:2;10353:18;;10195:182::o;10382:420::-;10584:2;10566:21;;;10623:2;10603:18;;;10596:30;10662:34;10657:2;10642:18;;10635:62;10733:26;10728:2;10713:18;;10706:54;10792:3;10777:19;;10556:246::o;10807:406::-;11009:2;10991:21;;;11048:2;11028:18;;;11021:30;11087:34;11082:2;11067:18;;11060:62;-1:-1:-1;;;11153:2:1;11138:18;;11131:40;11203:3;11188:19;;10981:232::o;11218:405::-;11420:2;11402:21;;;11459:2;11439:18;;;11432:30;11498:34;11493:2;11478:18;;11471:62;-1:-1:-1;;;11564:2:1;11549:18;;11542:39;11613:3;11598:19;;11392:231::o;11628:356::-;11830:2;11812:21;;;11849:18;;;11842:30;11908:34;11903:2;11888:18;;11881:62;11975:2;11960:18;;11802:182::o;11989:408::-;12191:2;12173:21;;;12230:2;12210:18;;;12203:30;12269:34;12264:2;12249:18;;12242:62;-1:-1:-1;;;12335:2:1;12320:18;;12313:42;12387:3;12372:19;;12163:234::o;12402:356::-;12604:2;12586:21;;;12623:18;;;12616:30;12682:34;12677:2;12662:18;;12655:62;12749:2;12734:18;;12576:182::o;12763:345::-;12965:2;12947:21;;;13004:2;12984:18;;;12977:30;-1:-1:-1;;;13038:2:1;13023:18;;13016:51;13099:2;13084:18;;12937:171::o;13113:405::-;13315:2;13297:21;;;13354:2;13334:18;;;13327:30;13393:34;13388:2;13373:18;;13366:62;-1:-1:-1;;;13459:2:1;13444:18;;13437:39;13508:3;13493:19;;13287:231::o;13523:344::-;13725:2;13707:21;;;13764:2;13744:18;;;13737:30;-1:-1:-1;;;13798:2:1;13783:18;;13776:50;13858:2;13843:18;;13697:170::o;13872:399::-;14074:2;14056:21;;;14113:2;14093:18;;;14086:30;14152:34;14147:2;14132:18;;14125:62;-1:-1:-1;;;14218:2:1;14203:18;;14196:33;14261:3;14246:19;;14046:225::o;14276:397::-;14478:2;14460:21;;;14517:2;14497:18;;;14490:30;14556:34;14551:2;14536:18;;14529:62;-1:-1:-1;;;14622:2:1;14607:18;;14600:31;14663:3;14648:19;;14450:223::o;14678:413::-;14880:2;14862:21;;;14919:2;14899:18;;;14892:30;14958:34;14953:2;14938:18;;14931:62;-1:-1:-1;;;15024:2:1;15009:18;;15002:47;15081:3;15066:19;;14852:239::o;15096:408::-;15298:2;15280:21;;;15337:2;15317:18;;;15310:30;15376:34;15371:2;15356:18;;15349:62;-1:-1:-1;;;15442:2:1;15427:18;;15420:42;15494:3;15479:19;;15270:234::o;15509:177::-;15655:25;;;15643:2;15628:18;;15610:76::o;15691:128::-;;15762:1;15758:6;15755:1;15752:13;15749:2;;;15768:18;;:::i;:::-;-1:-1:-1;15804:9:1;;15739:80::o;15824:120::-;;15890:1;15880:2;;15895:18;;:::i;:::-;-1:-1:-1;15929:9:1;;15870:74::o;15949:125::-;;16017:1;16014;16011:8;16008:2;;;16022:18;;:::i;:::-;-1:-1:-1;16059:9:1;;15998:76::o;16079:258::-;16151:1;16161:113;16175:6;16172:1;16169:13;16161:113;;;16251:11;;;16245:18;16232:11;;;16225:39;16197:2;16190:10;16161:113;;;16292:6;16289:1;16286:13;16283:2;;;-1:-1:-1;;16327:1:1;16309:16;;16302:27;16132:205::o;16342:380::-;16427:1;16417:12;;16474:1;16464:12;;;16485:2;;16539:4;16531:6;16527:17;16517:27;;16485:2;16592;16584:6;16581:14;16561:18;16558:38;16555:2;;;16638:10;16633:3;16629:20;16626:1;16619:31;16673:4;16670:1;16663:15;16701:4;16698:1;16691:15;16555:2;;16397:325;;;:::o;16727:135::-;;-1:-1:-1;;16787:17:1;;16784:2;;;16807:18;;:::i;:::-;-1:-1:-1;16854:1:1;16843:13;;16774:88::o;16867:112::-;;16925:1;16915:2;;16930:18;;:::i;:::-;-1:-1:-1;16964:9:1;;16905:74::o;16984:127::-;17045:10;17040:3;17036:20;17033:1;17026:31;17076:4;17073:1;17066:15;17100:4;17097:1;17090:15;17116:127;17177:10;17172:3;17168:20;17165:1;17158:31;17208:4;17205:1;17198:15;17232:4;17229:1;17222:15;17248:127;17309:10;17304:3;17300:20;17297:1;17290:31;17340:4;17337:1;17330:15;17364:4;17361:1;17354:15;17380:133;-1:-1:-1;;;;;;17456:32:1;;17446:43;;17436:2;;17503:1;17500;17493:12;17436:2;17426:87;:::o
Swarm Source
ipfs://a164e604ec1decb6aa6ba3194cb91c0aaaa7d0ab99cae75f809f5ac445dd5c19
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,039.52 | 0.001 | $3.04 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.