ERC-721
Overview
Max Total Supply
42 3DMOONBIRDZ
Holders
13
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 3DMOONBIRDZLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
MoonBirdz3D
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-04 */ // File: @openzeppelin/contracts/utils/Address.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: contracts/ERC721A.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 1 (e.g. 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 1; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex - 1; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/Moonbirdz.sol pragma solidity ^0.8.13; contract MoonBirdz3D is Ownable, ERC721A, ReentrancyGuard { string public baseURI; string public baseExtension = ".json"; uint256 public constant MAX_SUPPLY = 1500; uint256 public constant MAX_PER_WALLET = 20; uint256 public constant WHITELIST_MINT_LIMIT = 1500; uint256 public constant WHITELIST_MAX_PER_WALLET = 20; mapping(address => bool) private _whitelisted; mapping(address => uint256) public whitelistSalesMinterToTokenQty; uint256 public whitelistSalesMintedQty = 0; bool public paused = false; bool public whitelistPaused = false; uint256 public whitelistPrice = 0 ether; uint256 public publicPrice = 0.008 ether; mapping(address=>bool) public admins; constructor( string memory _initBaseURI ) ERC721A("3DMoonBirdz", "3DMOONBIRDZ", MAX_PER_WALLET, MAX_SUPPLY) { admins[msg.sender] = true; setBaseURI(_initBaseURI); } modifier callerIsUser() { require(tx.origin == msg.sender, "the caller is another contract"); _; } modifier callerIsAdmin() { require(admins[msg.sender], "not enough permissions to perform this action"); _; } function getPrice(uint256 _quantity) public view returns (uint256) { return (publicPrice * _quantity); } function publicSalesMint(uint256 _quantity) external payable callerIsUser nonReentrant { require(!paused, "sale is not active"); require(totalSupply() + _quantity <= MAX_SUPPLY, "reached the max supply"); require( numberMinted(msg.sender) + _quantity <= MAX_PER_WALLET, "can not mint this many" ); uint256 price = getPrice(_quantity); if (totalSupply() + _quantity == MAX_SUPPLY) { paused = true; } _safeMint(msg.sender, _quantity); refundIfOver(price); } function whitelistSalesMint(uint256 _quantity) external payable callerIsUser nonReentrant { require(!whitelistPaused, "sale is not active"); require(_whitelisted[msg.sender], "address not whitelisted"); require(whitelistSalesMintedQty + _quantity <= WHITELIST_MINT_LIMIT, "exceed whitelist mint limit"); require(whitelistSalesMinterToTokenQty[msg.sender] + _quantity <= WHITELIST_MAX_PER_WALLET, "exceed max per wallet"); require(totalSupply() + _quantity <= MAX_SUPPLY, "reached the max supply"); require( numberMinted(msg.sender) + _quantity <= MAX_PER_WALLET, "can not mint this many" ); whitelistSalesMinterToTokenQty[msg.sender] += _quantity; whitelistSalesMintedQty += _quantity; _safeMint(msg.sender, _quantity); refundIfOver(whitelistPrice * _quantity); } function refundIfOver(uint256 _price) private { require(msg.value >= _price, "need to send more ETH"); if (msg.value > _price) { payable(msg.sender).transfer(msg.value - _price); } } function airdropMint(address[] calldata _addresses, uint[] calldata _mintQtys) external callerIsAdmin nonReentrant { require(_addresses.length == _mintQtys.length, "size not same"); for (uint256 i = 0; i < _addresses.length; i++) { require(totalSupply() + _mintQtys[i] <= MAX_SUPPLY, "reached the max supply"); _safeMint(_addresses[i], _mintQtys[i]); } } function isWhitelisted(address _addr) external view returns (bool) { return _whitelisted[_addr]; } function addToWhitelist(address[] calldata _addresses) external callerIsAdmin { for (uint256 i = 0; i < _addresses.length; i++) { require(_addresses[i] != address(0), "cannot add the null address"); _whitelisted[_addresses[i]] = true; } } function removeFromWhitelist(address[] calldata _addresses) external callerIsAdmin { for (uint256 i = 0; i < _addresses.length; i++) { require(_addresses[i] != address(0), "cannot add the null address"); _whitelisted[_addresses[i]] = false; } } function addAdmin(address _addr) external onlyOwner{ admins[_addr] = true; } function removeAdmin(address _addr) external onlyOwner{ admins[_addr] = false; } function setPublicPrice(uint256 _price) external callerIsAdmin { publicPrice = _price; } function setWhitelistPrice(uint256 _price) external callerIsAdmin { whitelistPrice = _price; } function setPaused(bool _status) external callerIsAdmin { paused = _status; } function setWhitelistPaused(bool _status) external callerIsAdmin { whitelistPaused = _status; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), "Metadata URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, Strings.toString(_tokenId), baseExtension)) : ""; } function setBaseURI(string memory _newBaseURI) public callerIsAdmin { baseURI = _newBaseURI; } function setBaseExtension(string calldata _newNaseExtension) external callerIsAdmin { baseExtension = _newNaseExtension; } function withdraw() external onlyOwner nonReentrant { require(address(this).balance > 0, "no amount to withdraw"); (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "transfer failed."); } function numberMinted(address _owner) public view returns (uint256) { return _numberMinted(_owner); } function getOwnershipData(uint256 _tokenId) external view returns (TokenOwnership memory) { return ownershipOf(_tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admins","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_mintQtys","type":"uint256[]"}],"name":"airdropMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getPrice","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":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"publicSalesMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newNaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setWhitelistPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"whitelistSalesMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistSalesMintedQty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistSalesMinterToTokenQty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
600180556000600855610100604052600560c081905264173539b7b760d91b60e09081526200003291600b919062000307565b506000600e819055600f805461ffff19169055601055661c6bf5263400006011553480156200006057600080fd5b50604051620037f8380380620037f88339810160408190526200008391620003c3565b6040518060400160405280600b81526020016a19a226b7b7b72134b9323d60a91b8152506040518060400160405280600b81526020016a19a226a7a7a72124a9222d60a91b81525060146105dc620000ea620000e46200022360201b60201c565b62000227565b60008111620001575760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b60008211620001b95760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b60648201526084016200014e565b8351620001ce90600290602087019062000307565b508251620001e490600390602086019062000307565b5060a091909152608052505060016009819055336000908152601260205260409020805460ff191690911790556200021c8162000277565b50620004db565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b3360009081526012602052604090205460ff16620002ee5760405162461bcd60e51b815260206004820152602d60248201527f6e6f7420656e6f756768207065726d697373696f6e7320746f20706572666f7260448201526c36903a3434b99030b1ba34b7b760991b60648201526084016200014e565b80516200030390600a90602084019062000307565b5050565b82805462000315906200049f565b90600052602060002090601f01602090048101928262000339576000855562000384565b82601f106200035457805160ff191683800117855562000384565b8280016001018555821562000384579182015b828111156200038457825182559160200191906001019062000367565b506200039292915062000396565b5090565b5b8082111562000392576000815560010162000397565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215620003d757600080fd5b82516001600160401b0380821115620003ef57600080fd5b818501915085601f8301126200040457600080fd5b815181811115620004195762000419620003ad565b604051601f8201601f19908116603f01168101908382118183101715620004445762000444620003ad565b8160405282815288868487010111156200045d57600080fd5b600093505b8284101562000481578484018601518185018701529285019262000462565b82841115620004935760008684830101525b98975050505050505050565b600181811c90821680620004b457607f821691505b602082108103620004d557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516132ec6200050c6000396000818161224d0152818161227701526127300152600050506132ec6000f3fe6080604052600436106102e45760003560e01c80636c0360eb11610190578063b7203b8f116100dc578063d7224ba011610095578063e75722301161006f578063e757223014610893578063e985e9c5146108b3578063f2fde38b146108fc578063fc1a1c361461091c57600080fd5b8063d7224ba01461083d578063da3ef23f14610853578063dc33e6811461087357600080fd5b8063b7203b8f14610792578063b88d4fde146107b2578063c6275255146107d2578063c6682862146107f2578063c87b56dd14610807578063cdc63bb61461082757600080fd5b80637f6497831161014957806395d89b411161012357806395d89b4114610734578063a14c6cf314610749578063a22cb4651461075c578063a945bf801461077c57600080fd5b80637f649783146106a95780638da5cb5b146106c95780639231ab2a146106e757600080fd5b80636c0360eb1461061f578063704802751461063457806370a0823114610654578063715018a614610674578063717d57d314610689578063790b2f001461047257600080fd5b80633af32abf1161024f578063510925a21161020857806355f804b3116101e257806355f804b3146105a65780635c975abb146105c657806361e61a25146105e05780636352211e146105ff57600080fd5b8063510925a214610559578063532832e51461039a578063548db1741461058657600080fd5b80633af32abf146104885780633ccfd60b146104c157806342842e0e146104d6578063429b62e5146104f65780634d192b83146105265780634f6ccce71461053957600080fd5b80631785f53c116102a15780631785f53c146103dd57806318160ddd146103fd57806323b872dd14610412578063279a669e146104325780632f745c591461045257806332cb6b0c1461047257600080fd5b806301ffc9a7146102e957806306fdde031461031e578063081812fc14610340578063095ea7b3146103785780630f2cdd6c1461039a57806316c38b3c146103bd575b600080fd5b3480156102f557600080fd5b50610309610304366004612a6c565b610932565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b5061033361099f565b6040516103159190612ae1565b34801561034c57600080fd5b5061036061035b366004612af4565b610a31565b6040516001600160a01b039091168152602001610315565b34801561038457600080fd5b50610398610393366004612b29565b610ac1565b005b3480156103a657600080fd5b506103af601481565b604051908152602001610315565b3480156103c957600080fd5b506103986103d8366004612b63565b610bd8565b3480156103e957600080fd5b506103986103f8366004612b7e565b610c1a565b34801561040957600080fd5b506103af610c65565b34801561041e57600080fd5b5061039861042d366004612b99565b610c7a565b34801561043e57600080fd5b5061039861044d366004612c20565b610c85565b34801561045e57600080fd5b506103af61046d366004612b29565b610dd7565b34801561047e57600080fd5b506103af6105dc81565b34801561049457600080fd5b506103096104a3366004612b7e565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156104cd57600080fd5b50610398610f4c565b3480156104e257600080fd5b506103986104f1366004612b99565b611075565b34801561050257600080fd5b50610309610511366004612b7e565b60126020526000908152604090205460ff1681565b610398610534366004612af4565b611090565b34801561054557600080fd5b506103af610554366004612af4565b611231565b34801561056557600080fd5b506103af610574366004612b7e565b600d6020526000908152604090205481565b34801561059257600080fd5b506103986105a1366004612c8b565b611299565b3480156105b257600080fd5b506103986105c1366004612d57565b6113b9565b3480156105d257600080fd5b50600f546103099060ff1681565b3480156105ec57600080fd5b50600f5461030990610100900460ff1681565b34801561060b57600080fd5b5061036061061a366004612af4565b6113ff565b34801561062b57600080fd5b50610333611411565b34801561064057600080fd5b5061039861064f366004612b7e565b61149f565b34801561066057600080fd5b506103af61066f366004612b7e565b6114ed565b34801561068057600080fd5b5061039861157e565b34801561069557600080fd5b506103986106a4366004612af4565b6115b4565b3480156106b557600080fd5b506103986106c4366004612c8b565b6115e8565b3480156106d557600080fd5b506000546001600160a01b0316610360565b3480156106f357600080fd5b50610707610702366004612af4565b611708565b6040805182516001600160a01b031681526020928301516001600160401b03169281019290925201610315565b34801561074057600080fd5b50610333611725565b610398610757366004612af4565b611734565b34801561076857600080fd5b50610398610777366004612d9f565b611a08565b34801561078857600080fd5b506103af60115481565b34801561079e57600080fd5b506103986107ad366004612b63565b611acc565b3480156107be57600080fd5b506103986107cd366004612dd2565b611b15565b3480156107de57600080fd5b506103986107ed366004612af4565b611b4e565b3480156107fe57600080fd5b50610333611b82565b34801561081357600080fd5b50610333610822366004612af4565b611b8f565b34801561083357600080fd5b506103af600e5481565b34801561084957600080fd5b506103af60085481565b34801561085f57600080fd5b5061039861086e366004612e4d565b611c58565b34801561087f57600080fd5b506103af61088e366004612b7e565b611c93565b34801561089f57600080fd5b506103af6108ae366004612af4565b611c9e565b3480156108bf57600080fd5b506103096108ce366004612ebe565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561090857600080fd5b50610398610917366004612b7e565b611cae565b34801561092857600080fd5b506103af60105481565b60006001600160e01b031982166380ac58cd60e01b148061096357506001600160e01b03198216635b5e139f60e01b145b8061097e57506001600160e01b0319821663780e9d6360e01b145b8061099957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546109ae90612ee8565b80601f01602080910402602001604051908101604052809291908181526020018280546109da90612ee8565b8015610a275780601f106109fc57610100808354040283529160200191610a27565b820191906000526020600020905b815481529060010190602001808311610a0a57829003601f168201915b5050505050905090565b6000610a3e826001541190565b610aa55760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610acc826113ff565b9050806001600160a01b0316836001600160a01b031603610b3a5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610a9c565b336001600160a01b0382161480610b565750610b5681336108ce565b610bc85760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610a9c565b610bd3838383611d49565b505050565b3360009081526012602052604090205460ff16610c075760405162461bcd60e51b8152600401610a9c90612f22565b600f805460ff1916911515919091179055565b6000546001600160a01b03163314610c445760405162461bcd60e51b8152600401610a9c90612f6f565b6001600160a01b03166000908152601260205260409020805460ff19169055565b600060018054610c759190612fba565b905090565b610bd3838383611da5565b3360009081526012602052604090205460ff16610cb45760405162461bcd60e51b8152600401610a9c90612f22565b600260095403610cd65760405162461bcd60e51b8152600401610a9c90612fd1565b6002600955828114610d1a5760405162461bcd60e51b815260206004820152600d60248201526c73697a65206e6f742073616d6560981b6044820152606401610a9c565b60005b83811015610dcb576105dc838383818110610d3a57610d3a613008565b90506020020135610d49610c65565b610d53919061301e565b1115610d715760405162461bcd60e51b8152600401610a9c90613036565b610db9858583818110610d8657610d86613008565b9050602002016020810190610d9b9190612b7e565b848484818110610dad57610dad613008565b9050602002013561212b565b80610dc381613066565b915050610d1d565b50506001600955505050565b6000610de2836114ed565b8210610e3b5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610a9c565b6000610e45610c65565b905060008060005b83811015610eec576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610e9f57805192505b876001600160a01b0316836001600160a01b031603610ed957868403610ecb5750935061099992505050565b83610ed581613066565b9450505b5080610ee481613066565b915050610e4d565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610a9c565b6000546001600160a01b03163314610f765760405162461bcd60e51b8152600401610a9c90612f6f565b600260095403610f985760405162461bcd60e51b8152600401610a9c90612fd1565b600260095547610fe25760405162461bcd60e51b81526020600482015260156024820152746e6f20616d6f756e7420746f20776974686472617760581b6044820152606401610a9c565b604051600090339047908381818185875af1925050503d8060008114611024576040519150601f19603f3d011682016040523d82523d6000602084013e611029565b606091505b505090508061106d5760405162461bcd60e51b815260206004820152601060248201526f3a3930b739b332b9103330b4b632b21760811b6044820152606401610a9c565b506001600955565b610bd383838360405180602001604052806000815250611b15565b3233146110df5760405162461bcd60e51b815260206004820152601e60248201527f7468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610a9c565b6002600954036111015760405162461bcd60e51b8152600401610a9c90612fd1565b6002600955600f5460ff161561114e5760405162461bcd60e51b815260206004820152601260248201527173616c65206973206e6f742061637469766560701b6044820152606401610a9c565b6105dc8161115a610c65565b611164919061301e565b11156111825760405162461bcd60e51b8152600401610a9c90613036565b60148161118e33611c93565b611198919061301e565b11156111df5760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b6044820152606401610a9c565b60006111ea82611c9e565b90506105dc826111f8610c65565b611202919061301e565b0361121557600f805460ff191660011790555b61121f338361212b565b61122881612145565b50506001600955565b600061123b610c65565b82106112955760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610a9c565b5090565b3360009081526012602052604090205460ff166112c85760405162461bcd60e51b8152600401610a9c90612f22565b60005b81811015610bd35760008383838181106112e7576112e7613008565b90506020020160208101906112fc9190612b7e565b6001600160a01b0316036113525760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f742061646420746865206e756c6c206164647265737300000000006044820152606401610a9c565b6000600c600085858581811061136a5761136a613008565b905060200201602081019061137f9190612b7e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113b181613066565b9150506112cb565b3360009081526012602052604090205460ff166113e85760405162461bcd60e51b8152600401610a9c90612f22565b80516113fb90600a90602084019061294d565b5050565b600061140a826121cb565b5192915050565b600a805461141e90612ee8565b80601f016020809104026020016040519081016040528092919081815260200182805461144a90612ee8565b80156114975780601f1061146c57610100808354040283529160200191611497565b820191906000526020600020905b81548152906001019060200180831161147a57829003601f168201915b505050505081565b6000546001600160a01b031633146114c95760405162461bcd60e51b8152600401610a9c90612f6f565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b60006001600160a01b0382166115595760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610a9c565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b031633146115a85760405162461bcd60e51b8152600401610a9c90612f6f565b6115b26000612374565b565b3360009081526012602052604090205460ff166115e35760405162461bcd60e51b8152600401610a9c90612f22565b601055565b3360009081526012602052604090205460ff166116175760405162461bcd60e51b8152600401610a9c90612f22565b60005b81811015610bd357600083838381811061163657611636613008565b905060200201602081019061164b9190612b7e565b6001600160a01b0316036116a15760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f742061646420746865206e756c6c206164647265737300000000006044820152606401610a9c565b6001600c60008585858181106116b9576116b9613008565b90506020020160208101906116ce9190612b7e565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061170081613066565b91505061161a565b6040805180820190915260008082526020820152610999826121cb565b6060600380546109ae90612ee8565b3233146117835760405162461bcd60e51b815260206004820152601e60248201527f7468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610a9c565b6002600954036117a55760405162461bcd60e51b8152600401610a9c90612fd1565b6002600955600f54610100900460ff16156117f75760405162461bcd60e51b815260206004820152601260248201527173616c65206973206e6f742061637469766560701b6044820152606401610a9c565b336000908152600c602052604090205460ff166118565760405162461bcd60e51b815260206004820152601760248201527f61646472657373206e6f742077686974656c69737465640000000000000000006044820152606401610a9c565b6105dc81600e54611867919061301e565b11156118b55760405162461bcd60e51b815260206004820152601b60248201527f6578636565642077686974656c697374206d696e74206c696d697400000000006044820152606401610a9c565b336000908152600d60205260409020546014906118d390839061301e565b11156119195760405162461bcd60e51b8152602060048201526015602482015274195e18d95959081b585e081c195c881dd85b1b195d605a1b6044820152606401610a9c565b6105dc81611925610c65565b61192f919061301e565b111561194d5760405162461bcd60e51b8152600401610a9c90613036565b60148161195933611c93565b611963919061301e565b11156119aa5760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b6044820152606401610a9c565b336000908152600d6020526040812080548392906119c990849061301e565b9250508190555080600e60008282546119e2919061301e565b909155506119f29050338261212b565b61106d81601054611a03919061307f565b612145565b336001600160a01b03831603611a605760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610a9c565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3360009081526012602052604090205460ff16611afb5760405162461bcd60e51b8152600401610a9c90612f22565b600f80549115156101000261ff0019909216919091179055565b611b20848484611da5565b611b2c848484846123c4565b611b485760405162461bcd60e51b8152600401610a9c9061309e565b50505050565b3360009081526012602052604090205460ff16611b7d5760405162461bcd60e51b8152600401610a9c90612f22565b601155565b600b805461141e90612ee8565b6060611b9c826001541190565b611bf95760405162461bcd60e51b815260206004820152602860248201527f4d657461646174612055524920717565727920666f72206e6f6e657869737465604482015267373a103a37b5b2b760c11b6064820152608401610a9c565b6000611c036124c6565b90506000815111611c235760405180602001604052806000815250611c51565b80611c2d846124d5565b600b604051602001611c41939291906130f1565b6040516020818303038152906040525b9392505050565b3360009081526012602052604090205460ff16611c875760405162461bcd60e51b8152600401610a9c90612f22565b610bd3600b83836129cd565b6000610999826125d5565b600081601154610999919061307f565b6000546001600160a01b03163314611cd85760405162461bcd60e51b8152600401610a9c90612f6f565b6001600160a01b038116611d3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a9c565b611d4681612374565b50565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611db0826121cb565b80519091506000906001600160a01b0316336001600160a01b03161480611de7575033611ddc84610a31565b6001600160a01b0316145b80611df957508151611df990336108ce565b905080611e635760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610a9c565b846001600160a01b031682600001516001600160a01b031614611ed75760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610a9c565b6001600160a01b038416611f3b5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610a9c565b611f4b6000848460000151611d49565b6001600160a01b0385166000908152600560205260408120805460019290611f7d9084906001600160801b03166131b4565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092611fc9918591166131dc565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b0319909116919092161717905561205084600161301e565b6000818152600460205260409020549091506001600160a01b03166120e15761207a816001541190565b156120e15760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6113fb828260405180602001604052806000815250612673565b8034101561218d5760405162461bcd60e51b81526020600482015260156024820152740dccacac840e8de40e6cadcc840dadee4ca408aa89605b1b6044820152606401610a9c565b80341115611d4657336108fc6121a38334612fba565b6040518115909202916000818181858888f193505050501580156113fb573d6000803e3d6000fd5b60408051808201909152600080825260208201526121ea826001541190565b6122495760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610a9c565b60007f000000000000000000000000000000000000000000000000000000000000000083106122aa5761229c7f000000000000000000000000000000000000000000000000000000000000000084612fba565b6122a790600161301e565b90505b825b818110612313576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561230057949350505050565b508061230b81613207565b9150506122ac565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610a9c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0384163b156124ba57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061240890339089908890889060040161321e565b6020604051808303816000875af1925050508015612443575060408051601f3d908101601f191682019092526124409181019061325b565b60015b6124a0573d808015612471576040519150601f19603f3d011682016040523d82523d6000602084013e612476565b606091505b5080516000036124985760405162461bcd60e51b8152600401610a9c9061309e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506124be565b5060015b949350505050565b6060600a80546109ae90612ee8565b6060816000036124fc5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612526578061251081613066565b915061251f9050600a8361328e565b9150612500565b6000816001600160401b0381111561254057612540612ccc565b6040519080825280601f01601f19166020018201604052801561256a576020820181803683370190505b5090505b84156124be5761257f600183612fba565b915061258c600a866132a2565b61259790603061301e565b60f81b8183815181106125ac576125ac613008565b60200101906001600160f81b031916908160001a9053506125ce600a8661328e565b945061256e565b60006001600160a01b0382166126475760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b6064820152608401610a9c565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b0384166126d65760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610a9c565b6126e1816001541190565b1561272e5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610a9c565b7f00000000000000000000000000000000000000000000000000000000000000008311156127a95760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610a9c565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906128059087906131dc565b6001600160801b0316815260200185836020015161282391906131dc565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156129425760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461290660008884886123c4565b6129225760405162461bcd60e51b8152600401610a9c9061309e565b8161292c81613066565b925050808061293a90613066565b9150506128b9565b506001819055612123565b82805461295990612ee8565b90600052602060002090601f01602090048101928261297b57600085556129c1565b82601f1061299457805160ff19168380011785556129c1565b828001600101855582156129c1579182015b828111156129c15782518255916020019190600101906129a6565b50611295929150612a41565b8280546129d990612ee8565b90600052602060002090601f0160209004810192826129fb57600085556129c1565b82601f10612a145782800160ff198235161785556129c1565b828001600101855582156129c1579182015b828111156129c1578235825591602001919060010190612a26565b5b808211156112955760008155600101612a42565b6001600160e01b031981168114611d4657600080fd5b600060208284031215612a7e57600080fd5b8135611c5181612a56565b60005b83811015612aa4578181015183820152602001612a8c565b83811115611b485750506000910152565b60008151808452612acd816020860160208601612a89565b601f01601f19169290920160200192915050565b602081526000611c516020830184612ab5565b600060208284031215612b0657600080fd5b5035919050565b80356001600160a01b0381168114612b2457600080fd5b919050565b60008060408385031215612b3c57600080fd5b612b4583612b0d565b946020939093013593505050565b80358015158114612b2457600080fd5b600060208284031215612b7557600080fd5b611c5182612b53565b600060208284031215612b9057600080fd5b611c5182612b0d565b600080600060608486031215612bae57600080fd5b612bb784612b0d565b9250612bc560208501612b0d565b9150604084013590509250925092565b60008083601f840112612be757600080fd5b5081356001600160401b03811115612bfe57600080fd5b6020830191508360208260051b8501011115612c1957600080fd5b9250929050565b60008060008060408587031215612c3657600080fd5b84356001600160401b0380821115612c4d57600080fd5b612c5988838901612bd5565b90965094506020870135915080821115612c7257600080fd5b50612c7f87828801612bd5565b95989497509550505050565b60008060208385031215612c9e57600080fd5b82356001600160401b03811115612cb457600080fd5b612cc085828601612bd5565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612cfc57612cfc612ccc565b604051601f8501601f19908116603f01168101908282118183101715612d2457612d24612ccc565b81604052809350858152868686011115612d3d57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612d6957600080fd5b81356001600160401b03811115612d7f57600080fd5b8201601f81018413612d9057600080fd5b6124be84823560208401612ce2565b60008060408385031215612db257600080fd5b612dbb83612b0d565b9150612dc960208401612b53565b90509250929050565b60008060008060808587031215612de857600080fd5b612df185612b0d565b9350612dff60208601612b0d565b92506040850135915060608501356001600160401b03811115612e2157600080fd5b8501601f81018713612e3257600080fd5b612e4187823560208401612ce2565b91505092959194509250565b60008060208385031215612e6057600080fd5b82356001600160401b0380821115612e7757600080fd5b818501915085601f830112612e8b57600080fd5b813581811115612e9a57600080fd5b866020828501011115612eac57600080fd5b60209290920196919550909350505050565b60008060408385031215612ed157600080fd5b612eda83612b0d565b9150612dc960208401612b0d565b600181811c90821680612efc57607f821691505b602082108103612f1c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f6e6f7420656e6f756768207065726d697373696f6e7320746f20706572666f7260408201526c36903a3434b99030b1ba34b7b760991b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015612fcc57612fcc612fa4565b500390565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000821982111561303157613031612fa4565b500190565b6020808252601690820152757265616368656420746865206d617820737570706c7960501b604082015260600190565b60006001820161307857613078612fa4565b5060010190565b600081600019048311821515161561309957613099612fa4565b500290565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6000845160206131048285838a01612a89565b8551918401916131178184848a01612a89565b8554920191600090600181811c908083168061313457607f831692505b858310810361315157634e487b7160e01b85526022600452602485fd5b8080156131655760018114613176576131a3565b60ff198516885283880195506131a3565b60008b81526020902060005b8581101561319b5781548a820152908401908801613182565b505083880195505b50939b9a5050505050505050505050565b60006001600160801b03838116908316818110156131d4576131d4612fa4565b039392505050565b60006001600160801b038083168185168083038211156131fe576131fe612fa4565b01949350505050565b60008161321657613216612fa4565b506000190190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061325190830184612ab5565b9695505050505050565b60006020828403121561326d57600080fd5b8151611c5181612a56565b634e487b7160e01b600052601260045260246000fd5b60008261329d5761329d613278565b500490565b6000826132b1576132b1613278565b50069056fea2646970667358221220632521f31086abc2011584df8d4456b579eb3af71c6416bd8fa749a64e14eeb164736f6c634300080d003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569643273657a69676e61376a6564336a6e6b33763373776736646d70686236636b7262636f3372336776686868797a6e75766565712f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102e45760003560e01c80636c0360eb11610190578063b7203b8f116100dc578063d7224ba011610095578063e75722301161006f578063e757223014610893578063e985e9c5146108b3578063f2fde38b146108fc578063fc1a1c361461091c57600080fd5b8063d7224ba01461083d578063da3ef23f14610853578063dc33e6811461087357600080fd5b8063b7203b8f14610792578063b88d4fde146107b2578063c6275255146107d2578063c6682862146107f2578063c87b56dd14610807578063cdc63bb61461082757600080fd5b80637f6497831161014957806395d89b411161012357806395d89b4114610734578063a14c6cf314610749578063a22cb4651461075c578063a945bf801461077c57600080fd5b80637f649783146106a95780638da5cb5b146106c95780639231ab2a146106e757600080fd5b80636c0360eb1461061f578063704802751461063457806370a0823114610654578063715018a614610674578063717d57d314610689578063790b2f001461047257600080fd5b80633af32abf1161024f578063510925a21161020857806355f804b3116101e257806355f804b3146105a65780635c975abb146105c657806361e61a25146105e05780636352211e146105ff57600080fd5b8063510925a214610559578063532832e51461039a578063548db1741461058657600080fd5b80633af32abf146104885780633ccfd60b146104c157806342842e0e146104d6578063429b62e5146104f65780634d192b83146105265780634f6ccce71461053957600080fd5b80631785f53c116102a15780631785f53c146103dd57806318160ddd146103fd57806323b872dd14610412578063279a669e146104325780632f745c591461045257806332cb6b0c1461047257600080fd5b806301ffc9a7146102e957806306fdde031461031e578063081812fc14610340578063095ea7b3146103785780630f2cdd6c1461039a57806316c38b3c146103bd575b600080fd5b3480156102f557600080fd5b50610309610304366004612a6c565b610932565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b5061033361099f565b6040516103159190612ae1565b34801561034c57600080fd5b5061036061035b366004612af4565b610a31565b6040516001600160a01b039091168152602001610315565b34801561038457600080fd5b50610398610393366004612b29565b610ac1565b005b3480156103a657600080fd5b506103af601481565b604051908152602001610315565b3480156103c957600080fd5b506103986103d8366004612b63565b610bd8565b3480156103e957600080fd5b506103986103f8366004612b7e565b610c1a565b34801561040957600080fd5b506103af610c65565b34801561041e57600080fd5b5061039861042d366004612b99565b610c7a565b34801561043e57600080fd5b5061039861044d366004612c20565b610c85565b34801561045e57600080fd5b506103af61046d366004612b29565b610dd7565b34801561047e57600080fd5b506103af6105dc81565b34801561049457600080fd5b506103096104a3366004612b7e565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156104cd57600080fd5b50610398610f4c565b3480156104e257600080fd5b506103986104f1366004612b99565b611075565b34801561050257600080fd5b50610309610511366004612b7e565b60126020526000908152604090205460ff1681565b610398610534366004612af4565b611090565b34801561054557600080fd5b506103af610554366004612af4565b611231565b34801561056557600080fd5b506103af610574366004612b7e565b600d6020526000908152604090205481565b34801561059257600080fd5b506103986105a1366004612c8b565b611299565b3480156105b257600080fd5b506103986105c1366004612d57565b6113b9565b3480156105d257600080fd5b50600f546103099060ff1681565b3480156105ec57600080fd5b50600f5461030990610100900460ff1681565b34801561060b57600080fd5b5061036061061a366004612af4565b6113ff565b34801561062b57600080fd5b50610333611411565b34801561064057600080fd5b5061039861064f366004612b7e565b61149f565b34801561066057600080fd5b506103af61066f366004612b7e565b6114ed565b34801561068057600080fd5b5061039861157e565b34801561069557600080fd5b506103986106a4366004612af4565b6115b4565b3480156106b557600080fd5b506103986106c4366004612c8b565b6115e8565b3480156106d557600080fd5b506000546001600160a01b0316610360565b3480156106f357600080fd5b50610707610702366004612af4565b611708565b6040805182516001600160a01b031681526020928301516001600160401b03169281019290925201610315565b34801561074057600080fd5b50610333611725565b610398610757366004612af4565b611734565b34801561076857600080fd5b50610398610777366004612d9f565b611a08565b34801561078857600080fd5b506103af60115481565b34801561079e57600080fd5b506103986107ad366004612b63565b611acc565b3480156107be57600080fd5b506103986107cd366004612dd2565b611b15565b3480156107de57600080fd5b506103986107ed366004612af4565b611b4e565b3480156107fe57600080fd5b50610333611b82565b34801561081357600080fd5b50610333610822366004612af4565b611b8f565b34801561083357600080fd5b506103af600e5481565b34801561084957600080fd5b506103af60085481565b34801561085f57600080fd5b5061039861086e366004612e4d565b611c58565b34801561087f57600080fd5b506103af61088e366004612b7e565b611c93565b34801561089f57600080fd5b506103af6108ae366004612af4565b611c9e565b3480156108bf57600080fd5b506103096108ce366004612ebe565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561090857600080fd5b50610398610917366004612b7e565b611cae565b34801561092857600080fd5b506103af60105481565b60006001600160e01b031982166380ac58cd60e01b148061096357506001600160e01b03198216635b5e139f60e01b145b8061097e57506001600160e01b0319821663780e9d6360e01b145b8061099957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546109ae90612ee8565b80601f01602080910402602001604051908101604052809291908181526020018280546109da90612ee8565b8015610a275780601f106109fc57610100808354040283529160200191610a27565b820191906000526020600020905b815481529060010190602001808311610a0a57829003601f168201915b5050505050905090565b6000610a3e826001541190565b610aa55760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610acc826113ff565b9050806001600160a01b0316836001600160a01b031603610b3a5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610a9c565b336001600160a01b0382161480610b565750610b5681336108ce565b610bc85760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610a9c565b610bd3838383611d49565b505050565b3360009081526012602052604090205460ff16610c075760405162461bcd60e51b8152600401610a9c90612f22565b600f805460ff1916911515919091179055565b6000546001600160a01b03163314610c445760405162461bcd60e51b8152600401610a9c90612f6f565b6001600160a01b03166000908152601260205260409020805460ff19169055565b600060018054610c759190612fba565b905090565b610bd3838383611da5565b3360009081526012602052604090205460ff16610cb45760405162461bcd60e51b8152600401610a9c90612f22565b600260095403610cd65760405162461bcd60e51b8152600401610a9c90612fd1565b6002600955828114610d1a5760405162461bcd60e51b815260206004820152600d60248201526c73697a65206e6f742073616d6560981b6044820152606401610a9c565b60005b83811015610dcb576105dc838383818110610d3a57610d3a613008565b90506020020135610d49610c65565b610d53919061301e565b1115610d715760405162461bcd60e51b8152600401610a9c90613036565b610db9858583818110610d8657610d86613008565b9050602002016020810190610d9b9190612b7e565b848484818110610dad57610dad613008565b9050602002013561212b565b80610dc381613066565b915050610d1d565b50506001600955505050565b6000610de2836114ed565b8210610e3b5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610a9c565b6000610e45610c65565b905060008060005b83811015610eec576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610e9f57805192505b876001600160a01b0316836001600160a01b031603610ed957868403610ecb5750935061099992505050565b83610ed581613066565b9450505b5080610ee481613066565b915050610e4d565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610a9c565b6000546001600160a01b03163314610f765760405162461bcd60e51b8152600401610a9c90612f6f565b600260095403610f985760405162461bcd60e51b8152600401610a9c90612fd1565b600260095547610fe25760405162461bcd60e51b81526020600482015260156024820152746e6f20616d6f756e7420746f20776974686472617760581b6044820152606401610a9c565b604051600090339047908381818185875af1925050503d8060008114611024576040519150601f19603f3d011682016040523d82523d6000602084013e611029565b606091505b505090508061106d5760405162461bcd60e51b815260206004820152601060248201526f3a3930b739b332b9103330b4b632b21760811b6044820152606401610a9c565b506001600955565b610bd383838360405180602001604052806000815250611b15565b3233146110df5760405162461bcd60e51b815260206004820152601e60248201527f7468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610a9c565b6002600954036111015760405162461bcd60e51b8152600401610a9c90612fd1565b6002600955600f5460ff161561114e5760405162461bcd60e51b815260206004820152601260248201527173616c65206973206e6f742061637469766560701b6044820152606401610a9c565b6105dc8161115a610c65565b611164919061301e565b11156111825760405162461bcd60e51b8152600401610a9c90613036565b60148161118e33611c93565b611198919061301e565b11156111df5760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b6044820152606401610a9c565b60006111ea82611c9e565b90506105dc826111f8610c65565b611202919061301e565b0361121557600f805460ff191660011790555b61121f338361212b565b61122881612145565b50506001600955565b600061123b610c65565b82106112955760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610a9c565b5090565b3360009081526012602052604090205460ff166112c85760405162461bcd60e51b8152600401610a9c90612f22565b60005b81811015610bd35760008383838181106112e7576112e7613008565b90506020020160208101906112fc9190612b7e565b6001600160a01b0316036113525760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f742061646420746865206e756c6c206164647265737300000000006044820152606401610a9c565b6000600c600085858581811061136a5761136a613008565b905060200201602081019061137f9190612b7e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113b181613066565b9150506112cb565b3360009081526012602052604090205460ff166113e85760405162461bcd60e51b8152600401610a9c90612f22565b80516113fb90600a90602084019061294d565b5050565b600061140a826121cb565b5192915050565b600a805461141e90612ee8565b80601f016020809104026020016040519081016040528092919081815260200182805461144a90612ee8565b80156114975780601f1061146c57610100808354040283529160200191611497565b820191906000526020600020905b81548152906001019060200180831161147a57829003601f168201915b505050505081565b6000546001600160a01b031633146114c95760405162461bcd60e51b8152600401610a9c90612f6f565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b60006001600160a01b0382166115595760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610a9c565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b031633146115a85760405162461bcd60e51b8152600401610a9c90612f6f565b6115b26000612374565b565b3360009081526012602052604090205460ff166115e35760405162461bcd60e51b8152600401610a9c90612f22565b601055565b3360009081526012602052604090205460ff166116175760405162461bcd60e51b8152600401610a9c90612f22565b60005b81811015610bd357600083838381811061163657611636613008565b905060200201602081019061164b9190612b7e565b6001600160a01b0316036116a15760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f742061646420746865206e756c6c206164647265737300000000006044820152606401610a9c565b6001600c60008585858181106116b9576116b9613008565b90506020020160208101906116ce9190612b7e565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061170081613066565b91505061161a565b6040805180820190915260008082526020820152610999826121cb565b6060600380546109ae90612ee8565b3233146117835760405162461bcd60e51b815260206004820152601e60248201527f7468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610a9c565b6002600954036117a55760405162461bcd60e51b8152600401610a9c90612fd1565b6002600955600f54610100900460ff16156117f75760405162461bcd60e51b815260206004820152601260248201527173616c65206973206e6f742061637469766560701b6044820152606401610a9c565b336000908152600c602052604090205460ff166118565760405162461bcd60e51b815260206004820152601760248201527f61646472657373206e6f742077686974656c69737465640000000000000000006044820152606401610a9c565b6105dc81600e54611867919061301e565b11156118b55760405162461bcd60e51b815260206004820152601b60248201527f6578636565642077686974656c697374206d696e74206c696d697400000000006044820152606401610a9c565b336000908152600d60205260409020546014906118d390839061301e565b11156119195760405162461bcd60e51b8152602060048201526015602482015274195e18d95959081b585e081c195c881dd85b1b195d605a1b6044820152606401610a9c565b6105dc81611925610c65565b61192f919061301e565b111561194d5760405162461bcd60e51b8152600401610a9c90613036565b60148161195933611c93565b611963919061301e565b11156119aa5760405162461bcd60e51b815260206004820152601660248201527563616e206e6f74206d696e742074686973206d616e7960501b6044820152606401610a9c565b336000908152600d6020526040812080548392906119c990849061301e565b9250508190555080600e60008282546119e2919061301e565b909155506119f29050338261212b565b61106d81601054611a03919061307f565b612145565b336001600160a01b03831603611a605760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610a9c565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3360009081526012602052604090205460ff16611afb5760405162461bcd60e51b8152600401610a9c90612f22565b600f80549115156101000261ff0019909216919091179055565b611b20848484611da5565b611b2c848484846123c4565b611b485760405162461bcd60e51b8152600401610a9c9061309e565b50505050565b3360009081526012602052604090205460ff16611b7d5760405162461bcd60e51b8152600401610a9c90612f22565b601155565b600b805461141e90612ee8565b6060611b9c826001541190565b611bf95760405162461bcd60e51b815260206004820152602860248201527f4d657461646174612055524920717565727920666f72206e6f6e657869737465604482015267373a103a37b5b2b760c11b6064820152608401610a9c565b6000611c036124c6565b90506000815111611c235760405180602001604052806000815250611c51565b80611c2d846124d5565b600b604051602001611c41939291906130f1565b6040516020818303038152906040525b9392505050565b3360009081526012602052604090205460ff16611c875760405162461bcd60e51b8152600401610a9c90612f22565b610bd3600b83836129cd565b6000610999826125d5565b600081601154610999919061307f565b6000546001600160a01b03163314611cd85760405162461bcd60e51b8152600401610a9c90612f6f565b6001600160a01b038116611d3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a9c565b611d4681612374565b50565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611db0826121cb565b80519091506000906001600160a01b0316336001600160a01b03161480611de7575033611ddc84610a31565b6001600160a01b0316145b80611df957508151611df990336108ce565b905080611e635760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610a9c565b846001600160a01b031682600001516001600160a01b031614611ed75760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610a9c565b6001600160a01b038416611f3b5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610a9c565b611f4b6000848460000151611d49565b6001600160a01b0385166000908152600560205260408120805460019290611f7d9084906001600160801b03166131b4565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092611fc9918591166131dc565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b0319909116919092161717905561205084600161301e565b6000818152600460205260409020549091506001600160a01b03166120e15761207a816001541190565b156120e15760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6113fb828260405180602001604052806000815250612673565b8034101561218d5760405162461bcd60e51b81526020600482015260156024820152740dccacac840e8de40e6cadcc840dadee4ca408aa89605b1b6044820152606401610a9c565b80341115611d4657336108fc6121a38334612fba565b6040518115909202916000818181858888f193505050501580156113fb573d6000803e3d6000fd5b60408051808201909152600080825260208201526121ea826001541190565b6122495760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610a9c565b60007f000000000000000000000000000000000000000000000000000000000000001483106122aa5761229c7f000000000000000000000000000000000000000000000000000000000000001484612fba565b6122a790600161301e565b90505b825b818110612313576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561230057949350505050565b508061230b81613207565b9150506122ac565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610a9c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0384163b156124ba57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061240890339089908890889060040161321e565b6020604051808303816000875af1925050508015612443575060408051601f3d908101601f191682019092526124409181019061325b565b60015b6124a0573d808015612471576040519150601f19603f3d011682016040523d82523d6000602084013e612476565b606091505b5080516000036124985760405162461bcd60e51b8152600401610a9c9061309e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506124be565b5060015b949350505050565b6060600a80546109ae90612ee8565b6060816000036124fc5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612526578061251081613066565b915061251f9050600a8361328e565b9150612500565b6000816001600160401b0381111561254057612540612ccc565b6040519080825280601f01601f19166020018201604052801561256a576020820181803683370190505b5090505b84156124be5761257f600183612fba565b915061258c600a866132a2565b61259790603061301e565b60f81b8183815181106125ac576125ac613008565b60200101906001600160f81b031916908160001a9053506125ce600a8661328e565b945061256e565b60006001600160a01b0382166126475760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b6064820152608401610a9c565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b0384166126d65760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610a9c565b6126e1816001541190565b1561272e5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610a9c565b7f00000000000000000000000000000000000000000000000000000000000000148311156127a95760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610a9c565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906128059087906131dc565b6001600160801b0316815260200185836020015161282391906131dc565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156129425760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461290660008884886123c4565b6129225760405162461bcd60e51b8152600401610a9c9061309e565b8161292c81613066565b925050808061293a90613066565b9150506128b9565b506001819055612123565b82805461295990612ee8565b90600052602060002090601f01602090048101928261297b57600085556129c1565b82601f1061299457805160ff19168380011785556129c1565b828001600101855582156129c1579182015b828111156129c15782518255916020019190600101906129a6565b50611295929150612a41565b8280546129d990612ee8565b90600052602060002090601f0160209004810192826129fb57600085556129c1565b82601f10612a145782800160ff198235161785556129c1565b828001600101855582156129c1579182015b828111156129c1578235825591602001919060010190612a26565b5b808211156112955760008155600101612a42565b6001600160e01b031981168114611d4657600080fd5b600060208284031215612a7e57600080fd5b8135611c5181612a56565b60005b83811015612aa4578181015183820152602001612a8c565b83811115611b485750506000910152565b60008151808452612acd816020860160208601612a89565b601f01601f19169290920160200192915050565b602081526000611c516020830184612ab5565b600060208284031215612b0657600080fd5b5035919050565b80356001600160a01b0381168114612b2457600080fd5b919050565b60008060408385031215612b3c57600080fd5b612b4583612b0d565b946020939093013593505050565b80358015158114612b2457600080fd5b600060208284031215612b7557600080fd5b611c5182612b53565b600060208284031215612b9057600080fd5b611c5182612b0d565b600080600060608486031215612bae57600080fd5b612bb784612b0d565b9250612bc560208501612b0d565b9150604084013590509250925092565b60008083601f840112612be757600080fd5b5081356001600160401b03811115612bfe57600080fd5b6020830191508360208260051b8501011115612c1957600080fd5b9250929050565b60008060008060408587031215612c3657600080fd5b84356001600160401b0380821115612c4d57600080fd5b612c5988838901612bd5565b90965094506020870135915080821115612c7257600080fd5b50612c7f87828801612bd5565b95989497509550505050565b60008060208385031215612c9e57600080fd5b82356001600160401b03811115612cb457600080fd5b612cc085828601612bd5565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612cfc57612cfc612ccc565b604051601f8501601f19908116603f01168101908282118183101715612d2457612d24612ccc565b81604052809350858152868686011115612d3d57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612d6957600080fd5b81356001600160401b03811115612d7f57600080fd5b8201601f81018413612d9057600080fd5b6124be84823560208401612ce2565b60008060408385031215612db257600080fd5b612dbb83612b0d565b9150612dc960208401612b53565b90509250929050565b60008060008060808587031215612de857600080fd5b612df185612b0d565b9350612dff60208601612b0d565b92506040850135915060608501356001600160401b03811115612e2157600080fd5b8501601f81018713612e3257600080fd5b612e4187823560208401612ce2565b91505092959194509250565b60008060208385031215612e6057600080fd5b82356001600160401b0380821115612e7757600080fd5b818501915085601f830112612e8b57600080fd5b813581811115612e9a57600080fd5b866020828501011115612eac57600080fd5b60209290920196919550909350505050565b60008060408385031215612ed157600080fd5b612eda83612b0d565b9150612dc960208401612b0d565b600181811c90821680612efc57607f821691505b602082108103612f1c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f6e6f7420656e6f756768207065726d697373696f6e7320746f20706572666f7260408201526c36903a3434b99030b1ba34b7b760991b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082821015612fcc57612fcc612fa4565b500390565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000821982111561303157613031612fa4565b500190565b6020808252601690820152757265616368656420746865206d617820737570706c7960501b604082015260600190565b60006001820161307857613078612fa4565b5060010190565b600081600019048311821515161561309957613099612fa4565b500290565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b6000845160206131048285838a01612a89565b8551918401916131178184848a01612a89565b8554920191600090600181811c908083168061313457607f831692505b858310810361315157634e487b7160e01b85526022600452602485fd5b8080156131655760018114613176576131a3565b60ff198516885283880195506131a3565b60008b81526020902060005b8581101561319b5781548a820152908401908801613182565b505083880195505b50939b9a5050505050505050505050565b60006001600160801b03838116908316818110156131d4576131d4612fa4565b039392505050565b60006001600160801b038083168185168083038211156131fe576131fe612fa4565b01949350505050565b60008161321657613216612fa4565b506000190190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061325190830184612ab5565b9695505050505050565b60006020828403121561326d57600080fd5b8151611c5181612a56565b634e487b7160e01b600052601260045260246000fd5b60008261329d5761329d613278565b500490565b6000826132b1576132b1613278565b50069056fea2646970667358221220632521f31086abc2011584df8d4456b579eb3af71c6416bd8fa749a64e14eeb164736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569643273657a69676e61376a6564336a6e6b33763373776736646d70686236636b7262636f3372336776686868797a6e75766565712f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://bafybeid2sezigna7jed3jnk3v3swg6dmphb6ckrbco3r3gvhhhyznuveeq/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [2] : 697066733a2f2f62616679626569643273657a69676e61376a6564336a6e6b33
Arg [3] : 763373776736646d70686236636b7262636f3372336776686868797a6e757665
Arg [4] : 65712f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42744:6370:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27836:370;;;;;;;;;;-1:-1:-1;27836:370:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;27836:370:0;;;;;;;;29562:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31087:204::-;;;;;;;;;;-1:-1:-1;31087:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;31087:204:0;1528:203:1;30650:379:0;;;;;;;;;;-1:-1:-1;30650:379:0;;;;;:::i;:::-;;:::i;:::-;;42950:43;;;;;;;;;;;;42991:2;42950:43;;;;;2319:25:1;;;2307:2;2292:18;42950:43:0;2173:177:1;47556:91:0;;;;;;;;;;-1:-1:-1;47556:91:0;;;;;:::i;:::-;;:::i;47228:94::-;;;;;;;;;;-1:-1:-1;47228:94:0;;;;;:::i;:::-;;:::i;26393:98::-;;;;;;;;;;;;;:::i;31937:142::-;;;;;;;;;;-1:-1:-1;31937:142:0;;;;;:::i;:::-;;:::i;45954:451::-;;;;;;;;;;-1:-1:-1;45954:451:0;;;;;:::i;:::-;;:::i;27028:744::-;;;;;;;;;;-1:-1:-1;27028:744:0;;;;;:::i;:::-;;:::i;42902:41::-;;;;;;;;;;;;42939:4;42902:41;;46413:112;;;;;;;;;;-1:-1:-1;46413:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;46498:19:0;46474:4;46498:19;;;:12;:19;;;;;;;;;46413:112;48555:256;;;;;;;;;;;;;:::i;32142:157::-;;;;;;;;;;-1:-1:-1;32142:157:0;;;;;:::i;:::-;;:::i;43473:36::-;;;;;;;;;;-1:-1:-1;43473:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44123:635;;;;;;:::i;:::-;;:::i;26560:177::-;;;;;;;;;;-1:-1:-1;26560:177:0;;;;;:::i;:::-;;:::i;43174:65::-;;;;;;;;;;-1:-1:-1;43174:65:0;;;;;:::i;:::-;;;;;;;;;;;;;;46829:293;;;;;;;;;;-1:-1:-1;46829:293:0;;;;;:::i;:::-;;:::i;48295:108::-;;;;;;;;;;-1:-1:-1;48295:108:0;;;;;:::i;:::-;;:::i;43301:26::-;;;;;;;;;;-1:-1:-1;43301:26:0;;;;;;;;43334:35;;;;;;;;;;-1:-1:-1;43334:35:0;;;;;;;;;;;29385:118;;;;;;;;;;-1:-1:-1;29385:118:0;;;;;:::i;:::-;;:::i;42828:21::-;;;;;;;;;;;;;:::i;47130:90::-;;;;;;;;;;-1:-1:-1;47130:90:0;;;;;:::i;:::-;;:::i;28262:211::-;;;;;;;;;;-1:-1:-1;28262:211:0;;;;;:::i;:::-;;:::i;41851:103::-;;;;;;;;;;;;;:::i;47440:108::-;;;;;;;;;;-1:-1:-1;47440:108:0;;;;;:::i;:::-;;:::i;46534:287::-;;;;;;;;;;-1:-1:-1;46534:287:0;;;;;:::i;:::-;;:::i;41200:87::-;;;;;;;;;;-1:-1:-1;41246:7:0;41273:6;-1:-1:-1;;;;;41273:6:0;41200:87;;48942:169;;;;;;;;;;-1:-1:-1;48942:169:0;;;;;:::i;:::-;;:::i;:::-;;;;6276:13:1;;-1:-1:-1;;;;;6272:39:1;6254:58;;6372:4;6360:17;;;6354:24;-1:-1:-1;;;;;6350:49:1;6328:20;;;6321:79;;;;6227:18;48942:169:0;6046:360:1;29717:98:0;;;;;;;;;;;;;:::i;44766:945::-;;;;;;:::i;:::-;;:::i;31355:274::-;;;;;;;;;;-1:-1:-1;31355:274:0;;;;;:::i;:::-;;:::i;43424:40::-;;;;;;;;;;;;;;;;47655:109;;;;;;;;;;-1:-1:-1;47655:109:0;;;;;:::i;:::-;;:::i;32362:311::-;;;;;;;;;;-1:-1:-1;32362:311:0;;;;;:::i;:::-;;:::i;47330:102::-;;;;;;;;;;-1:-1:-1;47330:102:0;;;;;:::i;:::-;;:::i;42856:37::-;;;;;;;;;;;;;:::i;47888:399::-;;;;;;;;;;-1:-1:-1;47888:399:0;;;;;:::i;:::-;;:::i;43246:42::-;;;;;;;;;;;;;;;;36777:43;;;;;;;;;;;;;;;;48411:136;;;;;;;;;;-1:-1:-1;48411:136:0;;;;;:::i;:::-;;:::i;48819:115::-;;;;;;;;;;-1:-1:-1;48819:115:0;;;;;:::i;:::-;;:::i;43997:118::-;;;;;;;;;;-1:-1:-1;43997:118:0;;;;;:::i;:::-;;:::i;31692:186::-;;;;;;;;;;-1:-1:-1;31692:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;31837:25:0;;;31814:4;31837:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31692:186;42109:201;;;;;;;;;;-1:-1:-1;42109:201:0;;;;;:::i;:::-;;:::i;43378:39::-;;;;;;;;;;;;;;;;27836:370;27963:4;-1:-1:-1;;;;;;27993:40:0;;-1:-1:-1;;;27993:40:0;;:99;;-1:-1:-1;;;;;;;28044:48:0;;-1:-1:-1;;;28044:48:0;27993:99;:160;;;-1:-1:-1;;;;;;;28103:50:0;;-1:-1:-1;;;28103:50:0;27993:160;:207;;;-1:-1:-1;;;;;;;;;;11479:40:0;;;28164:36;27979:221;27836:370;-1:-1:-1;;27836:370:0:o;29562:94::-;29616:13;29645:5;29638:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29562:94;:::o;31087:204::-;31155:7;31179:16;31187:7;32999:12;;-1:-1:-1;32989:22:0;32912:105;31179:16;31171:74;;;;-1:-1:-1;;;31171:74:0;;8791:2:1;31171:74:0;;;8773:21:1;8830:2;8810:18;;;8803:30;8869:34;8849:18;;;8842:62;-1:-1:-1;;;8920:18:1;;;8913:43;8973:19;;31171:74:0;;;;;;;;;-1:-1:-1;31261:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31261:24:0;;31087:204::o;30650:379::-;30719:13;30735:24;30751:7;30735:15;:24::i;:::-;30719:40;;30780:5;-1:-1:-1;;;;;30774:11:0;:2;-1:-1:-1;;;;;30774:11:0;;30766:58;;;;-1:-1:-1;;;30766:58:0;;9205:2:1;30766:58:0;;;9187:21:1;9244:2;9224:18;;;9217:30;9283:34;9263:18;;;9256:62;-1:-1:-1;;;9334:18:1;;;9327:32;9376:19;;30766:58:0;9003:398:1;30766:58:0;23946:10;-1:-1:-1;;;;;30849:21:0;;;;:62;;-1:-1:-1;30874:37:0;30891:5;23946:10;31692:186;:::i;30874:37::-;30833:153;;;;-1:-1:-1;;;30833:153:0;;9608:2:1;30833:153:0;;;9590:21:1;9647:2;9627:18;;;9620:30;9686:34;9666:18;;;9659:62;9757:27;9737:18;;;9730:55;9802:19;;30833:153:0;9406:421:1;30833:153:0;30995:28;31004:2;31008:7;31017:5;30995:8;:28::i;:::-;30712:317;30650:379;;:::o;47556:91::-;43908:10;43901:18;;;;:6;:18;;;;;;;;43893:76;;;;-1:-1:-1;;;43893:76:0;;;;;;;:::i;:::-;47623:6:::1;:16:::0;;-1:-1:-1;;47623:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47556:91::o;47228:94::-;41246:7;41273:6;-1:-1:-1;;;;;41273:6:0;23946:10;41420:23;41412:68;;;;-1:-1:-1;;;41412:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47293:13:0::1;47309:5;47293:13:::0;;;:6:::1;:13;::::0;;;;:21;;-1:-1:-1;;47293:21:0::1;::::0;;47228:94::o;26393:98::-;26446:7;26484:1;26469:12;;:16;;;;:::i;:::-;26462:23;;26393:98;:::o;31937:142::-;32045:28;32055:4;32061:2;32065:7;32045:9;:28::i;45954:451::-;43908:10;43901:18;;;;:6;:18;;;;;;;;43893:76;;;;-1:-1:-1;;;43893:76:0;;;;;;;:::i;:::-;22240:1:::1;22838:7;;:19:::0;22830:63:::1;;;;-1:-1:-1::0;;;22830:63:0::1;;;;;;;:::i;:::-;22240:1;22971:7;:18:::0;46124:37;;::::2;46116:64;;;::::0;-1:-1:-1;;;46116:64:0;;11431:2:1;46116:64:0::2;::::0;::::2;11413:21:1::0;11470:2;11450:18;;;11443:30;-1:-1:-1;;;11489:18:1;;;11482:43;11542:18;;46116:64:0::2;11229:337:1::0;46116:64:0::2;46198:9;46193:205;46213:21:::0;;::::2;46193:205;;;42939:4;46280:9;;46290:1;46280:12;;;;;;;:::i;:::-;;;;;;;46264:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:42;;46256:77;;;;-1:-1:-1::0;;;46256:77:0::2;;;;;;;:::i;:::-;46348:38;46358:10;;46369:1;46358:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;46373:9;;46383:1;46373:12;;;;;;;:::i;:::-;;;;;;;46348:9;:38::i;:::-;46236:3:::0;::::2;::::0;::::2;:::i;:::-;;;;46193:205;;;-1:-1:-1::0;;22196:1:0::1;23150:7;:22:::0;-1:-1:-1;;;45954:451:0:o;27028:744::-;27137:7;27172:16;27182:5;27172:9;:16::i;:::-;27164:5;:24;27156:71;;;;-1:-1:-1;;;27156:71:0;;12529:2:1;27156:71:0;;;12511:21:1;12568:2;12548:18;;;12541:30;12607:34;12587:18;;;12580:62;-1:-1:-1;;;12658:18:1;;;12651:32;12700:19;;27156:71:0;12327:398:1;27156:71:0;27234:22;27259:13;:11;:13::i;:::-;27234:38;;27279:19;27309:25;27359:9;27354:350;27378:14;27374:1;:18;27354:350;;;27408:31;27442:14;;;:11;:14;;;;;;;;;27408:48;;;;;;;;;-1:-1:-1;;;;;27408:48:0;;;;;-1:-1:-1;;;27408:48:0;;;-1:-1:-1;;;;;27408:48:0;;;;;;;;27469:28;27465:89;;27530:14;;;-1:-1:-1;27465:89:0;27587:5;-1:-1:-1;;;;;27566:26:0;:17;-1:-1:-1;;;;;27566:26:0;;27562:135;;27624:5;27609:11;:20;27605:59;;-1:-1:-1;27651:1:0;-1:-1:-1;27644:8:0;;-1:-1:-1;;;27644:8:0;27605:59;27674:13;;;;:::i;:::-;;;;27562:135;-1:-1:-1;27394:3:0;;;;:::i;:::-;;;;27354:350;;;-1:-1:-1;27710:56:0;;-1:-1:-1;;;27710:56:0;;12932:2:1;27710:56:0;;;12914:21:1;12971:2;12951:18;;;12944:30;13010:34;12990:18;;;12983:62;-1:-1:-1;;;13061:18:1;;;13054:44;13115:19;;27710:56:0;12730:410:1;48555:256:0;41246:7;41273:6;-1:-1:-1;;;;;41273:6:0;23946:10;41420:23;41412:68;;;;-1:-1:-1;;;41412:68:0;;;;;;;:::i;:::-;22240:1:::1;22838:7;;:19:::0;22830:63:::1;;;;-1:-1:-1::0;;;22830:63:0::1;;;;;;;:::i;:::-;22240:1;22971:7;:18:::0;48626:21:::2;48618:59;;;::::0;-1:-1:-1;;;48618:59:0;;13347:2:1;48618:59:0::2;::::0;::::2;13329:21:1::0;13386:2;13366:18;;;13359:30;-1:-1:-1;;;13405:18:1;;;13398:51;13466:18;;48618:59:0::2;13145:345:1::0;48618:59:0::2;48707:49;::::0;48689:12:::2;::::0;48707:10:::2;::::0;48730:21:::2;::::0;48689:12;48707:49;48689:12;48707:49;48730:21;48707:10;:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48688:68;;;48775:7;48767:36;;;::::0;-1:-1:-1;;;48767:36:0;;13907:2:1;48767:36:0::2;::::0;::::2;13889:21:1::0;13946:2;13926:18;;;13919:30;-1:-1:-1;;;13965:18:1;;;13958:46;14021:18;;48767:36:0::2;13705:340:1::0;48767:36:0::2;-1:-1:-1::0;22196:1:0::1;23150:7;:22:::0;48555:256::o;32142:157::-;32254:39;32271:4;32277:2;32281:7;32254:39;;;;;;;;;;;;:16;:39::i;44123:635::-;43771:9;43784:10;43771:23;43763:66;;;;-1:-1:-1;;;43763:66:0;;14252:2:1;43763:66:0;;;14234:21:1;14291:2;14271:18;;;14264:30;14330:32;14310:18;;;14303:60;14380:18;;43763:66:0;14050:354:1;43763:66:0;22240:1:::1;22838:7;;:19:::0;22830:63:::1;;;;-1:-1:-1::0;;;22830:63:0::1;;;;;;;:::i;:::-;22240:1;22971:7;:18:::0;44271:6:::2;::::0;::::2;;44270:7;44262:38;;;::::0;-1:-1:-1;;;44262:38:0;;14611:2:1;44262:38:0::2;::::0;::::2;14593:21:1::0;14650:2;14630:18;;;14623:30;-1:-1:-1;;;14669:18:1;;;14662:48;14727:18;;44262:38:0::2;14409:342:1::0;44262:38:0::2;42939:4;44335:9;44319:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;44311:74;;;;-1:-1:-1::0;;;44311:74:0::2;;;;;;;:::i;:::-;42991:2;44445:9;44418:24;44431:10;44418:12;:24::i;:::-;:36;;;;:::i;:::-;:54;;44396:126;;;::::0;-1:-1:-1;;;44396:126:0;;14958:2:1;44396:126:0::2;::::0;::::2;14940:21:1::0;14997:2;14977:18;;;14970:30;-1:-1:-1;;;15016:18:1;;;15009:52;15078:18;;44396:126:0::2;14756:346:1::0;44396:126:0::2;44543:13;44559:19;44568:9;44559:8;:19::i;:::-;44543:35;;42939:4;44611:9;44595:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39:::0;44591:85:::2;;44651:6;:13:::0;;-1:-1:-1;;44651:13:0::2;44660:4;44651:13;::::0;;44591:85:::2;44688:32;44698:10;44710:9;44688;:32::i;:::-;44731:19;44744:5;44731:12;:19::i;:::-;-1:-1:-1::0;;22196:1:0::1;23150:7;:22:::0;44123:635::o;26560:177::-;26627:7;26659:13;:11;:13::i;:::-;26651:5;:21;26643:69;;;;-1:-1:-1;;;26643:69:0;;15309:2:1;26643:69:0;;;15291:21:1;15348:2;15328:18;;;15321:30;15387:34;15367:18;;;15360:62;-1:-1:-1;;;15438:18:1;;;15431:33;15481:19;;26643:69:0;15107:399:1;26643:69:0;-1:-1:-1;26726:5:0;26560:177::o;46829:293::-;43908:10;43901:18;;;;:6;:18;;;;;;;;43893:76;;;;-1:-1:-1;;;43893:76:0;;;;;;;:::i;:::-;46928:9:::1;46923:192;46943:21:::0;;::::1;46923:192;;;47019:1;46994:10:::0;;47005:1;46994:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46994:27:0::1;::::0;46986:67:::1;;;::::0;-1:-1:-1;;;46986:67:0;;15713:2:1;46986:67:0::1;::::0;::::1;15695:21:1::0;15752:2;15732:18;;;15725:30;15791:29;15771:18;;;15764:57;15838:18;;46986:67:0::1;15511:351:1::0;46986:67:0::1;47098:5;47068:12;:27;47081:10;;47092:1;47081:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47068:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;47068:27:0;:35;;-1:-1:-1;;47068:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46966:3;::::1;::::0;::::1;:::i;:::-;;;;46923:192;;48295:108:::0;43908:10;43901:18;;;;:6;:18;;;;;;;;43893:76;;;;-1:-1:-1;;;43893:76:0;;;;;;;:::i;:::-;48374:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;48295:108:::0;:::o;29385:118::-;29449:7;29472:20;29484:7;29472:11;:20::i;:::-;:25;;29385:118;-1:-1:-1;;29385:118:0:o;42828:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47130:90::-;41246:7;41273:6;-1:-1:-1;;;;;41273:6:0;23946:10;41420:23;41412:68;;;;-1:-1:-1;;;41412:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47192:13:0::1;;::::0;;;:6:::1;:13;::::0;;;;:20;;-1:-1:-1;;47192:20:0::1;47208:4;47192:20;::::0;;47130:90::o;28262:211::-;28326:7;-1:-1:-1;;;;;28350:19:0;;28342:75;;;;-1:-1:-1;;;28342:75:0;;16069:2:1;28342:75:0;;;16051:21:1;16108:2;16088:18;;;16081:30;16147:34;16127:18;;;16120:62;-1:-1:-1;;;16198:18:1;;;16191:41;16249:19;;28342:75:0;15867:407:1;28342:75:0;-1:-1:-1;;;;;;28439:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;28439:27:0;;28262:211::o;41851:103::-;41246:7;41273:6;-1:-1:-1;;;;;41273:6:0;23946:10;41420:23;41412:68;;;;-1:-1:-1;;;41412:68:0;;;;;;;:::i;:::-;41916:30:::1;41943:1;41916:18;:30::i;:::-;41851:103::o:0;47440:108::-;43908:10;43901:18;;;;:6;:18;;;;;;;;43893:76;;;;-1:-1:-1;;;43893:76:0;;;;;;;:::i;:::-;47517:14:::1;:23:::0;47440:108::o;46534:287::-;43908:10;43901:18;;;;:6;:18;;;;;;;;43893:76;;;;-1:-1:-1;;;43893:76:0;;;;;;;:::i;:::-;46628:9:::1;46623:191;46643:21:::0;;::::1;46623:191;;;46719:1;46694:10:::0;;46705:1;46694:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46694:27:0::1;::::0;46686:67:::1;;;::::0;-1:-1:-1;;;46686:67:0;;15713:2:1;46686:67:0::1;::::0;::::1;15695:21:1::0;15752:2;15732:18;;;15725:30;15791:29;15771:18;;;15764:57;15838:18;;46686:67:0::1;15511:351:1::0;46686:67:0::1;46798:4;46768:12;:27;46781:10;;46792:1;46781:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46768:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;46768:27:0;:34;;-1:-1:-1;;46768:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46666:3;::::1;::::0;::::1;:::i;:::-;;;;46623:191;;48942:169:::0;-1:-1:-1;;;;;;;;;;;;;;;;;49082:21:0;49094:8;49082:11;:21::i;29717:98::-;29773:13;29802:7;29795:14;;;;;:::i;44766:945::-;43771:9;43784:10;43771:23;43763:66;;;;-1:-1:-1;;;43763:66:0;;14252:2:1;43763:66:0;;;14234:21:1;14291:2;14271:18;;;14264:30;14330:32;14310:18;;;14303:60;14380:18;;43763:66:0;14050:354:1;43763:66:0;22240:1:::1;22838:7;;:19:::0;22830:63:::1;;;;-1:-1:-1::0;;;22830:63:0::1;;;;;;;:::i;:::-;22240:1;22971:7;:18:::0;44920:15:::2;::::0;::::2;::::0;::::2;;;44919:16;44911:47;;;::::0;-1:-1:-1;;;44911:47:0;;14611:2:1;44911:47:0::2;::::0;::::2;14593:21:1::0;14650:2;14630:18;;;14623:30;-1:-1:-1;;;14669:18:1;;;14662:48;14727:18;;44911:47:0::2;14409:342:1::0;44911:47:0::2;44990:10;44977:24;::::0;;;:12:::2;:24;::::0;;;;;::::2;;44969:60;;;::::0;-1:-1:-1;;;44969:60:0;;16481:2:1;44969:60:0::2;::::0;::::2;16463:21:1::0;16520:2;16500:18;;;16493:30;16559:25;16539:18;;;16532:53;16602:18;;44969:60:0::2;16279:347:1::0;44969:60:0::2;43049:4;45076:9;45050:23;;:35;;;;:::i;:::-;:59;;45042:99;;;::::0;-1:-1:-1;;;45042:99:0;;16833:2:1;45042:99:0::2;::::0;::::2;16815:21:1::0;16872:2;16852:18;;;16845:30;16911:29;16891:18;;;16884:57;16958:18;;45042:99:0::2;16631:351:1::0;45042:99:0::2;45191:10;45160:42;::::0;;;:30:::2;:42;::::0;;;;;43111:2:::2;::::0;45160:54:::2;::::0;45205:9;;45160:54:::2;:::i;:::-;:82;;45152:116;;;::::0;-1:-1:-1;;;45152:116:0;;17189:2:1;45152:116:0::2;::::0;::::2;17171:21:1::0;17228:2;17208:18;;;17201:30;-1:-1:-1;;;17247:18:1;;;17240:51;17308:18;;45152:116:0::2;16987:345:1::0;45152:116:0::2;42939:4;45305:9;45289:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;45281:74;;;;-1:-1:-1::0;;;45281:74:0::2;;;;;;;:::i;:::-;42991:2;45415:9;45388:24;45401:10;45388:12;:24::i;:::-;:36;;;;:::i;:::-;:54;;45366:126;;;::::0;-1:-1:-1;;;45366:126:0;;14958:2:1;45366:126:0::2;::::0;::::2;14940:21:1::0;14997:2;14977:18;;;14970:30;-1:-1:-1;;;15016:18:1;;;15009:52;15078:18;;45366:126:0::2;14756:346:1::0;45366:126:0::2;45536:10;45505:42;::::0;;;:30:::2;:42;::::0;;;;:55;;45551:9;;45505:42;:55:::2;::::0;45551:9;;45505:55:::2;:::i;:::-;;;;;;;;45598:9;45571:23;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;45620:32:0::2;::::0;-1:-1:-1;45630:10:0::2;45642:9:::0;45620::::2;:32::i;:::-;45663:40;45693:9;45676:14;;:26;;;;:::i;:::-;45663:12;:40::i;31355:274::-:0;23946:10;-1:-1:-1;;;;;31446:24:0;;;31438:63;;;;-1:-1:-1;;;31438:63:0;;17712:2:1;31438:63:0;;;17694:21:1;17751:2;17731:18;;;17724:30;17790:28;17770:18;;;17763:56;17836:18;;31438:63:0;17510:350:1;31438:63:0;23946:10;31510:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;31510:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;31510:53:0;;;;;;;;;;31575:48;;540:41:1;;;31510:42:0;;23946:10;31575:48;;513:18:1;31575:48:0;;;;;;;31355:274;;:::o;47655:109::-;43908:10;43901:18;;;;:6;:18;;;;;;;;43893:76;;;;-1:-1:-1;;;43893:76:0;;;;;;;:::i;:::-;47731:15:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;47731:25:0;;::::1;::::0;;;::::1;::::0;;47655:109::o;32362:311::-;32499:28;32509:4;32515:2;32519:7;32499:9;:28::i;:::-;32550:48;32573:4;32579:2;32583:7;32592:5;32550:22;:48::i;:::-;32534:133;;;;-1:-1:-1;;;32534:133:0;;;;;;;:::i;:::-;32362:311;;;;:::o;47330:102::-;43908:10;43901:18;;;;:6;:18;;;;;;;;43893:76;;;;-1:-1:-1;;;43893:76:0;;;;;;;:::i;:::-;47404:11:::1;:20:::0;47330:102::o;42856:37::-;;;;;;;:::i;47888:399::-;47962:13;47996:17;48004:8;32999:12;;-1:-1:-1;32989:22:0;32912:105;47996:17;47988:70;;;;-1:-1:-1;;;47988:70:0;;18487:2:1;47988:70:0;;;18469:21:1;18526:2;18506:18;;;18499:30;18565:34;18545:18;;;18538:62;-1:-1:-1;;;18616:18:1;;;18609:38;18664:19;;47988:70:0;18285:404:1;47988:70:0;48071:28;48102:10;:8;:10::i;:::-;48071:41;;48161:1;48136:14;48130:28;:32;:149;;;;;;;;;;;;;;;;;48202:14;48218:26;48235:8;48218:16;:26::i;:::-;48246:13;48185:75;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48130:149;48123:156;47888:399;-1:-1:-1;;;47888:399:0:o;48411:136::-;43908:10;43901:18;;;;:6;:18;;;;;;;;43893:76;;;;-1:-1:-1;;;43893:76:0;;;;;;;:::i;:::-;48506:33:::1;:13;48522:17:::0;;48506:33:::1;:::i;48819:115::-:0;48878:7;48905:21;48919:6;48905:13;:21::i;43997:118::-;44055:7;44097:9;44083:11;;:23;;;;:::i;42109:201::-;41246:7;41273:6;-1:-1:-1;;;;;41273:6:0;23946:10;41420:23;41412:68;;;;-1:-1:-1;;;41412:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42198:22:0;::::1;42190:73;;;::::0;-1:-1:-1;;;42190:73:0;;20554:2:1;42190:73:0::1;::::0;::::1;20536:21:1::0;20593:2;20573:18;;;20566:30;20632:34;20612:18;;;20605:62;-1:-1:-1;;;20683:18:1;;;20676:36;20729:19;;42190:73:0::1;20352:402:1::0;42190:73:0::1;42274:28;42293:8;42274:18;:28::i;:::-;42109:201:::0;:::o;36599:172::-;36696:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;36696:29:0;-1:-1:-1;;;;;36696:29:0;;;;;;;;;36737:28;;36696:24;;36737:28;;;;;;;36599:172;;;:::o;34964:1529::-;35061:35;35099:20;35111:7;35099:11;:20::i;:::-;35170:18;;35061:58;;-1:-1:-1;35128:22:0;;-1:-1:-1;;;;;35154:34:0;23946:10;-1:-1:-1;;;;;35154:34:0;;:81;;;-1:-1:-1;23946:10:0;35199:20;35211:7;35199:11;:20::i;:::-;-1:-1:-1;;;;;35199:36:0;;35154:81;:142;;;-1:-1:-1;35263:18:0;;35246:50;;23946:10;31692:186;:::i;35246:50::-;35128:169;;35322:17;35306:101;;;;-1:-1:-1;;;35306:101:0;;20961:2:1;35306:101:0;;;20943:21:1;21000:2;20980:18;;;20973:30;21039:34;21019:18;;;21012:62;-1:-1:-1;;;21090:18:1;;;21083:48;21148:19;;35306:101:0;20759:414:1;35306:101:0;35454:4;-1:-1:-1;;;;;35432:26:0;:13;:18;;;-1:-1:-1;;;;;35432:26:0;;35416:98;;;;-1:-1:-1;;;35416:98:0;;21380:2:1;35416:98:0;;;21362:21:1;21419:2;21399:18;;;21392:30;21458:34;21438:18;;;21431:62;-1:-1:-1;;;21509:18:1;;;21502:36;21555:19;;35416:98:0;21178:402:1;35416:98:0;-1:-1:-1;;;;;35529:16:0;;35521:66;;;;-1:-1:-1;;;35521:66:0;;21787:2:1;35521:66:0;;;21769:21:1;21826:2;21806:18;;;21799:30;21865:34;21845:18;;;21838:62;-1:-1:-1;;;21916:18:1;;;21909:35;21961:19;;35521:66:0;21585:401:1;35521:66:0;35696:49;35713:1;35717:7;35726:13;:18;;;35696:8;:49::i;:::-;-1:-1:-1;;;;;35754:18:0;;;;;;:12;:18;;;;;:31;;35784:1;;35754:18;:31;;35784:1;;-1:-1:-1;;;;;35754:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;35754:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35792:16:0;;-1:-1:-1;35792:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;35792:16:0;;:29;;-1:-1:-1;;35792:29:0;;:::i;:::-;;;-1:-1:-1;;;;;35792:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35851:43:0;;;;;;;;-1:-1:-1;;;;;35851:43:0;;;;;-1:-1:-1;;;;;35877:15:0;35851:43;;;;;;;;;-1:-1:-1;35828:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;35828:66:0;-1:-1:-1;;;;;;35828:66:0;;;;;;;;;;;36144:11;35840:7;-1:-1:-1;36144:11:0;:::i;:::-;36207:1;36166:24;;;:11;:24;;;;;:29;36122:33;;-1:-1:-1;;;;;;36166:29:0;36162:236;;36224:20;36232:11;32999:12;;-1:-1:-1;32989:22:0;32912:105;36224:20;36220:171;;;36284:97;;;;;;;;36311:18;;-1:-1:-1;;;;;36284:97:0;;;;;;36342:28;;;;-1:-1:-1;;;;;36284:97:0;;;;;;;;;-1:-1:-1;36257:24:0;;;:11;:24;;;;;;;:124;;;;;;;;;-1:-1:-1;;;36257:124:0;-1:-1:-1;;;;;;36257:124:0;;;;;;;;;;;;36220:171;36430:7;36426:2;-1:-1:-1;;;;;36411:27:0;36420:4;-1:-1:-1;;;;;36411:27:0;;;;;;;;;;;36445:42;35054:1439;;;34964:1529;;;:::o;33023:98::-;33088:27;33098:2;33102:8;33088:27;;;;;;;;;;;;:9;:27::i;45719:227::-;45797:6;45784:9;:19;;45776:53;;;;-1:-1:-1;;;45776:53:0;;22702:2:1;45776:53:0;;;22684:21:1;22741:2;22721:18;;;22714:30;-1:-1:-1;;;22760:18:1;;;22753:51;22821:18;;45776:53:0;22500:345:1;45776:53:0;45856:6;45844:9;:18;45840:99;;;45887:10;45879:48;45908:18;45920:6;45908:9;:18;:::i;:::-;45879:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28725:606;-1:-1:-1;;;;;;;;;;;;;;;;;28842:16:0;28850:7;32999:12;;-1:-1:-1;32989:22:0;32912:105;28842:16;28834:71;;;;-1:-1:-1;;;28834:71:0;;23052:2:1;28834:71:0;;;23034:21:1;23091:2;23071:18;;;23064:30;23130:34;23110:18;;;23103:62;-1:-1:-1;;;23181:18:1;;;23174:40;23231:19;;28834:71:0;22850:406:1;28834:71:0;28914:26;28962:12;28951:7;:23;28947:93;;29006:22;29016:12;29006:7;:22;:::i;:::-;:26;;29031:1;29006:26;:::i;:::-;28985:47;;28947:93;29068:7;29048:212;29085:18;29077:4;:26;29048:212;;29122:31;29156:17;;;:11;:17;;;;;;;;;29122:51;;;;;;;;;-1:-1:-1;;;;;29122:51:0;;;;;-1:-1:-1;;;29122:51:0;;;-1:-1:-1;;;;;29122:51:0;;;;;;;;29186:28;29182:71;;29234:9;28725:606;-1:-1:-1;;;;28725:606:0:o;29182:71::-;-1:-1:-1;29105:6:0;;;;:::i;:::-;;;;29048:212;;;-1:-1:-1;29268:57:0;;-1:-1:-1;;;29268:57:0;;23604:2:1;29268:57:0;;;23586:21:1;23643:2;23623:18;;;23616:30;23682:34;23662:18;;;23655:62;-1:-1:-1;;;23733:18:1;;;23726:45;23788:19;;29268:57:0;23402:411:1;42470:191:0;42544:16;42563:6;;-1:-1:-1;;;;;42580:17:0;;;-1:-1:-1;;;;;;42580:17:0;;;;;;42613:40;;42563:6;;;;;;;42613:40;;42544:16;42613:40;42533:128;42470:191;:::o;38314:690::-;38451:4;-1:-1:-1;;;;;38468:13:0;;1559:19;:23;38464:535;;38507:72;;-1:-1:-1;;;38507:72:0;;-1:-1:-1;;;;;38507:36:0;;;;;:72;;23946:10;;38558:4;;38564:7;;38573:5;;38507:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38507:72:0;;;;;;;;-1:-1:-1;;38507:72:0;;;;;;;;;;;;:::i;:::-;;;38494:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38738:6;:13;38755:1;38738:18;38734:215;;38771:61;;-1:-1:-1;;;38771:61:0;;;;;;;:::i;38734:215::-;38917:6;38911:13;38902:6;38898:2;38894:15;38887:38;38494:464;-1:-1:-1;;;;;;38629:55:0;-1:-1:-1;;;38629:55:0;;-1:-1:-1;38622:62:0;;38464:535;-1:-1:-1;38987:4:0;38464:535;38314:690;;;;;;:::o;47772:108::-;47832:13;47865:7;47858:14;;;;;:::i;18669:723::-;18725:13;18946:5;18955:1;18946:10;18942:53;;-1:-1:-1;;18973:10:0;;;;;;;;;;;;-1:-1:-1;;;18973:10:0;;;;;18669:723::o;18942:53::-;19020:5;19005:12;19061:78;19068:9;;19061:78;;19094:8;;;;:::i;:::-;;-1:-1:-1;19117:10:0;;-1:-1:-1;19125:2:0;19117:10;;:::i;:::-;;;19061:78;;;19149:19;19181:6;-1:-1:-1;;;;;19171:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19171:17:0;;19149:39;;19199:154;19206:10;;19199:154;;19233:11;19243:1;19233:11;;:::i;:::-;;-1:-1:-1;19302:10:0;19310:2;19302:5;:10;:::i;:::-;19289:24;;:2;:24;:::i;:::-;19276:39;;19259:6;19266;19259:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;19259:56:0;;;;;;;;-1:-1:-1;19330:11:0;19339:2;19330:11;;:::i;:::-;;;19199:154;;28479:240;28540:7;-1:-1:-1;;;;;28572:19:0;;28556:102;;;;-1:-1:-1;;;28556:102:0;;25142:2:1;28556:102:0;;;25124:21:1;25181:2;25161:18;;;25154:30;25220:34;25200:18;;;25193:62;-1:-1:-1;;;25271:18:1;;;25264:47;25328:19;;28556:102:0;24940:413:1;28556:102:0;-1:-1:-1;;;;;;28680:19:0;;;;;:12;:19;;;;;:32;-1:-1:-1;;;28680:32:0;;-1:-1:-1;;;;;28680:32:0;;28479:240::o;33460:1272::-;33588:12;;-1:-1:-1;;;;;33615:16:0;;33607:62;;;;-1:-1:-1;;;33607:62:0;;25560:2:1;33607:62:0;;;25542:21:1;25599:2;25579:18;;;25572:30;25638:34;25618:18;;;25611:62;-1:-1:-1;;;25689:18:1;;;25682:31;25730:19;;33607:62:0;25358:397:1;33607:62:0;33806:21;33814:12;32999;;-1:-1:-1;32989:22:0;32912:105;33806:21;33805:22;33797:64;;;;-1:-1:-1;;;33797:64:0;;25962:2:1;33797:64:0;;;25944:21:1;26001:2;25981:18;;;25974:30;26040:31;26020:18;;;26013:59;26089:18;;33797:64:0;25760:353:1;33797:64:0;33888:12;33876:8;:24;;33868:71;;;;-1:-1:-1;;;33868:71:0;;26320:2:1;33868:71:0;;;26302:21:1;26359:2;26339:18;;;26332:30;26398:34;26378:18;;;26371:62;-1:-1:-1;;;26449:18:1;;;26442:32;26491:19;;33868:71:0;26118:398:1;33868:71:0;-1:-1:-1;;;;;34051:16:0;;34018:30;34051:16;;;:12;:16;;;;;;;;;34018:49;;;;;;;;;-1:-1:-1;;;;;34018:49:0;;;;;-1:-1:-1;;;34018:49:0;;;;;;;;;;;34093:119;;;;;;;;34113:19;;34018:49;;34093:119;;;34113:39;;34143:8;;34113:39;:::i;:::-;-1:-1:-1;;;;;34093:119:0;;;;;34196:8;34161:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;34093:119:0;;;;;;-1:-1:-1;;;;;34074:16:0;;;;;;;:12;:16;;;;;;;;:138;;;;;;;;-1:-1:-1;;;34074:138:0;;;;;;;;;;;;34247:43;;;;;;;;;;-1:-1:-1;;;;;34273:15:0;34247:43;;;;;;;;34219:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;34219:71:0;-1:-1:-1;;;;;;34219:71:0;;;;;;;;;;;;;;;;;;34231:12;;34343:281;34367:8;34363:1;:12;34343:281;;;34396:38;;34421:12;;-1:-1:-1;;;;;34396:38:0;;;34413:1;;34396:38;;34413:1;;34396:38;34461:59;34492:1;34496:2;34500:12;34514:5;34461:22;:59::i;:::-;34443:150;;;;-1:-1:-1;;;34443:150:0;;;;;;;:::i;:::-;34602:14;;;;:::i;:::-;;;;34377:3;;;;;:::i;:::-;;;;34343:281;;;-1:-1:-1;34632:12:0;:27;;;34666:60;32362:311;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2355:160::-;2420:20;;2476:13;;2469:21;2459:32;;2449:60;;2505:1;2502;2495:12;2520:180;2576:6;2629:2;2617:9;2608:7;2604:23;2600:32;2597:52;;;2645:1;2642;2635:12;2597:52;2668:26;2684:9;2668:26;:::i;2705:186::-;2764:6;2817:2;2805:9;2796:7;2792:23;2788:32;2785:52;;;2833:1;2830;2823:12;2785:52;2856:29;2875:9;2856:29;:::i;2896:328::-;2973:6;2981;2989;3042:2;3030:9;3021:7;3017:23;3013:32;3010:52;;;3058:1;3055;3048:12;3010:52;3081:29;3100:9;3081:29;:::i;:::-;3071:39;;3129:38;3163:2;3152:9;3148:18;3129:38;:::i;:::-;3119:48;;3214:2;3203:9;3199:18;3186:32;3176:42;;2896:328;;;;;:::o;3229:367::-;3292:8;3302:6;3356:3;3349:4;3341:6;3337:17;3333:27;3323:55;;3374:1;3371;3364:12;3323:55;-1:-1:-1;3397:20:1;;-1:-1:-1;;;;;3429:30:1;;3426:50;;;3472:1;3469;3462:12;3426:50;3509:4;3501:6;3497:17;3485:29;;3569:3;3562:4;3552:6;3549:1;3545:14;3537:6;3533:27;3529:38;3526:47;3523:67;;;3586:1;3583;3576:12;3523:67;3229:367;;;;;:::o;3601:773::-;3723:6;3731;3739;3747;3800:2;3788:9;3779:7;3775:23;3771:32;3768:52;;;3816:1;3813;3806:12;3768:52;3856:9;3843:23;-1:-1:-1;;;;;3926:2:1;3918:6;3915:14;3912:34;;;3942:1;3939;3932:12;3912:34;3981:70;4043:7;4034:6;4023:9;4019:22;3981:70;:::i;:::-;4070:8;;-1:-1:-1;3955:96:1;-1:-1:-1;4158:2:1;4143:18;;4130:32;;-1:-1:-1;4174:16:1;;;4171:36;;;4203:1;4200;4193:12;4171:36;;4242:72;4306:7;4295:8;4284:9;4280:24;4242:72;:::i;:::-;3601:773;;;;-1:-1:-1;4333:8:1;-1:-1:-1;;;;3601:773:1:o;4379:437::-;4465:6;4473;4526:2;4514:9;4505:7;4501:23;4497:32;4494:52;;;4542:1;4539;4532:12;4494:52;4582:9;4569:23;-1:-1:-1;;;;;4607:6:1;4604:30;4601:50;;;4647:1;4644;4637:12;4601:50;4686:70;4748:7;4739:6;4728:9;4724:22;4686:70;:::i;:::-;4775:8;;4660:96;;-1:-1:-1;4379:437:1;-1:-1:-1;;;;4379:437:1:o;4821:127::-;4882:10;4877:3;4873:20;4870:1;4863:31;4913:4;4910:1;4903:15;4937:4;4934:1;4927:15;4953:632;5018:5;-1:-1:-1;;;;;5089:2:1;5081:6;5078:14;5075:40;;;5095:18;;:::i;:::-;5170:2;5164:9;5138:2;5224:15;;-1:-1:-1;;5220:24:1;;;5246:2;5216:33;5212:42;5200:55;;;5270:18;;;5290:22;;;5267:46;5264:72;;;5316:18;;:::i;:::-;5356:10;5352:2;5345:22;5385:6;5376:15;;5415:6;5407;5400:22;5455:3;5446:6;5441:3;5437:16;5434:25;5431:45;;;5472:1;5469;5462:12;5431:45;5522:6;5517:3;5510:4;5502:6;5498:17;5485:44;5577:1;5570:4;5561:6;5553;5549:19;5545:30;5538:41;;;;4953:632;;;;;:::o;5590:451::-;5659:6;5712:2;5700:9;5691:7;5687:23;5683:32;5680:52;;;5728:1;5725;5718:12;5680:52;5768:9;5755:23;-1:-1:-1;;;;;5793:6:1;5790:30;5787:50;;;5833:1;5830;5823:12;5787:50;5856:22;;5909:4;5901:13;;5897:27;-1:-1:-1;5887:55:1;;5938:1;5935;5928:12;5887:55;5961:74;6027:7;6022:2;6009:16;6004:2;6000;5996:11;5961:74;:::i;6411:254::-;6476:6;6484;6537:2;6525:9;6516:7;6512:23;6508:32;6505:52;;;6553:1;6550;6543:12;6505:52;6576:29;6595:9;6576:29;:::i;:::-;6566:39;;6624:35;6655:2;6644:9;6640:18;6624:35;:::i;:::-;6614:45;;6411:254;;;;;:::o;6670:667::-;6765:6;6773;6781;6789;6842:3;6830:9;6821:7;6817:23;6813:33;6810:53;;;6859:1;6856;6849:12;6810:53;6882:29;6901:9;6882:29;:::i;:::-;6872:39;;6930:38;6964:2;6953:9;6949:18;6930:38;:::i;:::-;6920:48;;7015:2;7004:9;7000:18;6987:32;6977:42;;7070:2;7059:9;7055:18;7042:32;-1:-1:-1;;;;;7089:6:1;7086:30;7083:50;;;7129:1;7126;7119:12;7083:50;7152:22;;7205:4;7197:13;;7193:27;-1:-1:-1;7183:55:1;;7234:1;7231;7224:12;7183:55;7257:74;7323:7;7318:2;7305:16;7300:2;7296;7292:11;7257:74;:::i;:::-;7247:84;;;6670:667;;;;;;;:::o;7342:592::-;7413:6;7421;7474:2;7462:9;7453:7;7449:23;7445:32;7442:52;;;7490:1;7487;7480:12;7442:52;7530:9;7517:23;-1:-1:-1;;;;;7600:2:1;7592:6;7589:14;7586:34;;;7616:1;7613;7606:12;7586:34;7654:6;7643:9;7639:22;7629:32;;7699:7;7692:4;7688:2;7684:13;7680:27;7670:55;;7721:1;7718;7711:12;7670:55;7761:2;7748:16;7787:2;7779:6;7776:14;7773:34;;;7803:1;7800;7793:12;7773:34;7848:7;7843:2;7834:6;7830:2;7826:15;7822:24;7819:37;7816:57;;;7869:1;7866;7859:12;7816:57;7900:2;7892:11;;;;;7922:6;;-1:-1:-1;7342:592:1;;-1:-1:-1;;;;7342:592:1:o;7939:260::-;8007:6;8015;8068:2;8056:9;8047:7;8043:23;8039:32;8036:52;;;8084:1;8081;8074:12;8036:52;8107:29;8126:9;8107:29;:::i;:::-;8097:39;;8155:38;8189:2;8178:9;8174:18;8155:38;:::i;8204:380::-;8283:1;8279:12;;;;8326;;;8347:61;;8401:4;8393:6;8389:17;8379:27;;8347:61;8454:2;8446:6;8443:14;8423:18;8420:38;8417:161;;8500:10;8495:3;8491:20;8488:1;8481:31;8535:4;8532:1;8525:15;8563:4;8560:1;8553:15;8417:161;;8204:380;;;:::o;9832:409::-;10034:2;10016:21;;;10073:2;10053:18;;;10046:30;10112:34;10107:2;10092:18;;10085:62;-1:-1:-1;;;10178:2:1;10163:18;;10156:43;10231:3;10216:19;;9832:409::o;10246:356::-;10448:2;10430:21;;;10467:18;;;10460:30;10526:34;10521:2;10506:18;;10499:62;10593:2;10578:18;;10246:356::o;10607:127::-;10668:10;10663:3;10659:20;10656:1;10649:31;10699:4;10696:1;10689:15;10723:4;10720:1;10713:15;10739:125;10779:4;10807:1;10804;10801:8;10798:34;;;10812:18;;:::i;:::-;-1:-1:-1;10849:9:1;;10739:125::o;10869:355::-;11071:2;11053:21;;;11110:2;11090:18;;;11083:30;11149:33;11144:2;11129:18;;11122:61;11215:2;11200:18;;10869:355::o;11571:127::-;11632:10;11627:3;11623:20;11620:1;11613:31;11663:4;11660:1;11653:15;11687:4;11684:1;11677:15;11703:128;11743:3;11774:1;11770:6;11767:1;11764:13;11761:39;;;11780:18;;:::i;:::-;-1:-1:-1;11816:9:1;;11703:128::o;11836:346::-;12038:2;12020:21;;;12077:2;12057:18;;;12050:30;-1:-1:-1;;;12111:2:1;12096:18;;12089:52;12173:2;12158:18;;11836:346::o;12187:135::-;12226:3;12247:17;;;12244:43;;12267:18;;:::i;:::-;-1:-1:-1;12314:1:1;12303:13;;12187:135::o;17337:168::-;17377:7;17443:1;17439;17435:6;17431:14;17428:1;17425:21;17420:1;17413:9;17406:17;17402:45;17399:71;;;17450:18;;:::i;:::-;-1:-1:-1;17490:9:1;;17337:168::o;17865:415::-;18067:2;18049:21;;;18106:2;18086:18;;;18079:30;18145:34;18140:2;18125:18;;18118:62;-1:-1:-1;;;18211:2:1;18196:18;;18189:49;18270:3;18255:19;;17865:415::o;18820:1527::-;19044:3;19082:6;19076:13;19108:4;19121:51;19165:6;19160:3;19155:2;19147:6;19143:15;19121:51;:::i;:::-;19235:13;;19194:16;;;;19257:55;19235:13;19194:16;19279:15;;;19257:55;:::i;:::-;19401:13;;19334:20;;;19374:1;;19461;19483:18;;;;19536;;;;19563:93;;19641:4;19631:8;19627:19;19615:31;;19563:93;19704:2;19694:8;19691:16;19671:18;19668:40;19665:167;;-1:-1:-1;;;19731:33:1;;19787:4;19784:1;19777:15;19817:4;19738:3;19805:17;19665:167;19848:18;19875:110;;;;19999:1;19994:328;;;;19841:481;;19875:110;-1:-1:-1;;19910:24:1;;19896:39;;19955:20;;;;-1:-1:-1;19875:110:1;;19994:328;18767:1;18760:14;;;18804:4;18791:18;;20089:1;20103:169;20117:8;20114:1;20111:15;20103:169;;;20199:14;;20184:13;;;20177:37;20242:16;;;;20134:10;;20103:169;;;20107:3;;20303:8;20296:5;20292:20;20285:27;;19841:481;-1:-1:-1;20338:3:1;;18820:1527;-1:-1:-1;;;;;;;;;;;18820:1527:1:o;21991:246::-;22031:4;-1:-1:-1;;;;;22144:10:1;;;;22114;;22166:12;;;22163:38;;;22181:18;;:::i;:::-;22218:13;;21991:246;-1:-1:-1;;;21991:246:1:o;22242:253::-;22282:3;-1:-1:-1;;;;;22371:2:1;22368:1;22364:10;22401:2;22398:1;22394:10;22432:3;22428:2;22424:12;22419:3;22416:21;22413:47;;;22440:18;;:::i;:::-;22476:13;;22242:253;-1:-1:-1;;;;22242:253:1:o;23261:136::-;23300:3;23328:5;23318:39;;23337:18;;:::i;:::-;-1:-1:-1;;;23373:18:1;;23261:136::o;23818:489::-;-1:-1:-1;;;;;24087:15:1;;;24069:34;;24139:15;;24134:2;24119:18;;24112:43;24186:2;24171:18;;24164:34;;;24234:3;24229:2;24214:18;;24207:31;;;24012:4;;24255:46;;24281:19;;24273:6;24255:46;:::i;:::-;24247:54;23818:489;-1:-1:-1;;;;;;23818:489:1:o;24312:249::-;24381:6;24434:2;24422:9;24413:7;24409:23;24405:32;24402:52;;;24450:1;24447;24440:12;24402:52;24482:9;24476:16;24501:30;24525:5;24501:30;:::i;24566:127::-;24627:10;24622:3;24618:20;24615:1;24608:31;24658:4;24655:1;24648:15;24682:4;24679:1;24672:15;24698:120;24738:1;24764;24754:35;;24769:18;;:::i;:::-;-1:-1:-1;24803:9:1;;24698:120::o;24823:112::-;24855:1;24881;24871:35;;24886:18;;:::i;:::-;-1:-1:-1;24920:9:1;;24823:112::o
Swarm Source
ipfs://632521f31086abc2011584df8d4456b579eb3af71c6416bd8fa749a64e14eeb1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.