Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator:
TokenTracker
Latest 25 from a total of 786 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 43128855 | 308 days ago | IN | 0 MATIC | 0.0065721 | ||||
Transfer | 43128827 | 308 days ago | IN | 19 MATIC | 0.02514467 | ||||
Set Approval For... | 39778321 | 395 days ago | IN | 0 MATIC | 0.00552281 | ||||
Set Approval For... | 38022331 | 440 days ago | IN | 0 MATIC | 0.00226834 | ||||
Set Approval For... | 37835585 | 444 days ago | IN | 0 MATIC | 0.00224075 | ||||
Set Approval For... | 32693129 | 570 days ago | IN | 0 MATIC | 0.00138429 | ||||
Set Approval For... | 25106059 | 768 days ago | IN | 0 MATIC | 0.00142442 | ||||
Safe Transfer Fr... | 22414053 | 837 days ago | IN | 0 MATIC | 0.00008803 | ||||
Safe Transfer Fr... | 22414039 | 837 days ago | IN | 0 MATIC | 0.00015113 | ||||
Safe Transfer Fr... | 22160436 | 844 days ago | IN | 0 MATIC | 0.00150894 | ||||
Set Approval For... | 22101520 | 845 days ago | IN | 0 MATIC | 0.00187955 | ||||
Transfer | 22100247 | 845 days ago | IN | 19 MATIC | 0.00561177 | ||||
Transfer | 22099582 | 846 days ago | IN | 19 MATIC | 0.00561177 | ||||
Transfer | 22099221 | 846 days ago | IN | 19 MATIC | 0.00561177 | ||||
Transfer | 22098959 | 846 days ago | IN | 19 MATIC | 0.00561177 | ||||
Payout | 22098641 | 846 days ago | IN | 0 MATIC | 0.00092658 | ||||
Set Approval For... | 22093565 | 846 days ago | IN | 0 MATIC | 0.00152549 | ||||
Transfer | 22060647 | 847 days ago | IN | 19 MATIC | 0.00561177 | ||||
Transfer | 22060259 | 847 days ago | IN | 19 MATIC | 0.00561177 | ||||
Transfer | 22059806 | 847 days ago | IN | 19 MATIC | 0.00561177 | ||||
Transfer | 22059594 | 847 days ago | IN | 19 MATIC | 0.00561177 | ||||
Payout | 22059205 | 847 days ago | IN | 0 MATIC | 0.00092658 | ||||
Transfer | 22053954 | 847 days ago | IN | 19 MATIC | 0.00561177 | ||||
Transfer | 22053867 | 847 days ago | IN | 19 MATIC | 0.00561177 | ||||
Transfer | 22053112 | 847 days ago | IN | 19 MATIC | 0.00561177 |
Latest 25 internal transactions (View All)
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
22098641 | 846 days ago | 76 MATIC | ||||
22059205 | 847 days ago | 76 MATIC | ||||
22052271 | 847 days ago | 76 MATIC | ||||
22050683 | 847 days ago | 76 MATIC | ||||
21709572 | 856 days ago | 133 MATIC | ||||
21555395 | 860 days ago | 114 MATIC | ||||
21551673 | 860 days ago | 133 MATIC | ||||
21545986 | 860 days ago | 133 MATIC | ||||
21515615 | 861 days ago | 133 MATIC | ||||
21507407 | 861 days ago | 133 MATIC | ||||
21492940 | 861 days ago | 95 MATIC | ||||
21492540 | 861 days ago | 133 MATIC | ||||
21491989 | 861 days ago | 133 MATIC | ||||
21490014 | 861 days ago | 114 MATIC | ||||
21488322 | 861 days ago | 114 MATIC | ||||
21487581 | 862 days ago | 114 MATIC | ||||
21480528 | 862 days ago | 19 MATIC | ||||
21480365 | 862 days ago | 95 MATIC | ||||
21478920 | 862 days ago | 114 MATIC | ||||
21478088 | 862 days ago | 114 MATIC | ||||
21477412 | 862 days ago | 76 MATIC | ||||
21476799 | 862 days ago | 114 MATIC | ||||
21475303 | 862 days ago | 114 MATIC | ||||
21471096 | 862 days ago | 114 MATIC | ||||
21469914 | 862 days ago | 114 MATIC |
Loading...
Loading
Contract Name:
ValhallaHipsters
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.8.1; // by XonaLabs 2021-2022 import "./ERC721URIStorage.sol"; contract ValhallaHipsters is ERC721URIStorage { uint public constant version = 1; uint public constant MAX_NFTS = 10000; uint public constant FREE_NFTS = 500; address public OWNER1; address public OWNER2 = 0x48122D8Fa6D9F24DD27906e4221b8d1beE16e006; uint public SMART_CONTRACT_RELEASE_BY_UNIXTIME; string public xonalabsBaseUrl = "https://ipfs.xonalabs.com/ipfs/"; string public jsonsIpfsId = "QmUzqJhKPzSviZoDA9ytxV7uiqbuFBMXaVEsYX9oEwTM7B"; uint public projectPaused; uint public mintedNfts; uint256 public freePhaseFee = 0.00 ether; uint256 public generalFee = 19 ether; uint256 private twoNftsFee = 38 ether; uint256 private threeNftsFee = 57 ether; uint256 private fourNftsFee = 76 ether; uint256 private fiveNftsFee = 95 ether; uint256 private sixNftsFee = 114 ether; uint256 private sevenNftsFee = 133 ether; uint256 private eightNftsFee = 152 ether; uint256 private nineNftsFee = 171 ether; uint256 private tenNftsFee = 190 ether; mapping(address => mapping(uint256 => uint256)) private ownerTokens; address[] public ethLegacyMints = [ 0xAA4830313654C86417aca0292dd3573daf7905C8, 0xD9a673F3dBC459D2e2943DC82B1294c483f26365, 0xd19AEA0a223015DfED6d0bb290dAcdBcC5EA9370, 0x0A4DE625aa7624dD72cb09a41a6E52FCe1993310, 0x05195AC340AC38e0710F4Ce45a432321A645201b, 0xD19523A0E087bc62ee1D8A0153a2b753035DA72A, 0xb8779D3Cf3e0F61806130b23A5ce619a8F02cca6, 0xB56Cdccfc00e949D37b06592EFf031003196802d, 0xD9a673F3dBC459D2e2943DC82B1294c483f26365, 0xc9c6D5044e3fB14Ff2E1Baa82768543B02F8D286, 0xB0E4BE83DF49bf88BF6A5817A73f7A1cdF3ED5d2, 0x4ADb6b079CaF051Cfb45935c79c982d6a9960FBE, 0x5A0EA13A3E172432aaee058687e4999389Aa947a, 0xE746Cab01D0e3c86d1ed7AD85F4eA1deC4023B67, 0xb08992Bd285B48B1C743Ca4e7ad8E543A65d4126, 0xEa1b40dE5487CB20806e1dE3FCC27D1C20398757, 0x917C5B1Ff016e5e8C90aC679a63CF87251dB257F, 0x1Ab7F9e5bcC70bc6f2529a0aAcd0230C4C90a157 ]; constructor() ERC721("ValhallaHipsters", "VAHI") { OWNER1 = msg.sender; projectPaused = 1; mintedNfts = 0; SMART_CONTRACT_RELEASE_BY_UNIXTIME = block.timestamp; // Mint NFTs that were on ETH; for(uint i = 0; i < ethLegacyMints.length; i++) { mintEthereumLegacyNfts(ethLegacyMints[i]); } } event SubscribePayments( uint indexed id, address indexed user, uint256 indexed date, uint256 amount ); function totalSupply() public pure returns (uint256) { return MAX_NFTS; } function contractURI() public view returns (string memory) { string memory url = string(abi.encodePacked(xonalabsBaseUrl, jsonsIpfsId, "/", "about", ".json")); return url; } function mintNft(uint amount) internal { for(uint i = 0; i < amount; i++) { mintedNfts++; uint new_item_id = mintedNfts; string memory tokenuri = string(abi.encodePacked(xonalabsBaseUrl, jsonsIpfsId, "/", uint2str(new_item_id), ".json")); _safeMint(msg.sender, new_item_id); _setTokenURI(new_item_id, tokenuri); emit SubscribePayments(new_item_id, msg.sender, block.timestamp, msg.value); } } function mintEthereumLegacyNfts(address user) internal { mintedNfts++; uint new_item_id = mintedNfts; string memory tokenuri = string(abi.encodePacked(xonalabsBaseUrl, jsonsIpfsId, "/", uint2str(new_item_id), ".json")); _safeMint(user, new_item_id); _setTokenURI(new_item_id, tokenuri); emit SubscribePayments(new_item_id, user, block.timestamp, 0); } function changeOwner2(address _newaddr) public isOwner { OWNER2 = _newaddr; } function changeXonalabsBaseUrl(string memory _url) public isOwner { xonalabsBaseUrl = _url; } function changeJsonsIpfsId(string memory _ipfsid) public isOwner { jsonsIpfsId = _ipfsid; } function suspendProject(uint _param) public isOwner { projectPaused = _param; } function getScBalance() public view returns (uint) { return address(this).balance; } function changefreePhaseFee(uint256 _new) public isOwner { freePhaseFee = _new; } function chengeFee(uint256 _new) public isOwner { generalFee = _new; } function changeBatchedFees(uint256 _second, uint256 _third, uint256 _fourth, uint256 _fifth, uint256 _sixth, uint256 _seventh, uint256 _eighth, uint256 _nineth, uint256 _tenth) public isOwner { twoNftsFee = _second; threeNftsFee = _third; fourNftsFee = _fourth; fiveNftsFee = _fifth; sixNftsFee = _sixth; sevenNftsFee = _seventh; eightNftsFee = _eighth; nineNftsFee = _nineth; tenNftsFee = _tenth; } function payout(address payable _addr) public isOwner { _addr.transfer(address(this).balance); } function checkHowManyToMint() internal returns (uint) { if (msg.value == generalFee) { return(1); } else if (msg.value == twoNftsFee) { return(2); } else if (msg.value == threeNftsFee) { return(3); } else if (msg.value == fourNftsFee) { return(4); } else if (msg.value == fiveNftsFee) { return(5); } else if (msg.value == sixNftsFee) { return(6); } else if (msg.value == sevenNftsFee) { return(7); } else if (msg.value == eightNftsFee) { return(8); } else if (msg.value == nineNftsFee) { return(9); } else if (msg.value == tenNftsFee) { return(10); } else { require (1 == 0, "The ether amount is not correct to mint one or multiple NFTs!"); } } function checkMintPhaseFee() internal { if (mintedNfts < FREE_NFTS) { mintNft(1); } else { mintNft(checkHowManyToMint()); } } function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return ownerTokens[owner][index]; } function uint2str(uint256 value) internal pure returns (string memory) { 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); } receive() external isPausedProject isMaxCountReached payable { checkMintPhaseFee(); } modifier isMaxCountReached() { require(mintedNfts < MAX_NFTS, "The ValhallaHipsters buying period has ended. 10000 NFTs were minted!"); _; } modifier isPausedProject() { require (projectPaused == 0, "The project not started yet or owners stopped it. Sorry for the inconvenience"); _; } modifier isOwner() { require(msg.sender == OWNER1 || msg.sender == OWNER2, "Caller is not smart contract owner"); _; } }
// SPDX-License-Identifier: MIT 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); } } } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./IERC721Enumerable.sol"; import "./ERC165.sol"; import "./Context.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; /** * @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 { } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./Context.sol"; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @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(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721Receiver.sol"; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) { return this.onERC721Received.selector; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } }
// 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); }
// SPDX-License-Identifier: MIT 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); } }
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":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"date","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SubscribePayments","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":"FREE_NFTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OWNER1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OWNER2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SMART_CONTRACT_RELEASE_BY_UNIXTIME","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":"uint256","name":"_second","type":"uint256"},{"internalType":"uint256","name":"_third","type":"uint256"},{"internalType":"uint256","name":"_fourth","type":"uint256"},{"internalType":"uint256","name":"_fifth","type":"uint256"},{"internalType":"uint256","name":"_sixth","type":"uint256"},{"internalType":"uint256","name":"_seventh","type":"uint256"},{"internalType":"uint256","name":"_eighth","type":"uint256"},{"internalType":"uint256","name":"_nineth","type":"uint256"},{"internalType":"uint256","name":"_tenth","type":"uint256"}],"name":"changeBatchedFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_ipfsid","type":"string"}],"name":"changeJsonsIpfsId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddr","type":"address"}],"name":"changeOwner2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_url","type":"string"}],"name":"changeXonalabsBaseUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"changefreePhaseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"chengeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ethLegacyMints","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freePhaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getScBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"jsonsIpfsId","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintedNfts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_addr","type":"address"}],"name":"payout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"projectPaused","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_param","type":"uint256"}],"name":"suspendProject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"pure","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":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xonalabsBaseUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
600880546001600160a01b0319167348122d8fa6d9f24dd27906e4221b8d1bee16e00617905560c0604052601f60808190527f68747470733a2f2f697066732e786f6e616c6162732e636f6d2f697066732f0060a09081526200006691600a9190620009cb565b506040518060600160405280602e815260200162003332602e913980516200009791600b91602090910190620009cb565b506000600e55680107ad8f556c6c0000600f5568020f5b1eaad8d8000060105568031708ae004544000060115568041eb63d55b1b00000601290815568052663ccab1e1c000060135568062e115c008a880000601455680735beeb55f6f4000060155568083d6c7aab636000006016556809451a0a00cfcc0000601755680a4cc799563c380000601855604080516102408101825273aa4830313654c86417aca0292dd3573daf7905c8815273d9a673f3dbc459d2e2943dc82b1294c483f263656020820181905273d19aea0a223015dfed6d0bb290dacdbcc5ea937092820192909252730a4de625aa7624dd72cb09a41a6e52fce199331060608201527305195ac340ac38e0710f4ce45a432321a645201b608082015273d19523a0e087bc62ee1d8a0153a2b753035da72a60a082015273b8779d3cf3e0f61806130b23a5ce619a8f02cca660c082015273b56cdccfc00e949d37b06592eff031003196802d60e082015261010081019190915273c9c6d5044e3fb14ff2e1baa82768543b02f8d28661012082015273b0e4be83df49bf88bf6a5817a73f7a1cdf3ed5d2610140820152734adb6b079caf051cfb45935c79c982d6a9960fbe610160820152735a0ea13a3e172432aaee058687e4999389aa947a61018082015273e746cab01d0e3c86d1ed7ad85f4ea1dec4023b676101a082015273b08992bd285b48b1c743ca4e7ad8e543a65d41266101c082015273ea1b40de5487cb20806e1de3fcc27d1c203987576101e082015273917c5b1ff016e5e8c90ac679a63cf87251db257f610200820152731ab7f9e5bcc70bc6f2529a0aacd0230c4c90a1576102208201526200030891601a919062000a5a565b503480156200031657600080fd5b50604080518082018252601081526f56616c68616c6c61486970737465727360801b6020808301918252835180850190945260048452635641484960e01b9084015281519192916200036b91600091620009cb565b50805162000381906001906020840190620009cb565b5050600780546001600160a01b03191633179055506001600c556000600d819055426009555b601a54811015620003fc57620003e7601a8281548110620003cc57620003cc62000d65565b6000918252602090912001546001600160a01b031662000403565b80620003f38162000d04565b915050620003a7565b5062000d91565b600d8054906000620004158362000d04565b9091555050600d546000600a600b6200042e84620004b8565b604051602001620004429392919062000b9e565b60408051601f198184030181529190529050620004608383620005d5565b6200046c8282620005fb565b42836001600160a01b0316837f2fe7c826098a19a61bb3ab7a1c6cbe7e1a86338daea4f83de1570abef92025876000604051620004ab91815260200190565b60405180910390a4505050565b606081620004dd5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156200050d5780620004f48162000d04565b9150620005059050600a8362000c63565b9150620004e1565b6000816001600160401b038111156200052a576200052a62000d7b565b6040519080825280601f01601f19166020018201604052801562000555576020820181803683370190505b5090505b8415620005cd576200056d60018362000c7a565b91506200057c600a8662000d22565b6200058990603062000c48565b60f81b818381518110620005a157620005a162000d65565b60200101906001600160f81b031916908160001a905350620005c5600a8662000c63565b945062000559565b949350505050565b620005f7828260405180602001604052806000815250620006a260201b60201c565b5050565b6000828152600260205260409020546001600160a01b03166200067c5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084015b60405180910390fd5b600082815260066020908152604090912082516200069d92840190620009cb565b505050565b620006ae838362000715565b620006bd60008484846200085d565b6200069d5760405162461bcd60e51b815260206004820152603260248201526000805160206200331283398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840162000673565b6001600160a01b0382166200076d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640162000673565b6000818152600260205260409020546001600160a01b031615620007d45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640162000673565b6001600160a01b0382166000908152600360205260408120805460019290620007ff90849062000c48565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006200087e846001600160a01b0316620009c560201b620012981760201c565b15620009ba57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290620008b890339089908890889060040162000bf2565b602060405180830381600087803b158015620008d357600080fd5b505af192505050801562000906575060408051601f3d908101601f19168201909252620009039181019062000ac9565b60015b6200099f573d80801562000937576040519150601f19603f3d011682016040523d82523d6000602084013e6200093c565b606091505b508051620009975760405162461bcd60e51b815260206004820152603260248201526000805160206200331283398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840162000673565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050620005cd565b506001949350505050565b3b151590565b828054620009d99062000cc7565b90600052602060002090601f016020900481019282620009fd576000855562000a48565b82601f1062000a1857805160ff191683800117855562000a48565b8280016001018555821562000a48579182015b8281111562000a4857825182559160200191906001019062000a2b565b5062000a5692915062000ab2565b5090565b82805482825590600052602060002090810192821562000a48579160200282015b8281111562000a4857825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000a7b565b5b8082111562000a56576000815560010162000ab3565b60006020828403121562000adc57600080fd5b81516001600160e01b03198116811462000af557600080fd5b9392505050565b8054600090600181811c908083168062000b1757607f831692505b602080841082141562000b3a57634e487b7160e01b600052602260045260246000fd5b81801562000b51576001811462000b635762000b92565b60ff1986168952848901965062000b92565b60008881526020902060005b8681101562000b8a5781548b82015290850190830162000b6f565b505084890196505b50505050505092915050565b600062000bb762000bb0838762000afc565b8562000afc565b602f60f81b8152835162000bd381600184016020880162000c94565b64173539b7b760d91b6001929091019182015260060195945050505050565b600060018060a01b03808716835280861660208401525083604083015260806060830152825180608084015262000c318160a085016020870162000c94565b601f01601f19169190910160a00195945050505050565b6000821982111562000c5e5762000c5e62000d39565b500190565b60008262000c755762000c7562000d4f565b500490565b60008282101562000c8f5762000c8f62000d39565b500390565b60005b8381101562000cb157818101518382015260200162000c97565b8381111562000cc1576000848401525b50505050565b600181811c9082168062000cdc57607f821691505b6020821081141562000cfe57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000d1b5762000d1b62000d39565b5060010190565b60008262000d345762000d3462000d4f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6125718062000da16000396000f3fe6080604052600436106102295760003560e01c806370a0823111610123578063a8c9739d116100ab578063c87b56dd1161006f578063c87b56dd1461073c578063cdaf5ede1461075c578063e8a3d48514610772578063e985e9c514610787578063f4fcfb4b146107d057600080fd5b8063a8c9739d146106be578063af9588b4146106d4578063b88d4fde146106e7578063c16e76b214610707578063c18dbb541461072757600080fd5b806387e2c5a9116100f257806387e2c5a91461063e57806395d89b411461065e5780639c407d3214610673578063a1e4cff614610689578063a22cb4651461069e57600080fd5b806370a08231146105c8578063818fa6ce146105e8578063826e14a014610608578063842b212e1461061e57600080fd5b806323b872dd116101b1578063406b662811610175578063406b66281461053357806342842e0e1461055357806344a30a101461057357806354fd4d50146105935780636352211e146105a857600080fd5b806323b872dd1461049357806327478925146104b357806328766028146104d35780632f745c59146104f35780633489b2c01461051357600080fd5b8063093d8c64116101f8578063093d8c6414610404578063095ea7b3146104285780630b7e9c441461044857806318160ddd14610468578063202fece21461047d57600080fd5b806301ffc9a71461035557806306fdde031461038a5780630755df46146103ac578063081812fc146103e457600080fd5b3661035057600c54156102bf5760405162461bcd60e51b815260206004820152604d60248201527f5468652070726f6a656374206e6f74207374617274656420796574206f72206f60448201527f776e6572732073746f707065642069742e20536f72727920666f72207468652060648201526c696e636f6e76656e69656e636560981b608482015260a4015b60405180910390fd5b612710600d54106103465760405162461bcd60e51b815260206004820152604560248201527f5468652056616c68616c6c61486970737465727320627579696e67207065726960448201527f6f642068617320656e6465642e203130303030204e4654732077657265206d696064820152646e7465642160d81b608482015260a4016102b6565b61034e6107e6565b005b600080fd5b34801561036157600080fd5b50610375610370366004612026565b61080e565b60405190151581526020015b60405180910390f35b34801561039657600080fd5b5061039f610860565b60405161038191906122e4565b3480156103b857600080fd5b506103cc6103c73660046120a9565b6108f2565b6040516001600160a01b039091168152602001610381565b3480156103f057600080fd5b506103cc6103ff3660046120a9565b61091c565b34801561041057600080fd5b5061041a61271081565b604051908152602001610381565b34801561043457600080fd5b5061034e610443366004611ffa565b6109a4565b34801561045457600080fd5b5061034e610463366004611eb0565b610aba565b34801561047457600080fd5b5061271061041a565b34801561048957600080fd5b5061041a600c5481565b34801561049f57600080fd5b5061034e6104ae366004611f06565b610b32565b3480156104bf57600080fd5b5061034e6104ce366004612060565b610b63565b3480156104df57600080fd5b5061034e6104ee3660046120a9565b610bb5565b3480156104ff57600080fd5b5061041a61050e366004611ffa565b610bf9565b34801561051f57600080fd5b506007546103cc906001600160a01b031681565b34801561053f57600080fd5b5061034e61054e3660046120c2565b610c8f565b34801561055f57600080fd5b5061034e61056e366004611f06565b610cf7565b34801561057f57600080fd5b5061034e61058e366004612060565b610d12565b34801561059f57600080fd5b5061041a600181565b3480156105b457600080fd5b506103cc6105c33660046120a9565b610d64565b3480156105d457600080fd5b5061041a6105e3366004611eb0565b610ddb565b3480156105f457600080fd5b5061034e6106033660046120a9565b610e62565b34801561061457600080fd5b5061041a600f5481565b34801561062a57600080fd5b506008546103cc906001600160a01b031681565b34801561064a57600080fd5b5061034e6106593660046120a9565b610ea6565b34801561066a57600080fd5b5061039f610eea565b34801561067f57600080fd5b5061041a6101f481565b34801561069557600080fd5b5061039f610ef9565b3480156106aa57600080fd5b5061034e6106b9366004611fc7565b610f87565b3480156106ca57600080fd5b5061041a60095481565b3480156106e057600080fd5b504761041a565b3480156106f357600080fd5b5061034e610702366004611f47565b61104c565b34801561071357600080fd5b5061034e610722366004611eb0565b611084565b34801561073357600080fd5b5061039f6110e5565b34801561074857600080fd5b5061039f6107573660046120a9565b6110f2565b34801561076857600080fd5b5061041a600e5481565b34801561077e57600080fd5b5061039f611269565b34801561079357600080fd5b506103756107a2366004611ecd565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107dc57600080fd5b5061041a600d5481565b6101f4600d5410156107fe576107fc600161129e565b565b6107fc610809611361565b61129e565b60006001600160e01b031982166380ac58cd60e01b148061083f57506001600160e01b03198216635b5e139f60e01b145b8061085a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461086f9061244b565b80601f016020809104026020016040519081016040528092919081815260200182805461089b9061244b565b80156108e85780601f106108bd576101008083540402835291602001916108e8565b820191906000526020600020905b8154815290600101906020018083116108cb57829003601f168201915b5050505050905090565b601a818154811061090257600080fd5b6000918252602090912001546001600160a01b0316905081565b600061092782611471565b6109885760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102b6565b506000908152600460205260409020546001600160a01b031690565b60006109af82610d64565b9050806001600160a01b0316836001600160a01b03161415610a1d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016102b6565b336001600160a01b0382161480610a395750610a3981336107a2565b610aab5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016102b6565b610ab5838361148e565b505050565b6007546001600160a01b0316331480610add57506008546001600160a01b031633145b610af95760405162461bcd60e51b81526004016102b690612349565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610b2e573d6000803e3d6000fd5b5050565b610b3c33826114fc565b610b585760405162461bcd60e51b81526004016102b69061238b565b610ab58383836115e2565b6007546001600160a01b0316331480610b8657506008546001600160a01b031633145b610ba25760405162461bcd60e51b81526004016102b690612349565b8051610b2e90600a906020840190611da1565b6007546001600160a01b0316331480610bd857506008546001600160a01b031633145b610bf45760405162461bcd60e51b81526004016102b690612349565b600f55565b6000610c0483610ddb565b8210610c665760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016102b6565b506001600160a01b03919091166000908152601960209081526040808320938352929052205490565b6007546001600160a01b0316331480610cb257506008546001600160a01b031633145b610cce5760405162461bcd60e51b81526004016102b690612349565b601098909855601196909655601294909455601392909255601455601555601655601755601855565b610ab58383836040518060200160405280600081525061104c565b6007546001600160a01b0316331480610d3557506008546001600160a01b031633145b610d515760405162461bcd60e51b81526004016102b690612349565b8051610b2e90600b906020840190611da1565b6000818152600260205260408120546001600160a01b03168061085a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016102b6565b60006001600160a01b038216610e465760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016102b6565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b0316331480610e8557506008546001600160a01b031633145b610ea15760405162461bcd60e51b81526004016102b690612349565b600c55565b6007546001600160a01b0316331480610ec957506008546001600160a01b031633145b610ee55760405162461bcd60e51b81526004016102b690612349565b600e55565b60606001805461086f9061244b565b600b8054610f069061244b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f329061244b565b8015610f7f5780601f10610f5457610100808354040283529160200191610f7f565b820191906000526020600020905b815481529060010190602001808311610f6257829003601f168201915b505050505081565b6001600160a01b038216331415610fe05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016102b6565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61105633836114fc565b6110725760405162461bcd60e51b81526004016102b69061238b565b61107e84848484611782565b50505050565b6007546001600160a01b03163314806110a757506008546001600160a01b031633145b6110c35760405162461bcd60e51b81526004016102b690612349565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600a8054610f069061244b565b60606110fd82611471565b6111635760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016102b6565b6000828152600660205260408120805461117c9061244b565b80601f01602080910402602001604051908101604052809291908181526020018280546111a89061244b565b80156111f55780601f106111ca576101008083540402835291602001916111f5565b820191906000526020600020905b8154815290600101906020018083116111d857829003601f168201915b50505050509050600061121360408051602081019091526000815290565b9050805160001415611226575092915050565b8151156112585780826040516020016112409291906121e7565b60405160208183030381529060405292505050919050565b611261846117b5565b949350505050565b60606000600a600b604051602001611282929190612264565b60408051601f1981840301815291905292915050565b3b151590565b60005b81811015610b2e57600d80549060006112b983612486565b9091555050600d546000600a600b6112d08461188d565b6040516020016112e293929190612216565b60405160208183030381529060405290506112fd338361198b565b61130782826119a5565b42336001600160a01b0316837f2fe7c826098a19a61bb3ab7a1c6cbe7e1a86338daea4f83de1570abef92025873460405161134491815260200190565b60405180910390a45050808061135990612486565b9150506112a1565b6000600f543414156113735750600190565b6010543414156113835750600290565b6011543414156113935750600390565b6012543414156113a35750600490565b6013543414156113b35750600590565b6014543414156113c35750600690565b6015543414156113d35750600790565b6016543414156113e35750600890565b6017543414156113f35750600990565b6018543414156114035750600a90565b60405162461bcd60e51b815260206004820152603d60248201527f54686520657468657220616d6f756e74206973206e6f7420636f72726563742060448201527f746f206d696e74206f6e65206f72206d756c7469706c65204e4654732100000060648201526084016102b6565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906114c382610d64565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061150782611471565b6115685760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102b6565b600061157383610d64565b9050806001600160a01b0316846001600160a01b031614806115ae5750836001600160a01b03166115a38461091c565b6001600160a01b0316145b8061126157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16611261565b826001600160a01b03166115f582610d64565b6001600160a01b03161461165d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016102b6565b6001600160a01b0382166116bf5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016102b6565b6116ca60008261148e565b6001600160a01b03831660009081526003602052604081208054600192906116f3908490612408565b90915550506001600160a01b03821660009081526003602052604081208054600192906117219084906123dc565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61178d8484846115e2565b61179984848484611a30565b61107e5760405162461bcd60e51b81526004016102b6906122f7565b60606117c082611471565b6118245760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016102b6565b600061183b60408051602081019091526000815290565b9050600081511161185b5760405180602001604052806000815250611886565b8061186584611b3d565b6040516020016118769291906121e7565b6040516020818303038152906040525b9392505050565b6060816118b15750506040805180820190915260018152600360fc1b602082015290565b8160005b81156118db57806118c581612486565b91506118d49050600a836123f4565b91506118b5565b60008167ffffffffffffffff8111156118f6576118f66124f7565b6040519080825280601f01601f191660200182016040528015611920576020820181803683370190505b5090505b841561126157611935600183612408565b9150611942600a866124a1565b61194d9060306123dc565b60f81b818381518110611962576119626124e1565b60200101906001600160f81b031916908160001a905350611984600a866123f4565b9450611924565b610b2e828260405180602001604052806000815250611c3b565b6119ae82611471565b611a115760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016102b6565b60008281526006602090815260409091208251610ab592840190611da1565b60006001600160a01b0384163b15611b3257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611a749033908990889088906004016122a7565b602060405180830381600087803b158015611a8e57600080fd5b505af1925050508015611abe575060408051601f3d908101601f19168201909252611abb91810190612043565b60015b611b18573d808015611aec576040519150601f19603f3d011682016040523d82523d6000602084013e611af1565b606091505b508051611b105760405162461bcd60e51b81526004016102b6906122f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611261565b506001949350505050565b606081611b615750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b8b5780611b7581612486565b9150611b849050600a836123f4565b9150611b65565b60008167ffffffffffffffff811115611ba657611ba66124f7565b6040519080825280601f01601f191660200182016040528015611bd0576020820181803683370190505b5090505b841561126157611be5600183612408565b9150611bf2600a866124a1565b611bfd9060306123dc565b60f81b818381518110611c1257611c126124e1565b60200101906001600160f81b031916908160001a905350611c34600a866123f4565b9450611bd4565b611c458383611c6e565b611c526000848484611a30565b610ab55760405162461bcd60e51b81526004016102b6906122f7565b6001600160a01b038216611cc45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016102b6565b611ccd81611471565b15611d1a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016102b6565b6001600160a01b0382166000908152600360205260408120805460019290611d439084906123dc565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611dad9061244b565b90600052602060002090601f016020900481019282611dcf5760008555611e15565b82601f10611de857805160ff1916838001178555611e15565b82800160010185558215611e15579182015b82811115611e15578251825591602001919060010190611dfa565b50611e21929150611e25565b5090565b5b80821115611e215760008155600101611e26565b600067ffffffffffffffff80841115611e5557611e556124f7565b604051601f8501601f19908116603f01168101908282118183101715611e7d57611e7d6124f7565b81604052809350858152868686011115611e9657600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611ec257600080fd5b81356118868161250d565b60008060408385031215611ee057600080fd5b8235611eeb8161250d565b91506020830135611efb8161250d565b809150509250929050565b600080600060608486031215611f1b57600080fd5b8335611f268161250d565b92506020840135611f368161250d565b929592945050506040919091013590565b60008060008060808587031215611f5d57600080fd5b8435611f688161250d565b93506020850135611f788161250d565b925060408501359150606085013567ffffffffffffffff811115611f9b57600080fd5b8501601f81018713611fac57600080fd5b611fbb87823560208401611e3a565b91505092959194509250565b60008060408385031215611fda57600080fd5b8235611fe58161250d565b915060208301358015158114611efb57600080fd5b6000806040838503121561200d57600080fd5b82356120188161250d565b946020939093013593505050565b60006020828403121561203857600080fd5b813561188681612525565b60006020828403121561205557600080fd5b815161188681612525565b60006020828403121561207257600080fd5b813567ffffffffffffffff81111561208957600080fd5b8201601f8101841361209a57600080fd5b61126184823560208401611e3a565b6000602082840312156120bb57600080fd5b5035919050565b60008060008060008060008060006101208a8c0312156120e157600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b6000815180845261213981602086016020860161241f565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061216757607f831692505b602080841082141561218957634e487b7160e01b600052602260045260246000fd5b81801561219d57600181146121ae576121db565b60ff198616895284890196506121db565b60008881526020902060005b868110156121d35781548b8201529085019083016121ba565b505084890196505b50505050505092915050565b600083516121f981846020880161241f565b83519083019061220d81836020880161241f565b01949350505050565b600061222b612225838761214d565b8561214d565b602f60f81b8152835161224581600184016020880161241f565b64173539b7b760d91b6001929091019182015260060195945050505050565b6000612279612273838661214d565b8461214d565b602f60f81b81526418589bdd5d60da1b600182015264173539b7b760d91b6006820152600b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122da90830184612121565b9695505050505050565b6020815260006118866020830184612121565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f43616c6c6572206973206e6f7420736d61727420636f6e7472616374206f776e60408201526132b960f11b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156123ef576123ef6124b5565b500190565b600082612403576124036124cb565b500490565b60008282101561241a5761241a6124b5565b500390565b60005b8381101561243a578181015183820152602001612422565b8381111561107e5750506000910152565b600181811c9082168061245f57607f821691505b6020821081141561248057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561249a5761249a6124b5565b5060010190565b6000826124b0576124b06124cb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461252257600080fd5b50565b6001600160e01b03198116811461252257600080fdfea26469706673582212201fa755bba07c3fdddba9348b263ba0313a282280b198dbe43894cf302acb84aa64736f6c634300080700334552433732313a207472616e7366657220746f206e6f6e204552433732315265516d557a714a684b507a5376695a6f4441397974785637756971627546424d58615645735958396f4577544d3742
Deployed Bytecode
0x6080604052600436106102295760003560e01c806370a0823111610123578063a8c9739d116100ab578063c87b56dd1161006f578063c87b56dd1461073c578063cdaf5ede1461075c578063e8a3d48514610772578063e985e9c514610787578063f4fcfb4b146107d057600080fd5b8063a8c9739d146106be578063af9588b4146106d4578063b88d4fde146106e7578063c16e76b214610707578063c18dbb541461072757600080fd5b806387e2c5a9116100f257806387e2c5a91461063e57806395d89b411461065e5780639c407d3214610673578063a1e4cff614610689578063a22cb4651461069e57600080fd5b806370a08231146105c8578063818fa6ce146105e8578063826e14a014610608578063842b212e1461061e57600080fd5b806323b872dd116101b1578063406b662811610175578063406b66281461053357806342842e0e1461055357806344a30a101461057357806354fd4d50146105935780636352211e146105a857600080fd5b806323b872dd1461049357806327478925146104b357806328766028146104d35780632f745c59146104f35780633489b2c01461051357600080fd5b8063093d8c64116101f8578063093d8c6414610404578063095ea7b3146104285780630b7e9c441461044857806318160ddd14610468578063202fece21461047d57600080fd5b806301ffc9a71461035557806306fdde031461038a5780630755df46146103ac578063081812fc146103e457600080fd5b3661035057600c54156102bf5760405162461bcd60e51b815260206004820152604d60248201527f5468652070726f6a656374206e6f74207374617274656420796574206f72206f60448201527f776e6572732073746f707065642069742e20536f72727920666f72207468652060648201526c696e636f6e76656e69656e636560981b608482015260a4015b60405180910390fd5b612710600d54106103465760405162461bcd60e51b815260206004820152604560248201527f5468652056616c68616c6c61486970737465727320627579696e67207065726960448201527f6f642068617320656e6465642e203130303030204e4654732077657265206d696064820152646e7465642160d81b608482015260a4016102b6565b61034e6107e6565b005b600080fd5b34801561036157600080fd5b50610375610370366004612026565b61080e565b60405190151581526020015b60405180910390f35b34801561039657600080fd5b5061039f610860565b60405161038191906122e4565b3480156103b857600080fd5b506103cc6103c73660046120a9565b6108f2565b6040516001600160a01b039091168152602001610381565b3480156103f057600080fd5b506103cc6103ff3660046120a9565b61091c565b34801561041057600080fd5b5061041a61271081565b604051908152602001610381565b34801561043457600080fd5b5061034e610443366004611ffa565b6109a4565b34801561045457600080fd5b5061034e610463366004611eb0565b610aba565b34801561047457600080fd5b5061271061041a565b34801561048957600080fd5b5061041a600c5481565b34801561049f57600080fd5b5061034e6104ae366004611f06565b610b32565b3480156104bf57600080fd5b5061034e6104ce366004612060565b610b63565b3480156104df57600080fd5b5061034e6104ee3660046120a9565b610bb5565b3480156104ff57600080fd5b5061041a61050e366004611ffa565b610bf9565b34801561051f57600080fd5b506007546103cc906001600160a01b031681565b34801561053f57600080fd5b5061034e61054e3660046120c2565b610c8f565b34801561055f57600080fd5b5061034e61056e366004611f06565b610cf7565b34801561057f57600080fd5b5061034e61058e366004612060565b610d12565b34801561059f57600080fd5b5061041a600181565b3480156105b457600080fd5b506103cc6105c33660046120a9565b610d64565b3480156105d457600080fd5b5061041a6105e3366004611eb0565b610ddb565b3480156105f457600080fd5b5061034e6106033660046120a9565b610e62565b34801561061457600080fd5b5061041a600f5481565b34801561062a57600080fd5b506008546103cc906001600160a01b031681565b34801561064a57600080fd5b5061034e6106593660046120a9565b610ea6565b34801561066a57600080fd5b5061039f610eea565b34801561067f57600080fd5b5061041a6101f481565b34801561069557600080fd5b5061039f610ef9565b3480156106aa57600080fd5b5061034e6106b9366004611fc7565b610f87565b3480156106ca57600080fd5b5061041a60095481565b3480156106e057600080fd5b504761041a565b3480156106f357600080fd5b5061034e610702366004611f47565b61104c565b34801561071357600080fd5b5061034e610722366004611eb0565b611084565b34801561073357600080fd5b5061039f6110e5565b34801561074857600080fd5b5061039f6107573660046120a9565b6110f2565b34801561076857600080fd5b5061041a600e5481565b34801561077e57600080fd5b5061039f611269565b34801561079357600080fd5b506103756107a2366004611ecd565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107dc57600080fd5b5061041a600d5481565b6101f4600d5410156107fe576107fc600161129e565b565b6107fc610809611361565b61129e565b60006001600160e01b031982166380ac58cd60e01b148061083f57506001600160e01b03198216635b5e139f60e01b145b8061085a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461086f9061244b565b80601f016020809104026020016040519081016040528092919081815260200182805461089b9061244b565b80156108e85780601f106108bd576101008083540402835291602001916108e8565b820191906000526020600020905b8154815290600101906020018083116108cb57829003601f168201915b5050505050905090565b601a818154811061090257600080fd5b6000918252602090912001546001600160a01b0316905081565b600061092782611471565b6109885760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102b6565b506000908152600460205260409020546001600160a01b031690565b60006109af82610d64565b9050806001600160a01b0316836001600160a01b03161415610a1d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016102b6565b336001600160a01b0382161480610a395750610a3981336107a2565b610aab5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016102b6565b610ab5838361148e565b505050565b6007546001600160a01b0316331480610add57506008546001600160a01b031633145b610af95760405162461bcd60e51b81526004016102b690612349565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610b2e573d6000803e3d6000fd5b5050565b610b3c33826114fc565b610b585760405162461bcd60e51b81526004016102b69061238b565b610ab58383836115e2565b6007546001600160a01b0316331480610b8657506008546001600160a01b031633145b610ba25760405162461bcd60e51b81526004016102b690612349565b8051610b2e90600a906020840190611da1565b6007546001600160a01b0316331480610bd857506008546001600160a01b031633145b610bf45760405162461bcd60e51b81526004016102b690612349565b600f55565b6000610c0483610ddb565b8210610c665760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016102b6565b506001600160a01b03919091166000908152601960209081526040808320938352929052205490565b6007546001600160a01b0316331480610cb257506008546001600160a01b031633145b610cce5760405162461bcd60e51b81526004016102b690612349565b601098909855601196909655601294909455601392909255601455601555601655601755601855565b610ab58383836040518060200160405280600081525061104c565b6007546001600160a01b0316331480610d3557506008546001600160a01b031633145b610d515760405162461bcd60e51b81526004016102b690612349565b8051610b2e90600b906020840190611da1565b6000818152600260205260408120546001600160a01b03168061085a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016102b6565b60006001600160a01b038216610e465760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016102b6565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b0316331480610e8557506008546001600160a01b031633145b610ea15760405162461bcd60e51b81526004016102b690612349565b600c55565b6007546001600160a01b0316331480610ec957506008546001600160a01b031633145b610ee55760405162461bcd60e51b81526004016102b690612349565b600e55565b60606001805461086f9061244b565b600b8054610f069061244b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f329061244b565b8015610f7f5780601f10610f5457610100808354040283529160200191610f7f565b820191906000526020600020905b815481529060010190602001808311610f6257829003601f168201915b505050505081565b6001600160a01b038216331415610fe05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016102b6565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61105633836114fc565b6110725760405162461bcd60e51b81526004016102b69061238b565b61107e84848484611782565b50505050565b6007546001600160a01b03163314806110a757506008546001600160a01b031633145b6110c35760405162461bcd60e51b81526004016102b690612349565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600a8054610f069061244b565b60606110fd82611471565b6111635760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016102b6565b6000828152600660205260408120805461117c9061244b565b80601f01602080910402602001604051908101604052809291908181526020018280546111a89061244b565b80156111f55780601f106111ca576101008083540402835291602001916111f5565b820191906000526020600020905b8154815290600101906020018083116111d857829003601f168201915b50505050509050600061121360408051602081019091526000815290565b9050805160001415611226575092915050565b8151156112585780826040516020016112409291906121e7565b60405160208183030381529060405292505050919050565b611261846117b5565b949350505050565b60606000600a600b604051602001611282929190612264565b60408051601f1981840301815291905292915050565b3b151590565b60005b81811015610b2e57600d80549060006112b983612486565b9091555050600d546000600a600b6112d08461188d565b6040516020016112e293929190612216565b60405160208183030381529060405290506112fd338361198b565b61130782826119a5565b42336001600160a01b0316837f2fe7c826098a19a61bb3ab7a1c6cbe7e1a86338daea4f83de1570abef92025873460405161134491815260200190565b60405180910390a45050808061135990612486565b9150506112a1565b6000600f543414156113735750600190565b6010543414156113835750600290565b6011543414156113935750600390565b6012543414156113a35750600490565b6013543414156113b35750600590565b6014543414156113c35750600690565b6015543414156113d35750600790565b6016543414156113e35750600890565b6017543414156113f35750600990565b6018543414156114035750600a90565b60405162461bcd60e51b815260206004820152603d60248201527f54686520657468657220616d6f756e74206973206e6f7420636f72726563742060448201527f746f206d696e74206f6e65206f72206d756c7469706c65204e4654732100000060648201526084016102b6565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906114c382610d64565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061150782611471565b6115685760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016102b6565b600061157383610d64565b9050806001600160a01b0316846001600160a01b031614806115ae5750836001600160a01b03166115a38461091c565b6001600160a01b0316145b8061126157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16611261565b826001600160a01b03166115f582610d64565b6001600160a01b03161461165d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016102b6565b6001600160a01b0382166116bf5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016102b6565b6116ca60008261148e565b6001600160a01b03831660009081526003602052604081208054600192906116f3908490612408565b90915550506001600160a01b03821660009081526003602052604081208054600192906117219084906123dc565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61178d8484846115e2565b61179984848484611a30565b61107e5760405162461bcd60e51b81526004016102b6906122f7565b60606117c082611471565b6118245760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016102b6565b600061183b60408051602081019091526000815290565b9050600081511161185b5760405180602001604052806000815250611886565b8061186584611b3d565b6040516020016118769291906121e7565b6040516020818303038152906040525b9392505050565b6060816118b15750506040805180820190915260018152600360fc1b602082015290565b8160005b81156118db57806118c581612486565b91506118d49050600a836123f4565b91506118b5565b60008167ffffffffffffffff8111156118f6576118f66124f7565b6040519080825280601f01601f191660200182016040528015611920576020820181803683370190505b5090505b841561126157611935600183612408565b9150611942600a866124a1565b61194d9060306123dc565b60f81b818381518110611962576119626124e1565b60200101906001600160f81b031916908160001a905350611984600a866123f4565b9450611924565b610b2e828260405180602001604052806000815250611c3b565b6119ae82611471565b611a115760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016102b6565b60008281526006602090815260409091208251610ab592840190611da1565b60006001600160a01b0384163b15611b3257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611a749033908990889088906004016122a7565b602060405180830381600087803b158015611a8e57600080fd5b505af1925050508015611abe575060408051601f3d908101601f19168201909252611abb91810190612043565b60015b611b18573d808015611aec576040519150601f19603f3d011682016040523d82523d6000602084013e611af1565b606091505b508051611b105760405162461bcd60e51b81526004016102b6906122f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611261565b506001949350505050565b606081611b615750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b8b5780611b7581612486565b9150611b849050600a836123f4565b9150611b65565b60008167ffffffffffffffff811115611ba657611ba66124f7565b6040519080825280601f01601f191660200182016040528015611bd0576020820181803683370190505b5090505b841561126157611be5600183612408565b9150611bf2600a866124a1565b611bfd9060306123dc565b60f81b818381518110611c1257611c126124e1565b60200101906001600160f81b031916908160001a905350611c34600a866123f4565b9450611bd4565b611c458383611c6e565b611c526000848484611a30565b610ab55760405162461bcd60e51b81526004016102b6906122f7565b6001600160a01b038216611cc45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016102b6565b611ccd81611471565b15611d1a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016102b6565b6001600160a01b0382166000908152600360205260408120805460019290611d439084906123dc565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611dad9061244b565b90600052602060002090601f016020900481019282611dcf5760008555611e15565b82601f10611de857805160ff1916838001178555611e15565b82800160010185558215611e15579182015b82811115611e15578251825591602001919060010190611dfa565b50611e21929150611e25565b5090565b5b80821115611e215760008155600101611e26565b600067ffffffffffffffff80841115611e5557611e556124f7565b604051601f8501601f19908116603f01168101908282118183101715611e7d57611e7d6124f7565b81604052809350858152868686011115611e9657600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611ec257600080fd5b81356118868161250d565b60008060408385031215611ee057600080fd5b8235611eeb8161250d565b91506020830135611efb8161250d565b809150509250929050565b600080600060608486031215611f1b57600080fd5b8335611f268161250d565b92506020840135611f368161250d565b929592945050506040919091013590565b60008060008060808587031215611f5d57600080fd5b8435611f688161250d565b93506020850135611f788161250d565b925060408501359150606085013567ffffffffffffffff811115611f9b57600080fd5b8501601f81018713611fac57600080fd5b611fbb87823560208401611e3a565b91505092959194509250565b60008060408385031215611fda57600080fd5b8235611fe58161250d565b915060208301358015158114611efb57600080fd5b6000806040838503121561200d57600080fd5b82356120188161250d565b946020939093013593505050565b60006020828403121561203857600080fd5b813561188681612525565b60006020828403121561205557600080fd5b815161188681612525565b60006020828403121561207257600080fd5b813567ffffffffffffffff81111561208957600080fd5b8201601f8101841361209a57600080fd5b61126184823560208401611e3a565b6000602082840312156120bb57600080fd5b5035919050565b60008060008060008060008060006101208a8c0312156120e157600080fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b6000815180845261213981602086016020860161241f565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061216757607f831692505b602080841082141561218957634e487b7160e01b600052602260045260246000fd5b81801561219d57600181146121ae576121db565b60ff198616895284890196506121db565b60008881526020902060005b868110156121d35781548b8201529085019083016121ba565b505084890196505b50505050505092915050565b600083516121f981846020880161241f565b83519083019061220d81836020880161241f565b01949350505050565b600061222b612225838761214d565b8561214d565b602f60f81b8152835161224581600184016020880161241f565b64173539b7b760d91b6001929091019182015260060195945050505050565b6000612279612273838661214d565b8461214d565b602f60f81b81526418589bdd5d60da1b600182015264173539b7b760d91b6006820152600b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122da90830184612121565b9695505050505050565b6020815260006118866020830184612121565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f43616c6c6572206973206e6f7420736d61727420636f6e7472616374206f776e60408201526132b960f11b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156123ef576123ef6124b5565b500190565b600082612403576124036124cb565b500490565b60008282101561241a5761241a6124b5565b500390565b60005b8381101561243a578181015183820152602001612422565b8381111561107e5750506000910152565b600181811c9082168061245f57607f821691505b6020821081141561248057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561249a5761249a6124b5565b5060010190565b6000826124b0576124b06124cb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461252257600080fd5b50565b6001600160e01b03198116811461252257600080fdfea26469706673582212201fa755bba07c3fdddba9348b263ba0313a282280b198dbe43894cf302acb84aa64736f6c63430008070033
Deployed Bytecode Sourcemap
85:7547:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7376:13;;:18;7367:109;;;;-1:-1:-1;;;7367:109:14;;10771:2:15;7367:109:14;;;10753:21:15;10810:2;10790:18;;;10783:30;10849:34;10829:18;;;10822:62;10920:34;10900:18;;;10893:62;-1:-1:-1;;;10971:19:15;;;10964:44;11025:19;;7367:109:14;;;;;;;;;207:5:::1;7211:10;;:21;7203:103;;;::::0;-1:-1:-1;;;7203:103:14;;12776:2:15;7203:103:14::1;::::0;::::1;12758:21:15::0;12815:2;12795:18;;;12788:30;12854:34;12834:18;;;12827:62;12925:34;12905:18;;;12898:62;-1:-1:-1;;;12976:19:15;;;12969:36;13022:19;;7203:103:14::1;12574:473:15::0;7203:103:14::1;7132:19:::2;:17;:19::i;:::-;85:7547:::0;;;;;1495:288:3;;;;;;;;;;-1:-1:-1;1495:288:3;;;;;:::i;:::-;;:::i;:::-;;;9487:14:15;;9480:22;9462:41;;9450:2;9435:18;1495:288:3;;;;;;;;2401:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1185:983:14:-;;;;;;;;;;-1:-1:-1;1185:983:14;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8785:32:15;;;8767:51;;8755:2;8740:18;1185:983:14;8621:203:15;3813:217:3;;;;;;;;;;-1:-1:-1;3813:217:3;;;;;:::i;:::-;;:::i;175:37:14:-;;;;;;;;;;;;207:5;175:37;;;;;18540:25:15;;;18528:2;18513:18;175:37:14;18394:177:15;3364:388:3;;;;;;;;;;-1:-1:-1;3364:388:3;;;;;:::i;:::-;;:::i;5098:108:14:-;;;;;;;;;;-1:-1:-1;5098:108:14;;;;;:::i;:::-;;:::i;2696:85::-;;;;;;;;;;-1:-1:-1;207:5:14;2696:85;;564:25;;;;;;;;;;;;;;;;4677:300:3;;;;;;;;;;-1:-1:-1;4677:300:3;;;;;:::i;:::-;;:::i;4011:105:14:-;;;;;;;;;;-1:-1:-1;4011:105:14;;;;;:::i;:::-;;:::i;4529:82::-;;;;;;;;;;-1:-1:-1;4529:82:14;;;;;:::i;:::-;;:::i;6278:243::-;;;;;;;;;;-1:-1:-1;6278:243:14;;;;;:::i;:::-;;:::i;260:21::-;;;;;;;;;;-1:-1:-1;260:21:14;;;;-1:-1:-1;;;;;260:21:14;;;4617:475;;;;;;;;;;-1:-1:-1;4617:475:14;;;;;:::i;:::-;;:::i;5043:149:3:-;;;;;;;;;;-1:-1:-1;5043:149:3;;;;;:::i;:::-;;:::i;4122:103:14:-;;;;;;;;;;-1:-1:-1;4122:103:14;;;;;:::i;:::-;;:::i;137:32::-;;;;;;;;;;;;168:1;137:32;;2104:235:3;;;;;;;;;;-1:-1:-1;2104:235:3;;;;;:::i;:::-;;:::i;1842:205::-;;;;;;;;;;-1:-1:-1;1842:205:3;;;;;:::i;:::-;;:::i;4231:91:14:-;;;;;;;;;;-1:-1:-1;4231:91:14;;;;;:::i;:::-;;:::i;669:36::-;;;;;;;;;;;;;;;;287:66;;;;;;;;;;-1:-1:-1;287:66:14;;;;-1:-1:-1;;;;;287:66:14;;;4430:93;;;;;;;;;;-1:-1:-1;4430:93:14;;;;;:::i;:::-;;:::i;2563:102:3:-;;;;;;;;;;;;;:::i;218:36:14:-;;;;;;;;;;;;251:3;218:36;;482:76;;;;;;;;;;;;;:::i;4097:290:3:-;;;;;;;;;;-1:-1:-1;4097:290:3;;;;;:::i;:::-;;:::i;359:46:14:-;;;;;;;;;;;;;;;;4328:96;;;;;;;;;;-1:-1:-1;4396:21:14;4328:96;;5258:282:3;;;;;;;;;;-1:-1:-1;5258:282:3;;;;;:::i;:::-;;:::i;3916:89:14:-;;;;;;;;;;-1:-1:-1;3916:89:14;;;;;:::i;:::-;;:::i;411:65::-;;;;;;;;;;;;;:::i;387:663:7:-;;;;;;;;;;-1:-1:-1;387:663:7;;;;;:::i;:::-;;:::i;623:40:14:-;;;;;;;;;;;;;;;;2787:194;;;;;;;;;;;;;:::i;4453:162:3:-;;;;;;;;;;-1:-1:-1;4453:162:3;;;;;:::i;:::-;-1:-1:-1;;;;;4573:25:3;;;4550:4;4573:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4453:162;595:22:14;;;;;;;;;;;;;;;;6095:177;251:3;6147:10;;:22;6143:123;;;6185:10;6193:1;6185:7;:10::i;:::-;6095:177::o;6143:123::-;6226:29;6234:20;:18;:20::i;:::-;6226:7;:29::i;1495:288:3:-;1597:4;-1:-1:-1;;;;;;1620:40:3;;-1:-1:-1;;;1620:40:3;;:104;;-1:-1:-1;;;;;;;1676:48:3;;-1:-1:-1;;;1676:48:3;1620:104;:156;;;-1:-1:-1;;;;;;;;;;871:40:2;;;1740:36:3;1613:163;1495:288;-1:-1:-1;;1495:288:3:o;2401:98::-;2455:13;2487:5;2480:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2401:98;:::o;1185:983:14:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1185:983:14;;-1:-1:-1;1185:983:14;:::o;3813:217:3:-;3889:7;3916:16;3924:7;3916;:16::i;:::-;3908:73;;;;-1:-1:-1;;;3908:73:3;;16107:2:15;3908:73:3;;;16089:21:15;16146:2;16126:18;;;16119:30;16185:34;16165:18;;;16158:62;-1:-1:-1;;;16236:18:15;;;16229:42;16288:19;;3908:73:3;15905:408:15;3908:73:3;-1:-1:-1;3999:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;3999:24:3;;3813:217::o;3364:388::-;3444:13;3460:23;3475:7;3460:14;:23::i;:::-;3444:39;;3507:5;-1:-1:-1;;;;;3501:11:3;:2;-1:-1:-1;;;;;3501:11:3;;;3493:57;;;;-1:-1:-1;;;3493:57:3;;17346:2:15;3493:57:3;;;17328:21:15;17385:2;17365:18;;;17358:30;17424:34;17404:18;;;17397:62;-1:-1:-1;;;17475:18:15;;;17468:31;17516:19;;3493:57:3;17144:397:15;3493:57:3;665:10:1;-1:-1:-1;;;;;3569:21:3;;;;:62;;-1:-1:-1;3594:37:3;3611:5;665:10:1;4453:162:3;:::i;3594:37::-;3561:152;;;;-1:-1:-1;;;3561:152:3;;13667:2:15;3561:152:3;;;13649:21:15;13706:2;13686:18;;;13679:30;13745:34;13725:18;;;13718:62;13816:26;13796:18;;;13789:54;13860:19;;3561:152:3;13465:420:15;3561:152:3;3724:21;3733:2;3737:7;3724:8;:21::i;:::-;3434:318;3364:388;;:::o;5098:108:14:-;7547:6;;-1:-1:-1;;;;;7547:6:14;7533:10;:20;;:44;;-1:-1:-1;7571:6:14;;-1:-1:-1;;;;;7571:6:14;7557:10;:20;7533:44;7525:91;;;;-1:-1:-1;;;7525:91:14;;;;;;;:::i;:::-;5162:37:::1;::::0;-1:-1:-1;;;;;5162:14:14;::::1;::::0;5177:21:::1;5162:37:::0;::::1;;;::::0;::::1;::::0;;;5177:21;5162:14;:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;5098:108:::0;:::o;4677:300:3:-;4836:41;665:10:1;4869:7:3;4836:18;:41::i;:::-;4828:103;;;;-1:-1:-1;;;4828:103:3;;;;;;;:::i;:::-;4942:28;4952:4;4958:2;4962:7;4942:9;:28::i;4011:105:14:-;7547:6;;-1:-1:-1;;;;;7547:6:14;7533:10;:20;;:44;;-1:-1:-1;7571:6:14;;-1:-1:-1;;;;;7571:6:14;7557:10;:20;7533:44;7525:91;;;;-1:-1:-1;;;7525:91:14;;;;;;;:::i;:::-;4087:22;;::::1;::::0;:15:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;4529:82::-:0;7547:6;;-1:-1:-1;;;;;7547:6:14;7533:10;:20;;:44;;-1:-1:-1;7571:6:14;;-1:-1:-1;;;;;7571:6:14;7557:10;:20;7533:44;7525:91;;;;-1:-1:-1;;;7525:91:14;;;;;;;:::i;:::-;4587:10:::1;:17:::0;4529:82::o;6278:243::-;6366:7;6401:23;6418:5;6401:16;:23::i;:::-;6393:5;:31;6385:87;;;;-1:-1:-1;;;6385:87:14;;9940:2:15;6385:87:14;;;9922:21:15;9979:2;9959:18;;;9952:30;10018:34;9998:18;;;9991:62;-1:-1:-1;;;10069:18:15;;;10062:41;10120:19;;6385:87:14;9738:407:15;6385:87:14;-1:-1:-1;;;;;;6489:18:14;;;;;;;;:11;:18;;;;;;;;:25;;;;;;;;;6278:243::o;4617:475::-;7547:6;;-1:-1:-1;;;;;7547:6:14;7533:10;:20;;:44;;-1:-1:-1;7571:6:14;;-1:-1:-1;;;;;7571:6:14;7557:10;:20;7533:44;7525:91;;;;-1:-1:-1;;;7525:91:14;;;;;;;:::i;:::-;4819:10:::1;:20:::0;;;;4849:12:::1;:21:::0;;;;4880:11:::1;:21:::0;;;;4911:11:::1;:20:::0;;;;4941:10:::1;:19:::0;4970:12:::1;:23:::0;5003:12:::1;:22:::0;5035:11:::1;:21:::0;5066:10:::1;:19:::0;4617:475::o;5043:149:3:-;5146:39;5163:4;5169:2;5173:7;5146:39;;;;;;;;;;;;:16;:39::i;4122:103:14:-;7547:6;;-1:-1:-1;;;;;7547:6:14;7533:10;:20;;:44;;-1:-1:-1;7571:6:14;;-1:-1:-1;;;;;7571:6:14;7557:10;:20;7533:44;7525:91;;;;-1:-1:-1;;;7525:91:14;;;;;;;:::i;:::-;4197:21;;::::1;::::0;:11:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;2104:235:3:-:0;2176:7;2211:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2211:16:3;2245:19;2237:73;;;;-1:-1:-1;;;2237:73:3;;14503:2:15;2237:73:3;;;14485:21:15;14542:2;14522:18;;;14515:30;14581:34;14561:18;;;14554:62;-1:-1:-1;;;14632:18:15;;;14625:39;14681:19;;2237:73:3;14301:405:15;1842:205:3;1914:7;-1:-1:-1;;;;;1941:19:3;;1933:74;;;;-1:-1:-1;;;1933:74:3;;14092:2:15;1933:74:3;;;14074:21:15;14131:2;14111:18;;;14104:30;14170:34;14150:18;;;14143:62;-1:-1:-1;;;14221:18:15;;;14214:40;14271:19;;1933:74:3;13890:406:15;1933:74:3;-1:-1:-1;;;;;;2024:16:3;;;;;:9;:16;;;;;;;1842:205::o;4231:91:14:-;7547:6;;-1:-1:-1;;;;;7547:6:14;7533:10;:20;;:44;;-1:-1:-1;7571:6:14;;-1:-1:-1;;;;;7571:6:14;7557:10;:20;7533:44;7525:91;;;;-1:-1:-1;;;7525:91:14;;;;;;;:::i;:::-;4293:13:::1;:22:::0;4231:91::o;4430:93::-;7547:6;;-1:-1:-1;;;;;7547:6:14;7533:10;:20;;:44;;-1:-1:-1;7571:6:14;;-1:-1:-1;;;;;7571:6:14;7557:10;:20;7533:44;7525:91;;;;-1:-1:-1;;;7525:91:14;;;;;;;:::i;:::-;4497:12:::1;:19:::0;4430:93::o;2563:102:3:-;2619:13;2651:7;2644:14;;;;;:::i;482:76:14:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4097:290:3:-;-1:-1:-1;;;;;4199:24:3;;665:10:1;4199:24:3;;4191:62;;;;-1:-1:-1;;;4191:62:3;;12422:2:15;4191:62:3;;;12404:21:15;12461:2;12441:18;;;12434:30;12500:27;12480:18;;;12473:55;12545:18;;4191:62:3;12220:349:15;4191:62:3;665:10:1;4264:32:3;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4264:42:3;;;;;;;;;;;;:53;;-1:-1:-1;;4264:53:3;;;;;;;;;;4332:48;;9462:41:15;;;4264:42:3;;665:10:1;4332:48:3;;9435:18:15;4332:48:3;;;;;;;4097:290;;:::o;5258:282::-;5389:41;665:10:1;5422:7:3;5389:18;:41::i;:::-;5381:103;;;;-1:-1:-1;;;5381:103:3;;;;;;;:::i;:::-;5494:39;5508:4;5514:2;5518:7;5527:5;5494:13;:39::i;:::-;5258:282;;;;:::o;3916:89:14:-;7547:6;;-1:-1:-1;;;;;7547:6:14;7533:10;:20;;:44;;-1:-1:-1;7571:6:14;;-1:-1:-1;;;;;7571:6:14;7557:10;:20;7533:44;7525:91;;;;-1:-1:-1;;;7525:91:14;;;;;;;:::i;:::-;3981:6:::1;:17:::0;;-1:-1:-1;;;;;;3981:17:14::1;-1:-1:-1::0;;;;;3981:17:14;;;::::1;::::0;;;::::1;::::0;;3916:89::o;411:65::-;;;;;;;:::i;387:663:7:-;460:13;493:16;501:7;493;:16::i;:::-;485:78;;;;-1:-1:-1;;;485:78:7;;15689:2:15;485:78:7;;;15671:21:15;15728:2;15708:18;;;15701:30;15767:34;15747:18;;;15740:62;-1:-1:-1;;;15818:18:15;;;15811:47;15875:19;;485:78:7;15487:413:15;485:78:7;574:23;600:19;;;:10;:19;;;;;574:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;629:18;650:10;3291:9:3;;;;;;;;;-1:-1:-1;3291:9:3;;;3215:92;650:10:7;629:31;;739:4;733:18;755:1;733:23;729:70;;;-1:-1:-1;779:9:7;387:663;-1:-1:-1;;387:663:7:o;729:70::-;901:23;;:27;897:106;;975:4;981:9;958:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;944:48;;;;387:663;;;:::o;897:106::-;1020:23;1035:7;1020:14;:23::i;:::-;1013:30;387:663;-1:-1:-1;;;;387:663:7:o;2787:194:14:-;2831:13;2856:17;2900:15;2917:11;2883:70;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2883:70:14;;;;;;;;;;2787:194;-1:-1:-1;;2787:194:14:o;718:413:0:-;1078:20;1116:8;;;718:413::o;2987:485:14:-;3040:6;3036:430;3056:6;3052:1;:10;3036:430;;;3083:10;:12;;;:10;:12;;;:::i;:::-;;;;-1:-1:-1;;3128:10:14;;3109:16;3201:15;3218:11;3237:21;3128:10;3237:8;:21::i;:::-;3184:84;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3152:117;;3283:34;3293:10;3305:11;3283:9;:34::i;:::-;3331:35;3344:11;3357:8;3331:12;:35::i;:::-;3428:15;3416:10;-1:-1:-1;;;;;3385:70:14;3403:11;3385:70;3445:9;3385:70;;;;18540:25:15;;18528:2;18513:18;;18394:177;3385:70:14;;;;;;;;3069:397;;3064:3;;;;;:::i;:::-;;;;3036:430;;5213:876;5261:4;5294:10;;5281:9;:23;5277:806;;;-1:-1:-1;5327:1:14;;5213:876::o;5277:806::-;5363:10;;5350:9;:23;5346:737;;;-1:-1:-1;5396:1:14;;5213:876::o;5346:737::-;5432:12;;5419:9;:25;5415:668;;;-1:-1:-1;5467:1:14;;5213:876::o;5415:668::-;5503:11;;5490:9;:24;5486:597;;;-1:-1:-1;5537:1:14;;5213:876::o;5486:597::-;5573:11;;5560:9;:24;5556:527;;;-1:-1:-1;5607:1:14;;5213:876::o;5556:527::-;5643:10;;5630:9;:23;5626:457;;;-1:-1:-1;5676:1:14;;5213:876::o;5626:457::-;5712:12;;5699:9;:25;5695:388;;;-1:-1:-1;5747:1:14;;5213:876::o;5695:388::-;5783:12;;5770:9;:25;5766:317;;;-1:-1:-1;5818:1:14;;5213:876::o;5766:317::-;5854:11;;5841:9;:24;5837:246;;;-1:-1:-1;5888:1:14;;5213:876::o;5837:246::-;5924:10;;5911:9;:23;5907:176;;;-1:-1:-1;5957:2:14;;5213:876::o;5907:176::-;5991:81;;-1:-1:-1;;;5991:81:14;;18166:2:15;5991:81:14;;;18148:21:15;18205:2;18185:18;;;18178:30;18244:34;18224:18;;;18217:62;18315:31;18295:18;;;18288:59;18364:19;;5991:81:14;17964:425:15;6974:125:3;7039:4;7062:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7062:16:3;:30;;;6974:125::o;10731:171::-;10805:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;10805:29:3;-1:-1:-1;;;;;10805:29:3;;;;;;;;:24;;10858:23;10805:24;10858:14;:23::i;:::-;-1:-1:-1;;;;;10849:46:3;;;;;;;;;;;10731:171;;:::o;7257:344::-;7350:4;7374:16;7382:7;7374;:16::i;:::-;7366:73;;;;-1:-1:-1;;;7366:73:3;;13254:2:15;7366:73:3;;;13236:21:15;13293:2;13273:18;;;13266:30;13332:34;13312:18;;;13305:62;-1:-1:-1;;;13383:18:15;;;13376:42;13435:19;;7366:73:3;13052:408:15;7366:73:3;7449:13;7465:23;7480:7;7465:14;:23::i;:::-;7449:39;;7517:5;-1:-1:-1;;;;;7506:16:3;:7;-1:-1:-1;;;;;7506:16:3;;:51;;;;7550:7;-1:-1:-1;;;;;7526:31:3;:20;7538:7;7526:11;:20::i;:::-;-1:-1:-1;;;;;7526:31:3;;7506:51;:87;;;-1:-1:-1;;;;;;4573:25:3;;;4550:4;4573:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7561:32;4453:162;10090:530;10214:4;-1:-1:-1;;;;;10187:31:3;:23;10202:7;10187:14;:23::i;:::-;-1:-1:-1;;;;;10187:31:3;;10179:85;;;;-1:-1:-1;;;10179:85:3;;16520:2:15;10179:85:3;;;16502:21:15;16559:2;16539:18;;;16532:30;16598:34;16578:18;;;16571:62;-1:-1:-1;;;16649:18:15;;;16642:39;16698:19;;10179:85:3;16318:405:15;10179:85:3;-1:-1:-1;;;;;10282:16:3;;10274:65;;;;-1:-1:-1;;;10274:65:3;;12017:2:15;10274:65:3;;;11999:21:15;12056:2;12036:18;;;12029:30;12095:34;12075:18;;;12068:62;-1:-1:-1;;;12146:18:15;;;12139:34;12190:19;;10274:65:3;11815:400:15;10274:65:3;10451:29;10468:1;10472:7;10451:8;:29::i;:::-;-1:-1:-1;;;;;10491:15:3;;;;;;:9;:15;;;;;:20;;10510:1;;10491:15;:20;;10510:1;;10491:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10521:13:3;;;;;;:9;:13;;;;;:18;;10538:1;;10521:13;:18;;10538:1;;10521:18;:::i;:::-;;;;-1:-1:-1;;10549:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10549:21:3;-1:-1:-1;;;;;10549:21:3;;;;;;;;;10586:27;;10549:16;;10586:27;;;;;;;10090:530;;;:::o;6402:269::-;6515:28;6525:4;6531:2;6535:7;6515:9;:28::i;:::-;6561:48;6584:4;6590:2;6594:7;6603:5;6561:22;:48::i;:::-;6553:111;;;;-1:-1:-1;;;6553:111:3;;;;;;;:::i;2731:353::-;2804:13;2837:16;2845:7;2837;:16::i;:::-;2829:76;;;;-1:-1:-1;;;2829:76:3;;16930:2:15;2829:76:3;;;16912:21:15;16969:2;16949:18;;;16942:30;17008:34;16988:18;;;16981:62;-1:-1:-1;;;17059:18:15;;;17052:45;17114:19;;2829:76:3;16728:411:15;2829:76:3;2916:21;2940:10;3291:9;;;;;;;;;-1:-1:-1;3291:9:3;;;3215:92;2940:10;2916:34;;2991:1;2973:7;2967:21;:25;:110;;;;;;;;;;;;;;;;;3031:7;3040:18;:7;:16;:18::i;:::-;3014:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2967:110;2960:117;2731:353;-1:-1:-1;;;2731:353:3:o;6527:516:14:-;6583:13;6613:10;6609:51;;-1:-1:-1;;6639:10:14;;;;;;;;;;;;-1:-1:-1;;;6639:10:14;;;;;6527:516::o;6609:51::-;6684:5;6669:12;6723:75;6730:9;;6723:75;;6755:8;;;;:::i;:::-;;-1:-1:-1;6777:10:14;;-1:-1:-1;6785:2:14;6777:10;;:::i;:::-;;;6723:75;;;6807:19;6839:6;6829:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6829:17:14;;6807:39;;6856:150;6863:10;;6856:150;;6889:11;6899:1;6889:11;;:::i;:::-;;-1:-1:-1;6957:10:14;6965:2;6957:5;:10;:::i;:::-;6944:24;;:2;:24;:::i;:::-;6931:39;;6914:6;6921;6914:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;6914:56:14;;;;;;;;-1:-1:-1;6984:11:14;6993:2;6984:11;;:::i;:::-;;;6856:150;;7931:108:3;8006:26;8016:2;8020:7;8006:26;;;;;;;;;;;;:9;:26::i;1197:214:7:-;1296:16;1304:7;1296;:16::i;:::-;1288:75;;;;-1:-1:-1;;;1288:75:7;;14913:2:15;1288:75:7;;;14895:21:15;14952:2;14932:18;;;14925:30;14991:34;14971:18;;;14964:62;-1:-1:-1;;;15042:18:15;;;15035:44;15096:19;;1288:75:7;14711:410:15;1288:75:7;1373:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;11455:824:3:-;11575:4;-1:-1:-1;;;;;11599:13:3;;1078:20:0;1116:8;11595:678:3;;11634:72;;-1:-1:-1;;;11634:72:3;;-1:-1:-1;;;;;11634:36:3;;;;;:72;;665:10:1;;11685:4:3;;11691:7;;11700:5;;11634:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11634:72:3;;;;;;;;-1:-1:-1;;11634:72:3;;;;;;;;;;;;:::i;:::-;;;11630:591;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11877:13:3;;11873:334;;11919:60;;-1:-1:-1;;;11919:60:3;;;;;;;:::i;11873:334::-;12159:6;12153:13;12144:6;12140:2;12136:15;12129:38;11630:591;-1:-1:-1;;;;;;11756:55:3;-1:-1:-1;;;11756:55:3;;-1:-1:-1;11749:62:3;;11595:678;-1:-1:-1;12258:4:3;11455:824;;;;;;:::o;271:703:13:-;327:13;544:10;540:51;;-1:-1:-1;;570:10:13;;;;;;;;;;;;-1:-1:-1;;;570:10:13;;;;;271:703::o;540:51::-;615:5;600:12;654:75;661:9;;654:75;;686:8;;;;:::i;:::-;;-1:-1:-1;708:10:13;;-1:-1:-1;716:2:13;708:10;;:::i;:::-;;;654:75;;;738:19;770:6;760:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;760:17:13;;738:39;;787:150;794:10;;787:150;;820:11;830:1;820:11;;:::i;:::-;;-1:-1:-1;888:10:13;896:2;888:5;:10;:::i;:::-;875:24;;:2;:24;:::i;:::-;862:39;;845:6;852;845:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;845:56:13;;;;;;;;-1:-1:-1;915:11:13;924:2;915:11;;:::i;:::-;;;787:150;;8260:247:3;8355:18;8361:2;8365:7;8355:5;:18::i;:::-;8391:54;8422:1;8426:2;8430:7;8439:5;8391:22;:54::i;:::-;8383:117;;;;-1:-1:-1;;;8383:117:3;;;;;;;:::i;8829:372::-;-1:-1:-1;;;;;8908:16:3;;8900:61;;;;-1:-1:-1;;;8900:61:3;;15328:2:15;8900:61:3;;;15310:21:15;;;15347:18;;;15340:30;15406:34;15386:18;;;15379:62;15458:18;;8900:61:3;15126:356:15;8900:61:3;8980:16;8988:7;8980;:16::i;:::-;8979:17;8971:58;;;;-1:-1:-1;;;8971:58:3;;11257:2:15;8971:58:3;;;11239:21:15;11296:2;11276:18;;;11269:30;11335;11315:18;;;11308:58;11383:18;;8971:58:3;11055:352:15;8971:58:3;-1:-1:-1;;;;;9096:13:3;;;;;;:9;:13;;;;;:18;;9113:1;;9096:13;:18;;9113:1;;9096:18;:::i;:::-;;;;-1:-1:-1;;9124:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9124:21:3;-1:-1:-1;;;;;9124:21:3;;;;;;;;9161:33;;9124:16;;;9161:33;;9124:16;;9161:33;8829:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:15;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:15;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:247::-;709:6;762:2;750:9;741:7;737:23;733:32;730:52;;;778:1;775;768:12;730:52;817:9;804:23;836:31;861:5;836:31;:::i;1162:388::-;1230:6;1238;1291:2;1279:9;1270:7;1266:23;1262:32;1259:52;;;1307:1;1304;1297:12;1259:52;1346:9;1333:23;1365:31;1390:5;1365:31;:::i;:::-;1415:5;-1:-1:-1;1472:2:15;1457:18;;1444:32;1485:33;1444:32;1485:33;:::i;:::-;1537:7;1527:17;;;1162:388;;;;;:::o;1555:456::-;1632:6;1640;1648;1701:2;1689:9;1680:7;1676:23;1672:32;1669:52;;;1717:1;1714;1707:12;1669:52;1756:9;1743:23;1775:31;1800:5;1775:31;:::i;:::-;1825:5;-1:-1:-1;1882:2:15;1867:18;;1854:32;1895:33;1854:32;1895:33;:::i;:::-;1555:456;;1947:7;;-1:-1:-1;;;2001:2:15;1986:18;;;;1973:32;;1555:456::o;2016:794::-;2111:6;2119;2127;2135;2188:3;2176:9;2167:7;2163:23;2159:33;2156:53;;;2205:1;2202;2195:12;2156:53;2244:9;2231:23;2263:31;2288:5;2263:31;:::i;:::-;2313:5;-1:-1:-1;2370:2:15;2355:18;;2342:32;2383:33;2342:32;2383:33;:::i;:::-;2435:7;-1:-1:-1;2489:2:15;2474:18;;2461:32;;-1:-1:-1;2544:2:15;2529:18;;2516:32;2571:18;2560:30;;2557:50;;;2603:1;2600;2593:12;2557:50;2626:22;;2679:4;2671:13;;2667:27;-1:-1:-1;2657:55:15;;2708:1;2705;2698:12;2657:55;2731:73;2796:7;2791:2;2778:16;2773:2;2769;2765:11;2731:73;:::i;:::-;2721:83;;;2016:794;;;;;;;:::o;2815:416::-;2880:6;2888;2941:2;2929:9;2920:7;2916:23;2912:32;2909:52;;;2957:1;2954;2947:12;2909:52;2996:9;2983:23;3015:31;3040:5;3015:31;:::i;:::-;3065:5;-1:-1:-1;3122:2:15;3107:18;;3094:32;3164:15;;3157:23;3145:36;;3135:64;;3195:1;3192;3185:12;3236:315;3304:6;3312;3365:2;3353:9;3344:7;3340:23;3336:32;3333:52;;;3381:1;3378;3371:12;3333:52;3420:9;3407:23;3439:31;3464:5;3439:31;:::i;:::-;3489:5;3541:2;3526:18;;;;3513:32;;-1:-1:-1;;;3236:315:15:o;3556:245::-;3614:6;3667:2;3655:9;3646:7;3642:23;3638:32;3635:52;;;3683:1;3680;3673:12;3635:52;3722:9;3709:23;3741:30;3765:5;3741:30;:::i;3806:249::-;3875:6;3928:2;3916:9;3907:7;3903:23;3899:32;3896:52;;;3944:1;3941;3934:12;3896:52;3976:9;3970:16;3995:30;4019:5;3995:30;:::i;4060:450::-;4129:6;4182:2;4170:9;4161:7;4157:23;4153:32;4150:52;;;4198:1;4195;4188:12;4150:52;4238:9;4225:23;4271:18;4263:6;4260:30;4257:50;;;4303:1;4300;4293:12;4257:50;4326:22;;4379:4;4371:13;;4367:27;-1:-1:-1;4357:55:15;;4408:1;4405;4398:12;4357:55;4431:73;4496:7;4491:2;4478:16;4473:2;4469;4465:11;4431:73;:::i;4515:180::-;4574:6;4627:2;4615:9;4606:7;4602:23;4598:32;4595:52;;;4643:1;4640;4633:12;4595:52;-1:-1:-1;4666:23:15;;4515:180;-1:-1:-1;4515:180:15:o;4700:730::-;4831:6;4839;4847;4855;4863;4871;4879;4887;4895;4948:3;4936:9;4927:7;4923:23;4919:33;4916:53;;;4965:1;4962;4955:12;4916:53;-1:-1:-1;;4988:23:15;;;5058:2;5043:18;;5030:32;;-1:-1:-1;5109:2:15;5094:18;;5081:32;;5160:2;5145:18;;5132:32;;-1:-1:-1;5211:3:15;5196:19;;5183:33;;-1:-1:-1;5263:3:15;5248:19;;5235:33;;-1:-1:-1;5315:3:15;5300:19;;5287:33;;-1:-1:-1;5367:3:15;5352:19;;5339:33;;-1:-1:-1;5419:3:15;5404:19;5391:33;;-1:-1:-1;4700:730:15;-1:-1:-1;4700:730:15:o;5435:257::-;5476:3;5514:5;5508:12;5541:6;5536:3;5529:19;5557:63;5613:6;5606:4;5601:3;5597:14;5590:4;5583:5;5579:16;5557:63;:::i;:::-;5674:2;5653:15;-1:-1:-1;;5649:29:15;5640:39;;;;5681:4;5636:50;;5435:257;-1:-1:-1;;5435:257:15:o;5697:973::-;5782:12;;5747:3;;5837:1;5857:18;;;;5910;;;;5937:61;;5991:4;5983:6;5979:17;5969:27;;5937:61;6017:2;6065;6057:6;6054:14;6034:18;6031:38;6028:161;;;6111:10;6106:3;6102:20;6099:1;6092:31;6146:4;6143:1;6136:15;6174:4;6171:1;6164:15;6028:161;6205:18;6232:104;;;;6350:1;6345:319;;;;6198:466;;6232:104;-1:-1:-1;;6265:24:15;;6253:37;;6310:16;;;;-1:-1:-1;6232:104:15;;6345:319;18649:1;18642:14;;;18686:4;18673:18;;6439:1;6453:165;6467:6;6464:1;6461:13;6453:165;;;6545:14;;6532:11;;;6525:35;6588:16;;;;6482:10;;6453:165;;;6457:3;;6647:6;6642:3;6638:16;6631:23;;6198:466;;;;;;;5697:973;;;;:::o;6675:470::-;6854:3;6892:6;6886:13;6908:53;6954:6;6949:3;6942:4;6934:6;6930:17;6908:53;:::i;:::-;7024:13;;6983:16;;;;7046:57;7024:13;6983:16;7080:4;7068:17;;7046:57;:::i;:::-;7119:20;;6675:470;-1:-1:-1;;;;6675:470:15:o;7150:755::-;7573:3;7601:73;7635:38;7669:3;7661:6;7635:38;:::i;:::-;7627:6;7601:73;:::i;:::-;-1:-1:-1;;;7690:2:15;7683:15;7727:6;7721:13;7743:60;7796:6;7792:1;7788:2;7784:10;7777:4;7769:6;7765:17;7743:60;:::i;:::-;-1:-1:-1;;;7861:1:15;7822:15;;;;7853:10;;;7846:27;7897:1;7889:10;;7150:755;-1:-1:-1;;;;;7150:755:15:o;7910:706::-;8386:3;8414:73;8448:38;8482:3;8474:6;8448:38;:::i;:::-;8440:6;8414:73;:::i;:::-;-1:-1:-1;;;8496:15:15;;-1:-1:-1;;;8535:1:15;8527:10;;8520:27;-1:-1:-1;;;8571:1:15;8563:10;;8556:27;8607:2;8599:11;;7910:706;-1:-1:-1;;;;7910:706:15:o;8829:488::-;-1:-1:-1;;;;;9098:15:15;;;9080:34;;9150:15;;9145:2;9130:18;;9123:43;9197:2;9182:18;;9175:34;;;9245:3;9240:2;9225:18;;9218:31;;;9023:4;;9266:45;;9291:19;;9283:6;9266:45;:::i;:::-;9258:53;8829:488;-1:-1:-1;;;;;;8829:488:15:o;9514:219::-;9663:2;9652:9;9645:21;9626:4;9683:44;9723:2;9712:9;9708:18;9700:6;9683:44;:::i;10150:414::-;10352:2;10334:21;;;10391:2;10371:18;;;10364:30;10430:34;10425:2;10410:18;;10403:62;-1:-1:-1;;;10496:2:15;10481:18;;10474:48;10554:3;10539:19;;10150:414::o;11412:398::-;11614:2;11596:21;;;11653:2;11633:18;;;11626:30;11692:34;11687:2;11672:18;;11665:62;-1:-1:-1;;;11758:2:15;11743:18;;11736:32;11800:3;11785:19;;11412:398::o;17546:413::-;17748:2;17730:21;;;17787:2;17767:18;;;17760:30;17826:34;17821:2;17806:18;;17799:62;-1:-1:-1;;;17892:2:15;17877:18;;17870:47;17949:3;17934:19;;17546:413::o;18702:128::-;18742:3;18773:1;18769:6;18766:1;18763:13;18760:39;;;18779:18;;:::i;:::-;-1:-1:-1;18815:9:15;;18702:128::o;18835:120::-;18875:1;18901;18891:35;;18906:18;;:::i;:::-;-1:-1:-1;18940:9:15;;18835:120::o;18960:125::-;19000:4;19028:1;19025;19022:8;19019:34;;;19033:18;;:::i;:::-;-1:-1:-1;19070:9:15;;18960:125::o;19090:258::-;19162:1;19172:113;19186:6;19183:1;19180:13;19172:113;;;19262:11;;;19256:18;19243:11;;;19236:39;19208:2;19201:10;19172:113;;;19303:6;19300:1;19297:13;19294:48;;;-1:-1:-1;;19338:1:15;19320:16;;19313:27;19090:258::o;19353:380::-;19432:1;19428:12;;;;19475;;;19496:61;;19550:4;19542:6;19538:17;19528:27;;19496:61;19603:2;19595:6;19592:14;19572:18;19569:38;19566:161;;;19649:10;19644:3;19640:20;19637:1;19630:31;19684:4;19681:1;19674:15;19712:4;19709:1;19702:15;19566:161;;19353:380;;;:::o;19738:135::-;19777:3;-1:-1:-1;;19798:17:15;;19795:43;;;19818:18;;:::i;:::-;-1:-1:-1;19865:1:15;19854:13;;19738:135::o;19878:112::-;19910:1;19936;19926:35;;19941:18;;:::i;:::-;-1:-1:-1;19975:9:15;;19878:112::o;19995:127::-;20056:10;20051:3;20047:20;20044:1;20037:31;20087:4;20084:1;20077:15;20111:4;20108:1;20101:15;20127:127;20188:10;20183:3;20179:20;20176:1;20169:31;20219:4;20216:1;20209:15;20243:4;20240:1;20233:15;20259:127;20320:10;20315:3;20311:20;20308:1;20301:31;20351:4;20348:1;20341:15;20375:4;20372:1;20365:15;20391:127;20452:10;20447:3;20443:20;20440:1;20433:31;20483:4;20480:1;20473:15;20507:4;20504:1;20497:15;20523:131;-1:-1:-1;;;;;20598:31:15;;20588:42;;20578:70;;20644:1;20641;20634:12;20578:70;20523:131;:::o;20659:::-;-1:-1:-1;;;;;;20733:32:15;;20723:43;;20713:71;;20780:1;20777;20770:12
Swarm Source
ipfs://1fa755bba07c3fdddba9348b263ba0313a282280b198dbe43894cf302acb84aa
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 24 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
MATIC | Polygon (MATIC) | 100.00% | $1 | 95 | $95.21 |
[ Download: CSV Export ]
[ 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.