ETH Price: $3,024.66 (+3.19%)
Gas: 1 Gwei

Token

Uchi Collector Pass (UCP)
 

Overview

Max Total Supply

163 UCP

Holders

91

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 UCP
0xb84b866a8159ae58a665fd847be3d98ba6bcb5fc
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
UchiCollectorPass

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-14
*/

// File: contracts/UchiCollectorPass.sol




// File: @openzeppelin/contracts/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/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
pragma solidity ^0.8.0;
/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
pragma solidity ^0.8.0;
/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol



pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (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/extensions/IERC721Metadata.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol



pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/Context.sol
pragma solidity ^0.8.0;
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
pragma solidity ^0.8.0;
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol



pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.8.0;
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity >=0.8.17 <0.9.0;

contract UchiCollectorPass is ERC721Enumerable, Ownable {
  using Strings for uint256;

  string public baseURI;
  string public baseExtension = ".json";
  string public notRevealedUri;
  uint256 public cost = 0.01 ether;
  uint256 public maxSupply = 1000;
  uint256 public maxMintAmount = 2;
  uint256 public nftPerAddressLimit = 2;
  bool public paused = true;
  bool public revealed = true;
  bool public onlyWhitelisted = true;
  address[] public whitelistedAddresses;
  mapping(address => uint256) public addressMintedBalance;

   constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI
    //string memory _initNotRevealedUri
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    //setNotRevealedURI(_initNotRevealedUri);
     uint256 supply2 = totalSupply();
     for (uint256 i = 1; i <= 10; i++)
     {
        _mint(owner(), supply2 + i);
     }
  }

  // internal
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  // public
  function mint(uint256 _mintAmount) public payable {
    require(!paused, "the contract is paused");
    uint256 supply = totalSupply();
    require(_mintAmount > 0, "need to mint at least 1 NFT");
    require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded");
    require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");

    if (msg.sender != owner()) {
        if(onlyWhitelisted == true) {
            require(isWhitelisted(msg.sender), "user is not whitelisted");
            uint256 ownerMintedCount = addressMintedBalance[msg.sender];
            require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded");
        }
        require(msg.value >= cost * _mintAmount, "insufficient funds");
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      addressMintedBalance[msg.sender]++;
      _safeMint(msg.sender, supply + i);
    }
  }
  
 function MassAirdrop(address[] calldata receivers) external onlyOwner {
      uint256 supply = totalSupply();
    for (uint256 i; i < receivers.length; ++i) {
      require(supply + 1 <= maxSupply, "Max supply exceeded!");
      _mint(receivers[i], 1);
    }
  }


  function isWhitelisted(address _user) public view returns (bool) {
    for (uint i = 0; i < whitelistedAddresses.length; i++) {
      if (whitelistedAddresses[i] == _user) {
          return true;
      }
    }
    return false;
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
  }

  //only owner
  function reveal() public onlyOwner {
      revealed = true;
  }
  
  function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
    nftPerAddressLimit = _limit;
  }
  
  function setCost(uint256 _newCost) public onlyOwner {
    cost = _newCost;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
    maxMintAmount = _newmaxMintAmount;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }
  
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
  
  function setOnlyWhitelisted(bool _state) public onlyOwner {
    onlyWhitelisted = _state;
  }
  
  function whitelistUsers(address[] calldata _users) public onlyOwner {
    delete whitelistedAddresses;
    whitelistedAddresses = _users;
  }
 
  function withdraw() public payable onlyOwner {

    // =============================================================================
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"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":[{"internalType":"address[]","name":"receivers","type":"address[]"}],"name":"MassAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","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":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60c06040526005608090815264173539b7b760d91b60a052600c9062000026908262000711565b50662386f26fc10000600e556103e8600f55600260108190556011556012805462ffffff1916620101011790553480156200006057600080fd5b50604051620034fb380380620034fb83398101604081905262000083916200088c565b8282600062000093838262000711565b506001620000a2828262000711565b505050620000bf620000b96200012d60201b60201c565b62000131565b620000ca8162000183565b6000620000d660085490565b905060015b600a811162000122576200010d620000fb600a546001600160a01b031690565b62000107838562000933565b620001f5565b8062000119816200094f565b915050620000db565b5050505050620009ad565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600b620001f1828262000711565b5050565b6001600160a01b0382166200024d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401620001da565b6000818152600260205260409020546001600160a01b031615620002b45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401620001da565b620002c2600083836200034b565b6001600160a01b0382166000908152600360205260408120805460019290620002ed90849062000933565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b620003638383836200040160201b62000b571760201c565b6001600160a01b038316620003c157620003bb81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b620003e7565b816001600160a01b0316836001600160a01b031614620003e757620003e783826200042c565b6001600160a01b03821662000406576200040181620004d9565b505050565b826001600160a01b0316826001600160a01b031614620004015762000401828262000593565b600060016200044684620005e460201b620010891760201c565b6200045291906200096b565b600083815260076020526040902054909150808214620004a6576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090620004ed906001906200096b565b6000838152600960205260408120546008805493945090928490811062000518576200051862000981565b9060005260206000200154905080600883815481106200053c576200053c62000981565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548062000577576200057762000997565b6001900381819060005260206000200160009055905550505050565b6000620005ab83620005e460201b620010891760201c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60006001600160a01b038216620006515760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401620001da565b506001600160a01b031660009081526003602052604090205490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200069857607f821691505b602082108103620006b957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200040157600081815260208120601f850160051c81016020861015620006e85750805b601f850160051c820191505b818110156200070957828155600101620006f4565b505050505050565b81516001600160401b038111156200072d576200072d6200066d565b62000745816200073e845462000683565b84620006bf565b602080601f8311600181146200077d5760008415620007645750858301515b600019600386901b1c1916600185901b17855562000709565b600085815260208120601f198616915b82811015620007ae578886015182559484019460019091019084016200078d565b5085821015620007cd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f830112620007ef57600080fd5b81516001600160401b03808211156200080c576200080c6200066d565b604051601f8301601f19908116603f011681019082821181831017156200083757620008376200066d565b816040528381526020925086838588010111156200085457600080fd5b600091505b8382101562000878578582018301518183018401529082019062000859565b600093810190920192909252949350505050565b600080600060608486031215620008a257600080fd5b83516001600160401b0380821115620008ba57600080fd5b620008c887838801620007dd565b94506020860151915080821115620008df57600080fd5b620008ed87838801620007dd565b935060408601519150808211156200090457600080fd5b506200091386828701620007dd565b9150509250925092565b634e487b7160e01b600052601160045260246000fd5b808201808211156200094957620009496200091d565b92915050565b6000600182016200096457620009646200091d565b5060010190565b818103818111156200094957620009496200091d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b612b3e80620009bd6000396000f3fe60806040526004361061027d5760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb0114610742578063da3ef23f14610758578063e985e9c514610778578063edec5f27146107c1578063f2c4ce1e146107e1578063f2fde38b1461080157600080fd5b8063b88d4fde14610697578063ba4e5c49146106b7578063ba7d2c76146106d7578063c6682862146106ed578063c87b56dd14610702578063d0eb26b01461072257600080fd5b80638da5cb5b116101135780638da5cb5b146105fc57806395d89b411461061a5780639c70b5121461062f578063a0712d681461064f578063a22cb46514610662578063a475b5dd1461068257600080fd5b80636352211e146105725780636c0360eb1461059257806370a08231146105a7578063715018a6146105c75780637f00c7a6146105dc57600080fd5b80632f745c59116101f357806344a0d68a116101ac57806344a0d68a146104b957806347d9569e146104d95780634f6ccce7146104f9578063518302271461051957806355f804b3146105385780635c975abb1461055857600080fd5b80632f745c59146104045780633af32abf146104245780633c952764146104445780633ccfd60b1461046457806342842e0e1461046c578063438b63001461048c57600080fd5b8063095ea7b311610245578063095ea7b31461034857806313faede61461036857806318160ddd1461038c57806318cae269146103a1578063239c70ae146103ce57806323b872dd146103e457600080fd5b806301ffc9a71461028257806302329a29146102b757806306fdde03146102d9578063081812fc146102fb578063081c8c4414610333575b600080fd5b34801561028e57600080fd5b506102a261029d366004612350565b610821565b60405190151581526020015b60405180910390f35b3480156102c357600080fd5b506102d76102d2366004612382565b61084c565b005b3480156102e557600080fd5b506102ee610892565b6040516102ae91906123ed565b34801561030757600080fd5b5061031b610316366004612400565b610924565b6040516001600160a01b0390911681526020016102ae565b34801561033f57600080fd5b506102ee6109b9565b34801561035457600080fd5b506102d7610363366004612430565b610a47565b34801561037457600080fd5b5061037e600e5481565b6040519081526020016102ae565b34801561039857600080fd5b5060085461037e565b3480156103ad57600080fd5b5061037e6103bc36600461245a565b60146020526000908152604090205481565b3480156103da57600080fd5b5061037e60105481565b3480156103f057600080fd5b506102d76103ff366004612475565b610b5c565b34801561041057600080fd5b5061037e61041f366004612430565b610b8d565b34801561043057600080fd5b506102a261043f36600461245a565b610c23565b34801561045057600080fd5b506102d761045f366004612382565b610c8c565b6102d7610cd2565b34801561047857600080fd5b506102d7610487366004612475565b610d70565b34801561049857600080fd5b506104ac6104a736600461245a565b610d8b565b6040516102ae91906124b1565b3480156104c557600080fd5b506102d76104d4366004612400565b610e2d565b3480156104e557600080fd5b506102d76104f43660046124f5565b610e5c565b34801561050557600080fd5b5061037e610514366004612400565b610f38565b34801561052557600080fd5b506012546102a290610100900460ff1681565b34801561054457600080fd5b506102d76105533660046125f6565b610fcb565b34801561056457600080fd5b506012546102a29060ff1681565b34801561057e57600080fd5b5061031b61058d366004612400565b611005565b34801561059e57600080fd5b506102ee61107c565b3480156105b357600080fd5b5061037e6105c236600461245a565b611089565b3480156105d357600080fd5b506102d7611110565b3480156105e857600080fd5b506102d76105f7366004612400565b611146565b34801561060857600080fd5b50600a546001600160a01b031661031b565b34801561062657600080fd5b506102ee611175565b34801561063b57600080fd5b506012546102a29062010000900460ff1681565b6102d761065d366004612400565b611184565b34801561066e57600080fd5b506102d761067d36600461263f565b61146a565b34801561068e57600080fd5b506102d761152e565b3480156106a357600080fd5b506102d76106b2366004612672565b611569565b3480156106c357600080fd5b5061031b6106d2366004612400565b61159b565b3480156106e357600080fd5b5061037e60115481565b3480156106f957600080fd5b506102ee6115c5565b34801561070e57600080fd5b506102ee61071d366004612400565b6115d2565b34801561072e57600080fd5b506102d761073d366004612400565b611756565b34801561074e57600080fd5b5061037e600f5481565b34801561076457600080fd5b506102d76107733660046125f6565b611785565b34801561078457600080fd5b506102a26107933660046126ee565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107cd57600080fd5b506102d76107dc3660046124f5565b6117bb565b3480156107ed57600080fd5b506102d76107fc3660046125f6565b6117fd565b34801561080d57600080fd5b506102d761081c36600461245a565b611833565b60006001600160e01b0319821663780e9d6360e01b14806108465750610846826118cb565b92915050565b600a546001600160a01b0316331461087f5760405162461bcd60e51b815260040161087690612718565b60405180910390fd5b6012805460ff1916911515919091179055565b6060600080546108a19061274d565b80601f01602080910402602001604051908101604052809291908181526020018280546108cd9061274d565b801561091a5780601f106108ef5761010080835404028352916020019161091a565b820191906000526020600020905b8154815290600101906020018083116108fd57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661099d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610876565b506000908152600460205260409020546001600160a01b031690565b600d80546109c69061274d565b80601f01602080910402602001604051908101604052809291908181526020018280546109f29061274d565b8015610a3f5780601f10610a1457610100808354040283529160200191610a3f565b820191906000526020600020905b815481529060010190602001808311610a2257829003601f168201915b505050505081565b6000610a5282611005565b9050806001600160a01b0316836001600160a01b031603610abf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610876565b336001600160a01b0382161480610adb5750610adb8133610793565b610b4d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610876565b610b57838361191b565b505050565b610b663382611989565b610b825760405162461bcd60e51b815260040161087690612787565b610b57838383611a80565b6000610b9883611089565b8210610bfa5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610876565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000805b601354811015610c8357826001600160a01b031660138281548110610c4e57610c4e6127d8565b6000918252602090912001546001600160a01b031603610c715750600192915050565b80610c7b81612804565b915050610c27565b50600092915050565b600a546001600160a01b03163314610cb65760405162461bcd60e51b815260040161087690612718565b60128054911515620100000262ff000019909216919091179055565b600a546001600160a01b03163314610cfc5760405162461bcd60e51b815260040161087690612718565b6000610d10600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610d5a576040519150601f19603f3d011682016040523d82523d6000602084013e610d5f565b606091505b5050905080610d6d57600080fd5b50565b610b5783838360405180602001604052806000815250611569565b60606000610d9883611089565b905060008167ffffffffffffffff811115610db557610db561256a565b604051908082528060200260200182016040528015610dde578160200160208202803683370190505b50905060005b82811015610e2557610df68582610b8d565b828281518110610e0857610e086127d8565b602090810291909101015280610e1d81612804565b915050610de4565b509392505050565b600a546001600160a01b03163314610e575760405162461bcd60e51b815260040161087690612718565b600e55565b600a546001600160a01b03163314610e865760405162461bcd60e51b815260040161087690612718565b6000610e9160085490565b905060005b82811015610f3257600f54610eac83600161281d565b1115610ef15760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610876565b610f22848483818110610f0657610f066127d8565b9050602002016020810190610f1b919061245a565b6001611c2b565b610f2b81612804565b9050610e96565b50505050565b6000610f4360085490565b8210610fa65760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610876565b60088281548110610fb957610fb96127d8565b90600052602060002001549050919050565b600a546001600160a01b03163314610ff55760405162461bcd60e51b815260040161087690612718565b600b611001828261287e565b5050565b6000818152600260205260408120546001600160a01b0316806108465760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610876565b600b80546109c69061274d565b60006001600160a01b0382166110f45760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610876565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461113a5760405162461bcd60e51b815260040161087690612718565b6111446000611d79565b565b600a546001600160a01b031633146111705760405162461bcd60e51b815260040161087690612718565b601055565b6060600180546108a19061274d565b60125460ff16156111d05760405162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610876565b60006111db60085490565b90506000821161122d5760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610876565b60105482111561128b5760405162461bcd60e51b8152602060048201526024808201527f6d6178206d696e7420616d6f756e74207065722073657373696f6e20657863656044820152631959195960e21b6064820152608401610876565b600f54611298838361281d565b11156112df5760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610876565b600a546001600160a01b0316331461141a5760125462010000900460ff1615156001036113c85761130f33610c23565b61135b5760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610876565b33600090815260146020526040902054601154611378848361281d565b11156113c65760405162461bcd60e51b815260206004820152601c60248201527f6d6178204e4654207065722061646472657373206578636565646564000000006044820152606401610876565b505b81600e546113d6919061293e565b34101561141a5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610876565b60015b828111610b575733600090815260146020526040812080549161143f83612804565b90915550611458905033611453838561281d565b611dcb565b8061146281612804565b91505061141d565b336001600160a01b038316036114c25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610876565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146115585760405162461bcd60e51b815260040161087690612718565b6012805461ff001916610100179055565b6115733383611989565b61158f5760405162461bcd60e51b815260040161087690612787565b610f3284848484611de5565b601381815481106115ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b600c80546109c69061274d565b6000818152600260205260409020546060906001600160a01b03166116515760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610876565b601254610100900460ff1615156000036116f757600d80546116729061274d565b80601f016020809104026020016040519081016040528092919081815260200182805461169e9061274d565b80156116eb5780601f106116c0576101008083540402835291602001916116eb565b820191906000526020600020905b8154815290600101906020018083116116ce57829003601f168201915b50505050509050919050565b6000611701611e18565b90506000815111611721576040518060200160405280600081525061174f565b8061172b84611e27565b600c60405160200161173f93929190612955565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146117805760405162461bcd60e51b815260040161087690612718565b601155565b600a546001600160a01b031633146117af5760405162461bcd60e51b815260040161087690612718565b600c611001828261287e565b600a546001600160a01b031633146117e55760405162461bcd60e51b815260040161087690612718565b6117f1601360006122a4565b610b57601383836122c2565b600a546001600160a01b031633146118275760405162461bcd60e51b815260040161087690612718565b600d611001828261287e565b600a546001600160a01b0316331461185d5760405162461bcd60e51b815260040161087690612718565b6001600160a01b0381166118c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610876565b610d6d81611d79565b60006001600160e01b031982166380ac58cd60e01b14806118fc57506001600160e01b03198216635b5e139f60e01b145b8061084657506301ffc9a760e01b6001600160e01b0319831614610846565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061195082611005565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611a025760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610876565b6000611a0d83611005565b9050806001600160a01b0316846001600160a01b03161480611a485750836001600160a01b0316611a3d84610924565b6001600160a01b0316145b80611a7857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a9382611005565b6001600160a01b031614611afb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610876565b6001600160a01b038216611b5d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610876565b611b68838383611f28565b611b7360008261191b565b6001600160a01b0383166000908152600360205260408120805460019290611b9c9084906129f5565b90915550506001600160a01b0382166000908152600360205260408120805460019290611bca90849061281d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b038216611c815760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610876565b6000818152600260205260409020546001600160a01b031615611ce65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610876565b611cf260008383611f28565b6001600160a01b0382166000908152600360205260408120805460019290611d1b90849061281d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611001828260405180602001604052806000815250611fe0565b611df0848484611a80565b611dfc84848484612013565b610f325760405162461bcd60e51b815260040161087690612a08565b6060600b80546108a19061274d565b606081600003611e4e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e785780611e6281612804565b9150611e719050600a83612a70565b9150611e52565b60008167ffffffffffffffff811115611e9357611e9361256a565b6040519080825280601f01601f191660200182016040528015611ebd576020820181803683370190505b5090505b8415611a7857611ed26001836129f5565b9150611edf600a86612a84565b611eea90603061281d565b60f81b818381518110611eff57611eff6127d8565b60200101906001600160f81b031916908160001a905350611f21600a86612a70565b9450611ec1565b6001600160a01b038316611f8357611f7e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611fa6565b816001600160a01b0316836001600160a01b031614611fa657611fa68382612114565b6001600160a01b038216611fbd57610b57816121b1565b826001600160a01b0316826001600160a01b031614610b5757610b578282612260565b611fea8383611c2b565b611ff76000848484612013565b610b575760405162461bcd60e51b815260040161087690612a08565b60006001600160a01b0384163b1561210957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612057903390899088908890600401612a98565b6020604051808303816000875af1925050508015612092575060408051601f3d908101601f1916820190925261208f91810190612ad5565b60015b6120ef573d8080156120c0576040519150601f19603f3d011682016040523d82523d6000602084013e6120c5565b606091505b5080516000036120e75760405162461bcd60e51b815260040161087690612a08565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a78565b506001949350505050565b6000600161212184611089565b61212b91906129f5565b60008381526007602052604090205490915080821461217e576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906121c3906001906129f5565b600083815260096020526040812054600880549394509092849081106121eb576121eb6127d8565b90600052602060002001549050806008838154811061220c5761220c6127d8565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061224457612244612af2565b6001900381819060005260206000200160009055905550505050565b600061226b83611089565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b5080546000825590600052602060002090810190610d6d9190612325565b828054828255906000526020600020908101928215612315579160200282015b828111156123155781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906122e2565b50612321929150612325565b5090565b5b808211156123215760008155600101612326565b6001600160e01b031981168114610d6d57600080fd5b60006020828403121561236257600080fd5b813561174f8161233a565b8035801515811461237d57600080fd5b919050565b60006020828403121561239457600080fd5b61174f8261236d565b60005b838110156123b85781810151838201526020016123a0565b50506000910152565b600081518084526123d981602086016020860161239d565b601f01601f19169290920160200192915050565b60208152600061174f60208301846123c1565b60006020828403121561241257600080fd5b5035919050565b80356001600160a01b038116811461237d57600080fd5b6000806040838503121561244357600080fd5b61244c83612419565b946020939093013593505050565b60006020828403121561246c57600080fd5b61174f82612419565b60008060006060848603121561248a57600080fd5b61249384612419565b92506124a160208501612419565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b818110156124e9578351835292840192918401916001016124cd565b50909695505050505050565b6000806020838503121561250857600080fd5b823567ffffffffffffffff8082111561252057600080fd5b818501915085601f83011261253457600080fd5b81358181111561254357600080fd5b8660208260051b850101111561255857600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561259b5761259b61256a565b604051601f8501601f19908116603f011681019082821181831017156125c3576125c361256a565b816040528093508581528686860111156125dc57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561260857600080fd5b813567ffffffffffffffff81111561261f57600080fd5b8201601f8101841361263057600080fd5b611a7884823560208401612580565b6000806040838503121561265257600080fd5b61265b83612419565b91506126696020840161236d565b90509250929050565b6000806000806080858703121561268857600080fd5b61269185612419565b935061269f60208601612419565b925060408501359150606085013567ffffffffffffffff8111156126c257600080fd5b8501601f810187136126d357600080fd5b6126e287823560208401612580565b91505092959194509250565b6000806040838503121561270157600080fd5b61270a83612419565b915061266960208401612419565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061276157607f821691505b60208210810361278157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612816576128166127ee565b5060010190565b80820180821115610846576108466127ee565b601f821115610b5757600081815260208120601f850160051c810160208610156128575750805b601f850160051c820191505b8181101561287657828155600101612863565b505050505050565b815167ffffffffffffffff8111156128985761289861256a565b6128ac816128a6845461274d565b84612830565b602080601f8311600181146128e157600084156128c95750858301515b600019600386901b1c1916600185901b178555612876565b600085815260208120601f198616915b82811015612910578886015182559484019460019091019084016128f1565b508582101561292e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417610846576108466127ee565b6000845160206129688285838a0161239d565b85519184019161297b8184848a0161239d565b855492019160009061298c8161274d565b600182811680156129a457600181146129b9576129e5565b60ff19841687528215158302870194506129e5565b896000528560002060005b848110156129dd578154898201529083019087016129c4565b505082870194505b50929a9950505050505050505050565b81810381811115610846576108466127ee565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612a7f57612a7f612a5a565b500490565b600082612a9357612a93612a5a565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612acb908301846123c1565b9695505050505050565b600060208284031215612ae757600080fd5b815161174f8161233a565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209b5b81aeb56ce9e6c00528744d9a2317e7e1ef090bdcd524766882a314472bdc64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000135563686920436f6c6c6563746f72205061737300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000355435000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d64567665394d324c376b45456646735262764c4351437979444c6a796a69787341574e415352437a664741342f00000000000000000000

Deployed Bytecode

0x60806040526004361061027d5760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb0114610742578063da3ef23f14610758578063e985e9c514610778578063edec5f27146107c1578063f2c4ce1e146107e1578063f2fde38b1461080157600080fd5b8063b88d4fde14610697578063ba4e5c49146106b7578063ba7d2c76146106d7578063c6682862146106ed578063c87b56dd14610702578063d0eb26b01461072257600080fd5b80638da5cb5b116101135780638da5cb5b146105fc57806395d89b411461061a5780639c70b5121461062f578063a0712d681461064f578063a22cb46514610662578063a475b5dd1461068257600080fd5b80636352211e146105725780636c0360eb1461059257806370a08231146105a7578063715018a6146105c75780637f00c7a6146105dc57600080fd5b80632f745c59116101f357806344a0d68a116101ac57806344a0d68a146104b957806347d9569e146104d95780634f6ccce7146104f9578063518302271461051957806355f804b3146105385780635c975abb1461055857600080fd5b80632f745c59146104045780633af32abf146104245780633c952764146104445780633ccfd60b1461046457806342842e0e1461046c578063438b63001461048c57600080fd5b8063095ea7b311610245578063095ea7b31461034857806313faede61461036857806318160ddd1461038c57806318cae269146103a1578063239c70ae146103ce57806323b872dd146103e457600080fd5b806301ffc9a71461028257806302329a29146102b757806306fdde03146102d9578063081812fc146102fb578063081c8c4414610333575b600080fd5b34801561028e57600080fd5b506102a261029d366004612350565b610821565b60405190151581526020015b60405180910390f35b3480156102c357600080fd5b506102d76102d2366004612382565b61084c565b005b3480156102e557600080fd5b506102ee610892565b6040516102ae91906123ed565b34801561030757600080fd5b5061031b610316366004612400565b610924565b6040516001600160a01b0390911681526020016102ae565b34801561033f57600080fd5b506102ee6109b9565b34801561035457600080fd5b506102d7610363366004612430565b610a47565b34801561037457600080fd5b5061037e600e5481565b6040519081526020016102ae565b34801561039857600080fd5b5060085461037e565b3480156103ad57600080fd5b5061037e6103bc36600461245a565b60146020526000908152604090205481565b3480156103da57600080fd5b5061037e60105481565b3480156103f057600080fd5b506102d76103ff366004612475565b610b5c565b34801561041057600080fd5b5061037e61041f366004612430565b610b8d565b34801561043057600080fd5b506102a261043f36600461245a565b610c23565b34801561045057600080fd5b506102d761045f366004612382565b610c8c565b6102d7610cd2565b34801561047857600080fd5b506102d7610487366004612475565b610d70565b34801561049857600080fd5b506104ac6104a736600461245a565b610d8b565b6040516102ae91906124b1565b3480156104c557600080fd5b506102d76104d4366004612400565b610e2d565b3480156104e557600080fd5b506102d76104f43660046124f5565b610e5c565b34801561050557600080fd5b5061037e610514366004612400565b610f38565b34801561052557600080fd5b506012546102a290610100900460ff1681565b34801561054457600080fd5b506102d76105533660046125f6565b610fcb565b34801561056457600080fd5b506012546102a29060ff1681565b34801561057e57600080fd5b5061031b61058d366004612400565b611005565b34801561059e57600080fd5b506102ee61107c565b3480156105b357600080fd5b5061037e6105c236600461245a565b611089565b3480156105d357600080fd5b506102d7611110565b3480156105e857600080fd5b506102d76105f7366004612400565b611146565b34801561060857600080fd5b50600a546001600160a01b031661031b565b34801561062657600080fd5b506102ee611175565b34801561063b57600080fd5b506012546102a29062010000900460ff1681565b6102d761065d366004612400565b611184565b34801561066e57600080fd5b506102d761067d36600461263f565b61146a565b34801561068e57600080fd5b506102d761152e565b3480156106a357600080fd5b506102d76106b2366004612672565b611569565b3480156106c357600080fd5b5061031b6106d2366004612400565b61159b565b3480156106e357600080fd5b5061037e60115481565b3480156106f957600080fd5b506102ee6115c5565b34801561070e57600080fd5b506102ee61071d366004612400565b6115d2565b34801561072e57600080fd5b506102d761073d366004612400565b611756565b34801561074e57600080fd5b5061037e600f5481565b34801561076457600080fd5b506102d76107733660046125f6565b611785565b34801561078457600080fd5b506102a26107933660046126ee565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107cd57600080fd5b506102d76107dc3660046124f5565b6117bb565b3480156107ed57600080fd5b506102d76107fc3660046125f6565b6117fd565b34801561080d57600080fd5b506102d761081c36600461245a565b611833565b60006001600160e01b0319821663780e9d6360e01b14806108465750610846826118cb565b92915050565b600a546001600160a01b0316331461087f5760405162461bcd60e51b815260040161087690612718565b60405180910390fd5b6012805460ff1916911515919091179055565b6060600080546108a19061274d565b80601f01602080910402602001604051908101604052809291908181526020018280546108cd9061274d565b801561091a5780601f106108ef5761010080835404028352916020019161091a565b820191906000526020600020905b8154815290600101906020018083116108fd57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661099d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610876565b506000908152600460205260409020546001600160a01b031690565b600d80546109c69061274d565b80601f01602080910402602001604051908101604052809291908181526020018280546109f29061274d565b8015610a3f5780601f10610a1457610100808354040283529160200191610a3f565b820191906000526020600020905b815481529060010190602001808311610a2257829003601f168201915b505050505081565b6000610a5282611005565b9050806001600160a01b0316836001600160a01b031603610abf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610876565b336001600160a01b0382161480610adb5750610adb8133610793565b610b4d5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610876565b610b57838361191b565b505050565b610b663382611989565b610b825760405162461bcd60e51b815260040161087690612787565b610b57838383611a80565b6000610b9883611089565b8210610bfa5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610876565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000805b601354811015610c8357826001600160a01b031660138281548110610c4e57610c4e6127d8565b6000918252602090912001546001600160a01b031603610c715750600192915050565b80610c7b81612804565b915050610c27565b50600092915050565b600a546001600160a01b03163314610cb65760405162461bcd60e51b815260040161087690612718565b60128054911515620100000262ff000019909216919091179055565b600a546001600160a01b03163314610cfc5760405162461bcd60e51b815260040161087690612718565b6000610d10600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610d5a576040519150601f19603f3d011682016040523d82523d6000602084013e610d5f565b606091505b5050905080610d6d57600080fd5b50565b610b5783838360405180602001604052806000815250611569565b60606000610d9883611089565b905060008167ffffffffffffffff811115610db557610db561256a565b604051908082528060200260200182016040528015610dde578160200160208202803683370190505b50905060005b82811015610e2557610df68582610b8d565b828281518110610e0857610e086127d8565b602090810291909101015280610e1d81612804565b915050610de4565b509392505050565b600a546001600160a01b03163314610e575760405162461bcd60e51b815260040161087690612718565b600e55565b600a546001600160a01b03163314610e865760405162461bcd60e51b815260040161087690612718565b6000610e9160085490565b905060005b82811015610f3257600f54610eac83600161281d565b1115610ef15760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610876565b610f22848483818110610f0657610f066127d8565b9050602002016020810190610f1b919061245a565b6001611c2b565b610f2b81612804565b9050610e96565b50505050565b6000610f4360085490565b8210610fa65760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610876565b60088281548110610fb957610fb96127d8565b90600052602060002001549050919050565b600a546001600160a01b03163314610ff55760405162461bcd60e51b815260040161087690612718565b600b611001828261287e565b5050565b6000818152600260205260408120546001600160a01b0316806108465760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610876565b600b80546109c69061274d565b60006001600160a01b0382166110f45760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610876565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461113a5760405162461bcd60e51b815260040161087690612718565b6111446000611d79565b565b600a546001600160a01b031633146111705760405162461bcd60e51b815260040161087690612718565b601055565b6060600180546108a19061274d565b60125460ff16156111d05760405162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b6044820152606401610876565b60006111db60085490565b90506000821161122d5760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e465400000000006044820152606401610876565b60105482111561128b5760405162461bcd60e51b8152602060048201526024808201527f6d6178206d696e7420616d6f756e74207065722073657373696f6e20657863656044820152631959195960e21b6064820152608401610876565b600f54611298838361281d565b11156112df5760405162461bcd60e51b81526020600482015260166024820152751b585e08139195081b1a5b5a5d08195e18d95959195960521b6044820152606401610876565b600a546001600160a01b0316331461141a5760125462010000900460ff1615156001036113c85761130f33610c23565b61135b5760405162461bcd60e51b815260206004820152601760248201527f75736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610876565b33600090815260146020526040902054601154611378848361281d565b11156113c65760405162461bcd60e51b815260206004820152601c60248201527f6d6178204e4654207065722061646472657373206578636565646564000000006044820152606401610876565b505b81600e546113d6919061293e565b34101561141a5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610876565b60015b828111610b575733600090815260146020526040812080549161143f83612804565b90915550611458905033611453838561281d565b611dcb565b8061146281612804565b91505061141d565b336001600160a01b038316036114c25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610876565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146115585760405162461bcd60e51b815260040161087690612718565b6012805461ff001916610100179055565b6115733383611989565b61158f5760405162461bcd60e51b815260040161087690612787565b610f3284848484611de5565b601381815481106115ab57600080fd5b6000918252602090912001546001600160a01b0316905081565b600c80546109c69061274d565b6000818152600260205260409020546060906001600160a01b03166116515760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610876565b601254610100900460ff1615156000036116f757600d80546116729061274d565b80601f016020809104026020016040519081016040528092919081815260200182805461169e9061274d565b80156116eb5780601f106116c0576101008083540402835291602001916116eb565b820191906000526020600020905b8154815290600101906020018083116116ce57829003601f168201915b50505050509050919050565b6000611701611e18565b90506000815111611721576040518060200160405280600081525061174f565b8061172b84611e27565b600c60405160200161173f93929190612955565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146117805760405162461bcd60e51b815260040161087690612718565b601155565b600a546001600160a01b031633146117af5760405162461bcd60e51b815260040161087690612718565b600c611001828261287e565b600a546001600160a01b031633146117e55760405162461bcd60e51b815260040161087690612718565b6117f1601360006122a4565b610b57601383836122c2565b600a546001600160a01b031633146118275760405162461bcd60e51b815260040161087690612718565b600d611001828261287e565b600a546001600160a01b0316331461185d5760405162461bcd60e51b815260040161087690612718565b6001600160a01b0381166118c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610876565b610d6d81611d79565b60006001600160e01b031982166380ac58cd60e01b14806118fc57506001600160e01b03198216635b5e139f60e01b145b8061084657506301ffc9a760e01b6001600160e01b0319831614610846565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061195082611005565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611a025760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610876565b6000611a0d83611005565b9050806001600160a01b0316846001600160a01b03161480611a485750836001600160a01b0316611a3d84610924565b6001600160a01b0316145b80611a7857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a9382611005565b6001600160a01b031614611afb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610876565b6001600160a01b038216611b5d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610876565b611b68838383611f28565b611b7360008261191b565b6001600160a01b0383166000908152600360205260408120805460019290611b9c9084906129f5565b90915550506001600160a01b0382166000908152600360205260408120805460019290611bca90849061281d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b038216611c815760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610876565b6000818152600260205260409020546001600160a01b031615611ce65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610876565b611cf260008383611f28565b6001600160a01b0382166000908152600360205260408120805460019290611d1b90849061281d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611001828260405180602001604052806000815250611fe0565b611df0848484611a80565b611dfc84848484612013565b610f325760405162461bcd60e51b815260040161087690612a08565b6060600b80546108a19061274d565b606081600003611e4e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e785780611e6281612804565b9150611e719050600a83612a70565b9150611e52565b60008167ffffffffffffffff811115611e9357611e9361256a565b6040519080825280601f01601f191660200182016040528015611ebd576020820181803683370190505b5090505b8415611a7857611ed26001836129f5565b9150611edf600a86612a84565b611eea90603061281d565b60f81b818381518110611eff57611eff6127d8565b60200101906001600160f81b031916908160001a905350611f21600a86612a70565b9450611ec1565b6001600160a01b038316611f8357611f7e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611fa6565b816001600160a01b0316836001600160a01b031614611fa657611fa68382612114565b6001600160a01b038216611fbd57610b57816121b1565b826001600160a01b0316826001600160a01b031614610b5757610b578282612260565b611fea8383611c2b565b611ff76000848484612013565b610b575760405162461bcd60e51b815260040161087690612a08565b60006001600160a01b0384163b1561210957604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612057903390899088908890600401612a98565b6020604051808303816000875af1925050508015612092575060408051601f3d908101601f1916820190925261208f91810190612ad5565b60015b6120ef573d8080156120c0576040519150601f19603f3d011682016040523d82523d6000602084013e6120c5565b606091505b5080516000036120e75760405162461bcd60e51b815260040161087690612a08565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a78565b506001949350505050565b6000600161212184611089565b61212b91906129f5565b60008381526007602052604090205490915080821461217e576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906121c3906001906129f5565b600083815260096020526040812054600880549394509092849081106121eb576121eb6127d8565b90600052602060002001549050806008838154811061220c5761220c6127d8565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061224457612244612af2565b6001900381819060005260206000200160009055905550505050565b600061226b83611089565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b5080546000825590600052602060002090810190610d6d9190612325565b828054828255906000526020600020908101928215612315579160200282015b828111156123155781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906122e2565b50612321929150612325565b5090565b5b808211156123215760008155600101612326565b6001600160e01b031981168114610d6d57600080fd5b60006020828403121561236257600080fd5b813561174f8161233a565b8035801515811461237d57600080fd5b919050565b60006020828403121561239457600080fd5b61174f8261236d565b60005b838110156123b85781810151838201526020016123a0565b50506000910152565b600081518084526123d981602086016020860161239d565b601f01601f19169290920160200192915050565b60208152600061174f60208301846123c1565b60006020828403121561241257600080fd5b5035919050565b80356001600160a01b038116811461237d57600080fd5b6000806040838503121561244357600080fd5b61244c83612419565b946020939093013593505050565b60006020828403121561246c57600080fd5b61174f82612419565b60008060006060848603121561248a57600080fd5b61249384612419565b92506124a160208501612419565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b818110156124e9578351835292840192918401916001016124cd565b50909695505050505050565b6000806020838503121561250857600080fd5b823567ffffffffffffffff8082111561252057600080fd5b818501915085601f83011261253457600080fd5b81358181111561254357600080fd5b8660208260051b850101111561255857600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561259b5761259b61256a565b604051601f8501601f19908116603f011681019082821181831017156125c3576125c361256a565b816040528093508581528686860111156125dc57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561260857600080fd5b813567ffffffffffffffff81111561261f57600080fd5b8201601f8101841361263057600080fd5b611a7884823560208401612580565b6000806040838503121561265257600080fd5b61265b83612419565b91506126696020840161236d565b90509250929050565b6000806000806080858703121561268857600080fd5b61269185612419565b935061269f60208601612419565b925060408501359150606085013567ffffffffffffffff8111156126c257600080fd5b8501601f810187136126d357600080fd5b6126e287823560208401612580565b91505092959194509250565b6000806040838503121561270157600080fd5b61270a83612419565b915061266960208401612419565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061276157607f821691505b60208210810361278157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612816576128166127ee565b5060010190565b80820180821115610846576108466127ee565b601f821115610b5757600081815260208120601f850160051c810160208610156128575750805b601f850160051c820191505b8181101561287657828155600101612863565b505050505050565b815167ffffffffffffffff8111156128985761289861256a565b6128ac816128a6845461274d565b84612830565b602080601f8311600181146128e157600084156128c95750858301515b600019600386901b1c1916600185901b178555612876565b600085815260208120601f198616915b82811015612910578886015182559484019460019091019084016128f1565b508582101561292e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417610846576108466127ee565b6000845160206129688285838a0161239d565b85519184019161297b8184848a0161239d565b855492019160009061298c8161274d565b600182811680156129a457600181146129b9576129e5565b60ff19841687528215158302870194506129e5565b896000528560002060005b848110156129dd578154898201529083019087016129c4565b505082870194505b50929a9950505050505050505050565b81810381811115610846576108466127ee565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612a7f57612a7f612a5a565b500490565b600082612a9357612a93612a5a565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612acb908301846123c1565b9695505050505050565b600060208284031215612ae757600080fd5b815161174f8161233a565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209b5b81aeb56ce9e6c00528744d9a2317e7e1ef090bdcd524766882a314472bdc64736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000135563686920436f6c6c6563746f72205061737300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000355435000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d64567665394d324c376b45456646735262764c4351437979444c6a796a69787341574e415352437a664741342f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Uchi Collector Pass
Arg [1] : _symbol (string): UCP
Arg [2] : _initBaseURI (string): ipfs://QmdVve9M2L7kEEfFsRbvLCQCyyDLjyjixsAWNASRCzfGA4/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [4] : 5563686920436f6c6c6563746f72205061737300000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 5543500000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d64567665394d324c376b45456646735262764c43514379
Arg [9] : 79444c6a796a69787341574e415352437a664741342f00000000000000000000


Deployed Bytecode Sourcemap

43131:4821:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34677:224;;;;;;;;;;-1:-1:-1;34677:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;34677:224:0;;;;;;;;47295:73;;;;;;;;;;-1:-1:-1;47295:73:0;;;;;:::i;:::-;;:::i;:::-;;22569:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24128:221::-;;;;;;;;;;-1:-1:-1;24128:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2047:32:1;;;2029:51;;2017:2;2002:18;24128:221:0;1883:203:1;43292:28:0;;;;;;;;;;;;;:::i;23651:411::-;;;;;;;;;;-1:-1:-1;23651:411:0;;;;;:::i;:::-;;:::i;43325:32::-;;;;;;;;;;;;;;;;;;;2674:25:1;;;2662:2;2647:18;43325:32:0;2528:177:1;35317:113:0;;;;;;;;;;-1:-1:-1;35405:10:0;:17;35317:113;;43620:55;;;;;;;;;;-1:-1:-1;43620:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;43398:32;;;;;;;;;;;;;;;;25018:339;;;;;;;;;;-1:-1:-1;25018:339:0;;;;;:::i;:::-;;:::i;34985:256::-;;;;;;;;;;-1:-1:-1;34985:256:0;;;;;:::i;:::-;;:::i;45424:239::-;;;;;;;;;;-1:-1:-1;45424:239:0;;;;;:::i;:::-;;:::i;47376:95::-;;;;;;;;;;-1:-1:-1;47376:95:0;;;;;:::i;:::-;;:::i;47630:319::-;;;:::i;25428:185::-;;;;;;;;;;-1:-1:-1;25428:185:0;;;;;:::i;:::-;;:::i;45669:348::-;;;;;;;;;;-1:-1:-1;45669:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46727:80::-;;;;;;;;;;-1:-1:-1;46727:80:0;;;;;:::i;:::-;;:::i;45148:268::-;;;;;;;;;;-1:-1:-1;45148:268:0;;;;;:::i;:::-;;:::i;35507:233::-;;;;;;;;;;-1:-1:-1;35507:233:0;;;;;:::i;:::-;;:::i;43507:27::-;;;;;;;;;;-1:-1:-1;43507:27:0;;;;;;;;;;;46935:98;;;;;;;;;;-1:-1:-1;46935:98:0;;;;;:::i;:::-;;:::i;43477:25::-;;;;;;;;;;-1:-1:-1;43477:25:0;;;;;;;;22263:239;;;;;;;;;;-1:-1:-1;22263:239:0;;;;;:::i;:::-;;:::i;43224:21::-;;;;;;;;;;;;;:::i;21993:208::-;;;;;;;;;;-1:-1:-1;21993:208:0;;;;;:::i;:::-;;:::i;42466:94::-;;;;;;;;;;;;;:::i;46813:116::-;;;;;;;;;;-1:-1:-1;46813:116:0;;;;;:::i;:::-;;:::i;41815:87::-;;;;;;;;;;-1:-1:-1;41888:6:0;;-1:-1:-1;;;;;41888:6:0;41815:87;;22738:104;;;;;;;;;;;;;:::i;43539:34::-;;;;;;;;;;-1:-1:-1;43539:34:0;;;;;;;;;;;44210:931;;;;;;:::i;:::-;;:::i;24421:295::-;;;;;;;;;;-1:-1:-1;24421:295:0;;;;;:::i;:::-;;:::i;46542:65::-;;;;;;;;;;;;;:::i;25684:328::-;;;;;;;;;;-1:-1:-1;25684:328:0;;;;;:::i;:::-;;:::i;43578:37::-;;;;;;;;;;-1:-1:-1;43578:37:0;;;;;:::i;:::-;;:::i;43435:::-;;;;;;;;;;;;;;;;43250;;;;;;;;;;;;;:::i;46023:497::-;;;;;;;;;;-1:-1:-1;46023:497:0;;;;;:::i;:::-;;:::i;46615:104::-;;;;;;;;;;-1:-1:-1;46615:104:0;;;;;:::i;:::-;;:::i;43362:31::-;;;;;;;;;;;;;;;;47039:122;;;;;;;;;;-1:-1:-1;47039:122:0;;;;;:::i;:::-;;:::i;24787:164::-;;;;;;;;;;-1:-1:-1;24787:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;24908:25:0;;;24884:4;24908:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24787:164;47479:144;;;;;;;;;;-1:-1:-1;47479:144:0;;;;;:::i;:::-;;:::i;47169:120::-;;;;;;;;;;-1:-1:-1;47169:120:0;;;;;:::i;:::-;;:::i;42715:192::-;;;;;;;;;;-1:-1:-1;42715:192:0;;;;;:::i;:::-;;:::i;34677:224::-;34779:4;-1:-1:-1;;;;;;34803:50:0;;-1:-1:-1;;;34803:50:0;;:90;;;34857:36;34881:11;34857:23;:36::i;:::-;34796:97;34677:224;-1:-1:-1;;34677:224:0:o;47295:73::-;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;;;;;;;;;47347:6:::1;:15:::0;;-1:-1:-1;;47347:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47295:73::o;22569:100::-;22623:13;22656:5;22649:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22569:100;:::o;24128:221::-;24204:7;27611:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27611:16:0;24224:73;;;;-1:-1:-1;;;24224:73:0;;7860:2:1;24224:73:0;;;7842:21:1;7899:2;7879:18;;;7872:30;7938:34;7918:18;;;7911:62;-1:-1:-1;;;7989:18:1;;;7982:42;8041:19;;24224:73:0;7658:408:1;24224:73:0;-1:-1:-1;24317:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24317:24:0;;24128:221::o;43292:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23651:411::-;23732:13;23748:23;23763:7;23748:14;:23::i;:::-;23732:39;;23796:5;-1:-1:-1;;;;;23790:11:0;:2;-1:-1:-1;;;;;23790:11:0;;23782:57;;;;-1:-1:-1;;;23782:57:0;;8273:2:1;23782:57:0;;;8255:21:1;8312:2;8292:18;;;8285:30;8351:34;8331:18;;;8324:62;-1:-1:-1;;;8402:18:1;;;8395:31;8443:19;;23782:57:0;8071:397:1;23782:57:0;20178:10;-1:-1:-1;;;;;23874:21:0;;;;:62;;-1:-1:-1;23899:37:0;23916:5;20178:10;24787:164;:::i;23899:37::-;23852:168;;;;-1:-1:-1;;;23852:168:0;;8675:2:1;23852:168:0;;;8657:21:1;8714:2;8694:18;;;8687:30;8753:34;8733:18;;;8726:62;8824:26;8804:18;;;8797:54;8868:19;;23852:168:0;8473:420:1;23852:168:0;24033:21;24042:2;24046:7;24033:8;:21::i;:::-;23721:341;23651:411;;:::o;25018:339::-;25213:41;20178:10;25246:7;25213:18;:41::i;:::-;25205:103;;;;-1:-1:-1;;;25205:103:0;;;;;;;:::i;:::-;25321:28;25331:4;25337:2;25341:7;25321:9;:28::i;34985:256::-;35082:7;35118:23;35135:5;35118:16;:23::i;:::-;35110:5;:31;35102:87;;;;-1:-1:-1;;;35102:87:0;;9518:2:1;35102:87:0;;;9500:21:1;9557:2;9537:18;;;9530:30;9596:34;9576:18;;;9569:62;-1:-1:-1;;;9647:18:1;;;9640:41;9698:19;;35102:87:0;9316:407:1;35102:87:0;-1:-1:-1;;;;;;35207:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;34985:256::o;45424:239::-;45483:4;;45496:143;45517:20;:27;45513:31;;45496:143;;;45591:5;-1:-1:-1;;;;;45564:32:0;:20;45585:1;45564:23;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;45564:23:0;:32;45560:72;;-1:-1:-1;45618:4:0;;45424:239;-1:-1:-1;;45424:239:0:o;45560:72::-;45546:3;;;;:::i;:::-;;;;45496:143;;;-1:-1:-1;45652:5:0;;45424:239;-1:-1:-1;;45424:239:0:o;47376:95::-;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;47441:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;47441:24:0;;::::1;::::0;;;::::1;::::0;;47376:95::o;47630:319::-;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;47771:7:::1;47792;41888:6:::0;;-1:-1:-1;;;;;41888:6:0;;41815:87;47792:7:::1;-1:-1:-1::0;;;;;47784:21:0::1;47813;47784:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47770:69;;;47854:2;47846:11;;;::::0;::::1;;47675:274;47630:319::o:0;25428:185::-;25566:39;25583:4;25589:2;25593:7;25566:39;;;;;;;;;;;;:16;:39::i;45669:348::-;45744:16;45772:23;45798:17;45808:6;45798:9;:17::i;:::-;45772:43;;45822:25;45864:15;45850:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45850:30:0;;45822:58;;45892:9;45887:103;45907:15;45903:1;:19;45887:103;;;45952:30;45972:6;45980:1;45952:19;:30::i;:::-;45938:8;45947:1;45938:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;45924:3;;;;:::i;:::-;;;;45887:103;;;-1:-1:-1;46003:8:0;45669:348;-1:-1:-1;;;45669:348:0:o;46727:80::-;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;46786:4:::1;:15:::0;46727:80::o;45148:268::-;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;45227:14:::1;45244:13;35405:10:::0;:17;;35317:113;45244:13:::1;45227:30;;45269:9;45264:147;45280:20:::0;;::::1;45264:147;;;45338:9;::::0;45324:10:::1;:6:::0;45333:1:::1;45324:10;:::i;:::-;:23;;45316:56;;;::::0;-1:-1:-1;;;45316:56:0;;10674:2:1;45316:56:0::1;::::0;::::1;10656:21:1::0;10713:2;10693:18;;;10686:30;-1:-1:-1;;;10732:18:1;;;10725:50;10792:18;;45316:56:0::1;10472:344:1::0;45316:56:0::1;45381:22;45387:9;;45397:1;45387:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;45401:1;45381:5;:22::i;:::-;45302:3;::::0;::::1;:::i;:::-;;;45264:147;;;;45218:198;45148:268:::0;;:::o;35507:233::-;35582:7;35618:30;35405:10;:17;;35317:113;35618:30;35610:5;:38;35602:95;;;;-1:-1:-1;;;35602:95:0;;11023:2:1;35602:95:0;;;11005:21:1;11062:2;11042:18;;;11035:30;11101:34;11081:18;;;11074:62;-1:-1:-1;;;11152:18:1;;;11145:42;11204:19;;35602:95:0;10821:408:1;35602:95:0;35715:10;35726:5;35715:17;;;;;;;;:::i;:::-;;;;;;;;;35708:24;;35507:233;;;:::o;46935:98::-;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;47006:7:::1;:21;47016:11:::0;47006:7;:21:::1;:::i;:::-;;46935:98:::0;:::o;22263:239::-;22335:7;22371:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22371:16:0;;22398:73;;;;-1:-1:-1;;;22398:73:0;;13640:2:1;22398:73:0;;;13622:21:1;13679:2;13659:18;;;13652:30;13718:34;13698:18;;;13691:62;-1:-1:-1;;;13769:18:1;;;13762:39;13818:19;;22398:73:0;13438:405:1;43224:21:0;;;;;;;:::i;21993:208::-;22065:7;-1:-1:-1;;;;;22093:19:0;;22085:74;;;;-1:-1:-1;;;22085:74:0;;14050:2:1;22085:74:0;;;14032:21:1;14089:2;14069:18;;;14062:30;14128:34;14108:18;;;14101:62;-1:-1:-1;;;14179:18:1;;;14172:40;14229:19;;22085:74:0;13848:406:1;22085:74:0;-1:-1:-1;;;;;;22177:16:0;;;;;:9;:16;;;;;;;21993:208::o;42466:94::-;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;42531:21:::1;42549:1;42531:9;:21::i;:::-;42466:94::o:0;46813:116::-;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;46890:13:::1;:33:::0;46813:116::o;22738:104::-;22794:13;22827:7;22820:14;;;;;:::i;44210:931::-;44276:6;;;;44275:7;44267:42;;;;-1:-1:-1;;;44267:42:0;;14461:2:1;44267:42:0;;;14443:21:1;14500:2;14480:18;;;14473:30;-1:-1:-1;;;14519:18:1;;;14512:52;14581:18;;44267:42:0;14259:346:1;44267:42:0;44316:14;44333:13;35405:10;:17;;35317:113;44333:13;44316:30;;44375:1;44361:11;:15;44353:55;;;;-1:-1:-1;;;44353:55:0;;14812:2:1;44353:55:0;;;14794:21:1;14851:2;14831:18;;;14824:30;14890:29;14870:18;;;14863:57;14937:18;;44353:55:0;14610:351:1;44353:55:0;44438:13;;44423:11;:28;;44415:77;;;;-1:-1:-1;;;44415:77:0;;15168:2:1;44415:77:0;;;15150:21:1;15207:2;15187:18;;;15180:30;15246:34;15226:18;;;15219:62;-1:-1:-1;;;15297:18:1;;;15290:34;15341:19;;44415:77:0;14966:400:1;44415:77:0;44531:9;;44507:20;44516:11;44507:6;:20;:::i;:::-;:33;;44499:68;;;;-1:-1:-1;;;44499:68:0;;15573:2:1;44499:68:0;;;15555:21:1;15612:2;15592:18;;;15585:30;-1:-1:-1;;;15631:18:1;;;15624:52;15693:18;;44499:68:0;15371:346:1;44499:68:0;41888:6;;-1:-1:-1;;;;;41888:6:0;44580:10;:21;44576:416;;44617:15;;;;;;;:23;;44636:4;44617:23;44614:298;;44665:25;44679:10;44665:13;:25::i;:::-;44657:61;;;;-1:-1:-1;;;44657:61:0;;15924:2:1;44657:61:0;;;15906:21:1;15963:2;15943:18;;;15936:30;16002:25;15982:18;;;15975:53;16045:18;;44657:61:0;15722:347:1;44657:61:0;44781:10;44733:24;44760:32;;;:20;:32;;;;;;44849:18;;44815:30;44834:11;44760:32;44815:30;:::i;:::-;:52;;44807:93;;;;-1:-1:-1;;;44807:93:0;;16276:2:1;44807:93:0;;;16258:21:1;16315:2;16295:18;;;16288:30;16354;16334:18;;;16327:58;16402:18;;44807:93:0;16074:352:1;44807:93:0;44642:270;44614:298;44950:11;44943:4;;:18;;;;:::i;:::-;44930:9;:31;;44922:62;;;;-1:-1:-1;;;44922:62:0;;16806:2:1;44922:62:0;;;16788:21:1;16845:2;16825:18;;;16818:30;-1:-1:-1;;;16864:18:1;;;16857:48;16922:18;;44922:62:0;16604:342:1;44922:62:0;45017:1;45000:136;45025:11;45020:1;:16;45000:136;;45073:10;45052:32;;;;:20;:32;;;;;:34;;;;;;:::i;:::-;;;;-1:-1:-1;45095:33:0;;-1:-1:-1;45105:10:0;45117;45126:1;45117:6;:10;:::i;:::-;45095:9;:33::i;:::-;45038:3;;;;:::i;:::-;;;;45000:136;;24421:295;20178:10;-1:-1:-1;;;;;24524:24:0;;;24516:62;;;;-1:-1:-1;;;24516:62:0;;17153:2:1;24516:62:0;;;17135:21:1;17192:2;17172:18;;;17165:30;17231:27;17211:18;;;17204:55;17276:18;;24516:62:0;16951:349:1;24516:62:0;20178:10;24591:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;24591:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;24591:53:0;;;;;;;;;;24660:48;;540:41:1;;;24591:42:0;;20178:10;24660:48;;513:18:1;24660:48:0;;;;;;;24421:295;;:::o;46542:65::-;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;46586:8:::1;:15:::0;;-1:-1:-1;;46586:15:0::1;;;::::0;;46542:65::o;25684:328::-;25859:41;20178:10;25892:7;25859:18;:41::i;:::-;25851:103;;;;-1:-1:-1;;;25851:103:0;;;;;;;:::i;:::-;25965:39;25979:4;25985:2;25989:7;25998:5;25965:13;:39::i;43578:37::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43578:37:0;;-1:-1:-1;43578:37:0;:::o;43250:::-;;;;;;;:::i;46023:497::-;27587:4;27611:16;;;:7;:16;;;;;;46121:13;;-1:-1:-1;;;;;27611:16:0;46146:97;;;;-1:-1:-1;;;46146:97:0;;17507:2:1;46146:97:0;;;17489:21:1;17546:2;17526:18;;;17519:30;17585:34;17565:18;;;17558:62;-1:-1:-1;;;17636:18:1;;;17629:45;17691:19;;46146:97:0;17305:411:1;46146:97:0;46259:8;;;;;;;:17;;46271:5;46259:17;46256:62;;46296:14;46289:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46023:497;;;:::o;46256:62::-;46326:28;46357:10;:8;:10::i;:::-;46326:41;;46412:1;46387:14;46381:28;:32;:133;;;;;;;;;;;;;;;;;46449:14;46465:18;:7;:16;:18::i;:::-;46485:13;46432:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46381:133;46374:140;46023:497;-1:-1:-1;;;46023:497:0:o;46615:104::-;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;46686:18:::1;:27:::0;46615:104::o;47039:122::-;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;47122:13:::1;:33;47138:17:::0;47122:13;:33:::1;:::i;47479:144::-:0;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;47554:27:::1;47561:20;;47554:27;:::i;:::-;47588:29;:20;47611:6:::0;;47588:29:::1;:::i;47169:120::-:0;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;47251:14:::1;:32;47268:15:::0;47251:14;:32:::1;:::i;42715:192::-:0;41888:6;;-1:-1:-1;;;;;41888:6:0;20178:10;42035:23;42027:68;;;;-1:-1:-1;;;42027:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42804:22:0;::::1;42796:73;;;::::0;-1:-1:-1;;;42796:73:0;;19184:2:1;42796:73:0::1;::::0;::::1;19166:21:1::0;19223:2;19203:18;;;19196:30;19262:34;19242:18;;;19235:62;-1:-1:-1;;;19313:18:1;;;19306:36;19359:19;;42796:73:0::1;18982:402:1::0;42796:73:0::1;42880:19;42890:8;42880:9;:19::i;21624:305::-:0;21726:4;-1:-1:-1;;;;;;21763:40:0;;-1:-1:-1;;;21763:40:0;;:105;;-1:-1:-1;;;;;;;21820:48:0;;-1:-1:-1;;;21820:48:0;21763:105;:158;;;-1:-1:-1;;;;;;;;;;7564:40:0;;;21885:36;7455:157;31504:174;31579:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31579:29:0;-1:-1:-1;;;;;31579:29:0;;;;;;;;:24;;31633:23;31579:24;31633:14;:23::i;:::-;-1:-1:-1;;;;;31624:46:0;;;;;;;;;;;31504:174;;:::o;27816:348::-;27909:4;27611:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27611:16:0;27926:73;;;;-1:-1:-1;;;27926:73:0;;19591:2:1;27926:73:0;;;19573:21:1;19630:2;19610:18;;;19603:30;19669:34;19649:18;;;19642:62;-1:-1:-1;;;19720:18:1;;;19713:42;19772:19;;27926:73:0;19389:408:1;27926:73:0;28010:13;28026:23;28041:7;28026:14;:23::i;:::-;28010:39;;28079:5;-1:-1:-1;;;;;28068:16:0;:7;-1:-1:-1;;;;;28068:16:0;;:51;;;;28112:7;-1:-1:-1;;;;;28088:31:0;:20;28100:7;28088:11;:20::i;:::-;-1:-1:-1;;;;;28088:31:0;;28068:51;:87;;;-1:-1:-1;;;;;;24908:25:0;;;24884:4;24908:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28123:32;28060:96;27816:348;-1:-1:-1;;;;27816:348:0:o;30808:578::-;30967:4;-1:-1:-1;;;;;30940:31:0;:23;30955:7;30940:14;:23::i;:::-;-1:-1:-1;;;;;30940:31:0;;30932:85;;;;-1:-1:-1;;;30932:85:0;;20004:2:1;30932:85:0;;;19986:21:1;20043:2;20023:18;;;20016:30;20082:34;20062:18;;;20055:62;-1:-1:-1;;;20133:18:1;;;20126:39;20182:19;;30932:85:0;19802:405:1;30932:85:0;-1:-1:-1;;;;;31036:16:0;;31028:65;;;;-1:-1:-1;;;31028:65:0;;20414:2:1;31028:65:0;;;20396:21:1;20453:2;20433:18;;;20426:30;20492:34;20472:18;;;20465:62;-1:-1:-1;;;20543:18:1;;;20536:34;20587:19;;31028:65:0;20212:400:1;31028:65:0;31106:39;31127:4;31133:2;31137:7;31106:20;:39::i;:::-;31210:29;31227:1;31231:7;31210:8;:29::i;:::-;-1:-1:-1;;;;;31252:15:0;;;;;;:9;:15;;;;;:20;;31271:1;;31252:15;:20;;31271:1;;31252:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31283:13:0;;;;;;:9;:13;;;;;:18;;31300:1;;31283:13;:18;;31300:1;;31283:18;:::i;:::-;;;;-1:-1:-1;;31312:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31312:21:0;-1:-1:-1;;;;;31312:21:0;;;;;;;;;31351:27;;31312:16;;31351:27;;;;;;;30808:578;;;:::o;29500:382::-;-1:-1:-1;;;;;29580:16:0;;29572:61;;;;-1:-1:-1;;;29572:61:0;;20952:2:1;29572:61:0;;;20934:21:1;;;20971:18;;;20964:30;21030:34;21010:18;;;21003:62;21082:18;;29572:61:0;20750:356:1;29572:61:0;27587:4;27611:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27611:16:0;:30;29644:58;;;;-1:-1:-1;;;29644:58:0;;21313:2:1;29644:58:0;;;21295:21:1;21352:2;21332:18;;;21325:30;21391;21371:18;;;21364:58;21439:18;;29644:58:0;21111:352:1;29644:58:0;29715:45;29744:1;29748:2;29752:7;29715:20;:45::i;:::-;-1:-1:-1;;;;;29773:13:0;;;;;;:9;:13;;;;;:18;;29790:1;;29773:13;:18;;29790:1;;29773:18;:::i;:::-;;;;-1:-1:-1;;29802:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29802:21:0;-1:-1:-1;;;;;29802:21:0;;;;;;;;29841:33;;29802:16;;;29841:33;;29802:16;;29841:33;29500:382;;:::o;42915:173::-;42990:6;;;-1:-1:-1;;;;;43007:17:0;;;-1:-1:-1;;;;;;43007:17:0;;;;;;;43040:40;;42990:6;;;43007:17;42990:6;;43040:40;;42971:16;;43040:40;42960:128;42915:173;:::o;28506:110::-;28582:26;28592:2;28596:7;28582:26;;;;;;;;;;;;:9;:26::i;26894:315::-;27051:28;27061:4;27067:2;27071:7;27051:9;:28::i;:::-;27098:48;27121:4;27127:2;27131:7;27140:5;27098:22;:48::i;:::-;27090:111;;;;-1:-1:-1;;;27090:111:0;;;;;;;:::i;44089:102::-;44149:13;44178:7;44171:14;;;;;:::i;7930:723::-;7986:13;8207:5;8216:1;8207:10;8203:53;;-1:-1:-1;;8234:10:0;;;;;;;;;;;;-1:-1:-1;;;8234:10:0;;;;;7930:723::o;8203:53::-;8281:5;8266:12;8322:78;8329:9;;8322:78;;8355:8;;;;:::i;:::-;;-1:-1:-1;8378:10:0;;-1:-1:-1;8386:2:0;8378:10;;:::i;:::-;;;8322:78;;;8410:19;8442:6;8432:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8432:17:0;;8410:39;;8460:154;8467:10;;8460:154;;8494:11;8504:1;8494:11;;:::i;:::-;;-1:-1:-1;8563:10:0;8571:2;8563:5;:10;:::i;:::-;8550:24;;:2;:24;:::i;:::-;8537:39;;8520:6;8527;8520:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8520:56:0;;;;;;;;-1:-1:-1;8591:11:0;8600:2;8591:11;;:::i;:::-;;;8460:154;;36353:589;-1:-1:-1;;;;;36559:18:0;;36555:187;;36594:40;36626:7;37769:10;:17;;37742:24;;;;:15;:24;;;;;:44;;;37797:24;;;;;;;;;;;;37665:164;36594:40;36555:187;;;36664:2;-1:-1:-1;;;;;36656:10:0;:4;-1:-1:-1;;;;;36656:10:0;;36652:90;;36683:47;36716:4;36722:7;36683:32;:47::i;:::-;-1:-1:-1;;;;;36756:16:0;;36752:183;;36789:45;36826:7;36789:36;:45::i;36752:183::-;36862:4;-1:-1:-1;;;;;36856:10:0;:2;-1:-1:-1;;;;;36856:10:0;;36852:83;;36883:40;36911:2;36915:7;36883:27;:40::i;28843:321::-;28973:18;28979:2;28983:7;28973:5;:18::i;:::-;29024:54;29055:1;29059:2;29063:7;29072:5;29024:22;:54::i;:::-;29002:154;;;;-1:-1:-1;;;29002:154:0;;;;;;;:::i;32243:799::-;32398:4;-1:-1:-1;;;;;32419:13:0;;10778:20;10826:8;32415:620;;32455:72;;-1:-1:-1;;;32455:72:0;;-1:-1:-1;;;;;32455:36:0;;;;;:72;;20178:10;;32506:4;;32512:7;;32521:5;;32455:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32455:72:0;;;;;;;;-1:-1:-1;;32455:72:0;;;;;;;;;;;;:::i;:::-;;;32451:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32697:6;:13;32714:1;32697:18;32693:272;;32740:60;;-1:-1:-1;;;32740:60:0;;;;;;;:::i;32693:272::-;32915:6;32909:13;32900:6;32896:2;32892:15;32885:38;32451:529;-1:-1:-1;;;;;;32578:51:0;-1:-1:-1;;;32578:51:0;;-1:-1:-1;32571:58:0;;32415:620;-1:-1:-1;33019:4:0;32243:799;;;;;;:::o;38456:988::-;38722:22;38772:1;38747:22;38764:4;38747:16;:22::i;:::-;:26;;;;:::i;:::-;38784:18;38805:26;;;:17;:26;;;;;;38722:51;;-1:-1:-1;38938:28:0;;;38934:328;;-1:-1:-1;;;;;39005:18:0;;38983:19;39005:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39056:30;;;;;;:44;;;39173:30;;:17;:30;;;;;:43;;;38934:328;-1:-1:-1;39358:26:0;;;;:17;:26;;;;;;;;39351:33;;;-1:-1:-1;;;;;39402:18:0;;;;;:12;:18;;;;;:34;;;;;;;39395:41;38456:988::o;39739:1079::-;40017:10;:17;39992:22;;40017:21;;40037:1;;40017:21;:::i;:::-;40049:18;40070:24;;;:15;:24;;;;;;40443:10;:26;;39992:46;;-1:-1:-1;40070:24:0;;39992:46;;40443:26;;;;;;:::i;:::-;;;;;;;;;40421:48;;40507:11;40482:10;40493;40482:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40587:28;;;:15;:28;;;;;;;:41;;;40759:24;;;;;40752:31;40794:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39810:1008;;;39739:1079;:::o;37243:221::-;37328:14;37345:20;37362:2;37345:16;:20::i;:::-;-1:-1:-1;;;;;37376:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37421:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37243:221:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;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:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;686:60;592:160;;;:::o;757:180::-;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:250::-;1027:1;1037:113;1051:6;1048:1;1045:13;1037:113;;;1127:11;;;1121:18;1108:11;;;1101:39;1073:2;1066:10;1037:113;;;-1:-1:-1;;1184:1:1;1166:16;;1159:27;942:250::o;1197:271::-;1239:3;1277:5;1271:12;1304:6;1299:3;1292:19;1320:76;1389:6;1382:4;1377:3;1373:14;1366:4;1359:5;1355:16;1320:76;:::i;:::-;1450:2;1429:15;-1:-1:-1;;1425:29:1;1416:39;;;;1457:4;1412:50;;1197:271;-1:-1:-1;;1197:271:1:o;1473:220::-;1622:2;1611:9;1604:21;1585:4;1642:45;1683:2;1672:9;1668:18;1660:6;1642:45;:::i;1698:180::-;1757:6;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;-1:-1:-1;1849:23:1;;1698:180;-1:-1:-1;1698:180:1:o;2091:173::-;2159:20;;-1:-1:-1;;;;;2208:31:1;;2198:42;;2188:70;;2254:1;2251;2244:12;2269:254;2337:6;2345;2398:2;2386:9;2377:7;2373:23;2369:32;2366:52;;;2414:1;2411;2404:12;2366:52;2437:29;2456:9;2437:29;:::i;:::-;2427:39;2513:2;2498:18;;;;2485:32;;-1:-1:-1;;;2269:254:1:o;2710:186::-;2769:6;2822:2;2810:9;2801:7;2797:23;2793:32;2790:52;;;2838:1;2835;2828:12;2790:52;2861:29;2880:9;2861:29;:::i;2901:328::-;2978:6;2986;2994;3047:2;3035:9;3026:7;3022:23;3018:32;3015:52;;;3063:1;3060;3053:12;3015:52;3086:29;3105:9;3086:29;:::i;:::-;3076:39;;3134:38;3168:2;3157:9;3153:18;3134:38;:::i;:::-;3124:48;;3219:2;3208:9;3204:18;3191:32;3181:42;;2901:328;;;;;:::o;3234:632::-;3405:2;3457:21;;;3527:13;;3430:18;;;3549:22;;;3376:4;;3405:2;3628:15;;;;3602:2;3587:18;;;3376:4;3671:169;3685:6;3682:1;3679:13;3671:169;;;3746:13;;3734:26;;3815:15;;;;3780:12;;;;3707:1;3700:9;3671:169;;;-1:-1:-1;3857:3:1;;3234:632;-1:-1:-1;;;;;;3234:632:1:o;3871:615::-;3957:6;3965;4018:2;4006:9;3997:7;3993:23;3989:32;3986:52;;;4034:1;4031;4024:12;3986:52;4074:9;4061:23;4103:18;4144:2;4136:6;4133:14;4130:34;;;4160:1;4157;4150:12;4130:34;4198:6;4187:9;4183:22;4173:32;;4243:7;4236:4;4232:2;4228:13;4224:27;4214:55;;4265:1;4262;4255:12;4214:55;4305:2;4292:16;4331:2;4323:6;4320:14;4317:34;;;4347:1;4344;4337:12;4317:34;4400:7;4395:2;4385:6;4382:1;4378:14;4374:2;4370:23;4366:32;4363:45;4360:65;;;4421:1;4418;4411:12;4360:65;4452:2;4444:11;;;;;4474:6;;-1:-1:-1;3871:615:1;;-1:-1:-1;;;;3871:615:1:o;4491:127::-;4552:10;4547:3;4543:20;4540:1;4533:31;4583:4;4580:1;4573:15;4607:4;4604:1;4597:15;4623:632;4688:5;4718:18;4759:2;4751:6;4748:14;4745:40;;;4765:18;;:::i;:::-;4840:2;4834:9;4808:2;4894:15;;-1:-1:-1;;4890:24:1;;;4916:2;4886:33;4882:42;4870:55;;;4940:18;;;4960:22;;;4937:46;4934:72;;;4986:18;;:::i;:::-;5026:10;5022:2;5015:22;5055:6;5046:15;;5085:6;5077;5070:22;5125:3;5116:6;5111:3;5107:16;5104:25;5101:45;;;5142:1;5139;5132:12;5101:45;5192:6;5187:3;5180:4;5172:6;5168:17;5155:44;5247:1;5240:4;5231:6;5223;5219:19;5215:30;5208:41;;;;4623:632;;;;;:::o;5260:451::-;5329:6;5382:2;5370:9;5361:7;5357:23;5353:32;5350:52;;;5398:1;5395;5388:12;5350:52;5438:9;5425:23;5471:18;5463:6;5460:30;5457:50;;;5503:1;5500;5493:12;5457:50;5526:22;;5579:4;5571:13;;5567:27;-1:-1:-1;5557:55:1;;5608:1;5605;5598:12;5557:55;5631:74;5697:7;5692:2;5679:16;5674:2;5670;5666:11;5631:74;:::i;5716:254::-;5781:6;5789;5842:2;5830:9;5821:7;5817:23;5813:32;5810:52;;;5858:1;5855;5848:12;5810:52;5881:29;5900:9;5881:29;:::i;:::-;5871:39;;5929:35;5960:2;5949:9;5945:18;5929:35;:::i;:::-;5919:45;;5716:254;;;;;:::o;5975:667::-;6070:6;6078;6086;6094;6147:3;6135:9;6126:7;6122:23;6118:33;6115:53;;;6164:1;6161;6154:12;6115:53;6187:29;6206:9;6187:29;:::i;:::-;6177:39;;6235:38;6269:2;6258:9;6254:18;6235:38;:::i;:::-;6225:48;;6320:2;6309:9;6305:18;6292:32;6282:42;;6375:2;6364:9;6360:18;6347:32;6402:18;6394:6;6391:30;6388:50;;;6434:1;6431;6424:12;6388:50;6457:22;;6510:4;6502:13;;6498:27;-1:-1:-1;6488:55:1;;6539:1;6536;6529:12;6488:55;6562:74;6628:7;6623:2;6610:16;6605:2;6601;6597:11;6562:74;:::i;:::-;6552:84;;;5975:667;;;;;;;:::o;6647:260::-;6715:6;6723;6776:2;6764:9;6755:7;6751:23;6747:32;6744:52;;;6792:1;6789;6782:12;6744:52;6815:29;6834:9;6815:29;:::i;:::-;6805:39;;6863:38;6897:2;6886:9;6882:18;6863:38;:::i;6912:356::-;7114:2;7096:21;;;7133:18;;;7126:30;7192:34;7187:2;7172:18;;7165:62;7259:2;7244:18;;6912:356::o;7273:380::-;7352:1;7348:12;;;;7395;;;7416:61;;7470:4;7462:6;7458:17;7448:27;;7416:61;7523:2;7515:6;7512:14;7492:18;7489:38;7486:161;;7569:10;7564:3;7560:20;7557:1;7550:31;7604:4;7601:1;7594:15;7632:4;7629:1;7622:15;7486:161;;7273:380;;;:::o;8898:413::-;9100:2;9082:21;;;9139:2;9119:18;;;9112:30;9178:34;9173:2;9158:18;;9151:62;-1:-1:-1;;;9244:2:1;9229:18;;9222:47;9301:3;9286:19;;8898:413::o;9728:127::-;9789:10;9784:3;9780:20;9777:1;9770:31;9820:4;9817:1;9810:15;9844:4;9841:1;9834:15;9860:127;9921:10;9916:3;9912:20;9909:1;9902:31;9952:4;9949:1;9942:15;9976:4;9973:1;9966:15;9992:135;10031:3;10052:17;;;10049:43;;10072:18;;:::i;:::-;-1:-1:-1;10119:1:1;10108:13;;9992:135::o;10342:125::-;10407:9;;;10428:10;;;10425:36;;;10441:18;;:::i;11360:545::-;11462:2;11457:3;11454:11;11451:448;;;11498:1;11523:5;11519:2;11512:17;11568:4;11564:2;11554:19;11638:2;11626:10;11622:19;11619:1;11615:27;11609:4;11605:38;11674:4;11662:10;11659:20;11656:47;;;-1:-1:-1;11697:4:1;11656:47;11752:2;11747:3;11743:12;11740:1;11736:20;11730:4;11726:31;11716:41;;11807:82;11825:2;11818:5;11815:13;11807:82;;;11870:17;;;11851:1;11840:13;11807:82;;;11811:3;;;11360:545;;;:::o;12081:1352::-;12207:3;12201:10;12234:18;12226:6;12223:30;12220:56;;;12256:18;;:::i;:::-;12285:97;12375:6;12335:38;12367:4;12361:11;12335:38;:::i;:::-;12329:4;12285:97;:::i;:::-;12437:4;;12501:2;12490:14;;12518:1;12513:663;;;;13220:1;13237:6;13234:89;;;-1:-1:-1;13289:19:1;;;13283:26;13234:89;-1:-1:-1;;12038:1:1;12034:11;;;12030:24;12026:29;12016:40;12062:1;12058:11;;;12013:57;13336:81;;12483:944;;12513:663;11307:1;11300:14;;;11344:4;11331:18;;-1:-1:-1;;12549:20:1;;;12667:236;12681:7;12678:1;12675:14;12667:236;;;12770:19;;;12764:26;12749:42;;12862:27;;;;12830:1;12818:14;;;;12697:19;;12667:236;;;12671:3;12931:6;12922:7;12919:19;12916:201;;;12992:19;;;12986:26;-1:-1:-1;;13075:1:1;13071:14;;;13087:3;13067:24;13063:37;13059:42;13044:58;13029:74;;12916:201;-1:-1:-1;;;;;13163:1:1;13147:14;;;13143:22;13130:36;;-1:-1:-1;12081:1352:1:o;16431:168::-;16504:9;;;16535;;16552:15;;;16546:22;;16532:37;16522:71;;16573:18;;:::i;17721:1256::-;17945:3;17983:6;17977:13;18009:4;18022:64;18079:6;18074:3;18069:2;18061:6;18057:15;18022:64;:::i;:::-;18149:13;;18108:16;;;;18171:68;18149:13;18108:16;18206:15;;;18171:68;:::i;:::-;18328:13;;18261:20;;;18301:1;;18366:36;18328:13;18366:36;:::i;:::-;18421:1;18438:18;;;18465:141;;;;18620:1;18615:337;;;;18431:521;;18465:141;-1:-1:-1;;18500:24:1;;18486:39;;18577:16;;18570:24;18556:39;;18545:51;;;-1:-1:-1;18465:141:1;;18615:337;18646:6;18643:1;18636:17;18694:2;18691:1;18681:16;18719:1;18733:169;18747:8;18744:1;18741:15;18733:169;;;18829:14;;18814:13;;;18807:37;18872:16;;;;18764:10;;18733:169;;;18737:3;;18933:8;18926:5;18922:20;18915:27;;18431:521;-1:-1:-1;18968:3:1;;17721:1256;-1:-1:-1;;;;;;;;;;17721:1256:1:o;20617:128::-;20684:9;;;20705:11;;;20702:37;;;20719:18;;:::i;21468:414::-;21670:2;21652:21;;;21709:2;21689:18;;;21682:30;21748:34;21743:2;21728:18;;21721:62;-1:-1:-1;;;21814:2:1;21799:18;;21792:48;21872:3;21857:19;;21468:414::o;21887:127::-;21948:10;21943:3;21939:20;21936:1;21929:31;21979:4;21976:1;21969:15;22003:4;22000:1;21993:15;22019:120;22059:1;22085;22075:35;;22090:18;;:::i;:::-;-1:-1:-1;22124:9:1;;22019:120::o;22144:112::-;22176:1;22202;22192:35;;22207:18;;:::i;:::-;-1:-1:-1;22241:9:1;;22144:112::o;22261:489::-;-1:-1:-1;;;;;22530:15:1;;;22512:34;;22582:15;;22577:2;22562:18;;22555:43;22629:2;22614:18;;22607:34;;;22677:3;22672:2;22657:18;;22650:31;;;22455:4;;22698:46;;22724:19;;22716:6;22698:46;:::i;:::-;22690:54;22261:489;-1:-1:-1;;;;;;22261:489:1:o;22755:249::-;22824:6;22877:2;22865:9;22856:7;22852:23;22848:32;22845:52;;;22893:1;22890;22883:12;22845:52;22925:9;22919:16;22944:30;22968:5;22944:30;:::i;23009:127::-;23070:10;23065:3;23061:20;23058:1;23051:31;23101:4;23098:1;23091:15;23125:4;23122:1;23115:15

Swarm Source

ipfs://9b5b81aeb56ce9e6c00528744d9a2317e7e1ef090bdcd524766882a314472bdc
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.