ETH Price: $3,486.13 (+4.75%)

Token

Uncharted: Chapter One, The Southern Ring (Uncharted: Chapter One, The Southern Ring)
 

Overview

Max Total Supply

6,000 Uncharted: Chapter One, The Southern Ring

Holders

422

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x8d852bffec68075148543a1103aee77c09bf1e18
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:
UnchartedToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-02
*/

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


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: address zero is not a valid owner");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `ids` and `amounts` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: contracts/unchartedToken.sol


pragma solidity 0.8.17;




contract UnchartedToken is ERC1155, Ownable {
    uint256 private constant PRESALE_AMOUNT = 1000;
    uint256 private constant MINT_AMOUNT = 5000;
    uint256 private constant PRESALE_LIMIT_PER_WALLET = 50;

    uint8 private constant TYPE0 = 0;

    IERC20 public usdcAddress;

    // These variable are used to display contract name in Metamask, Opensea and so on
    string public name;
    string public symbol;

    event BuyEvent(address indexed buyer, uint256 indexed amount);
    event GiveAwayEvent(address indexed _address, uint256 indexed amount);
    event PriceChangedEvent(uint256 indexed price);
    event UsdcAddressChangedEvent(address indexed usdcAddress);
    event WalletToSendAddressChangedEvent(address indexed newAddress);
    event UriAddressChangedEvent(string indexed uri);
    event UpdateNameEvent(string indexed oldName, string indexed newName);
    event UpdateSymbolEvent(string indexed oldSymbol, string indexed newSymbol);

    uint256 public tokenPrice = 16 * 1e16; // in the native currency (ETH) - wei

    // allowable smart contract NFT limit (for pre-sale and sale limitation)
    uint256 public allowableSCLimit = MINT_AMOUNT;

    address payable public walletToSend; // The wallet where ETH from purchases should be sent

    constructor(address _usdcAddress, address payable _walletToSend, string memory _uri, string memory _name, string memory _symbol) ERC1155(_uri) {
        _mint(address(this), TYPE0, MINT_AMOUNT + PRESALE_AMOUNT, "");

        walletToSend = _walletToSend;
        usdcAddress = IERC20(_usdcAddress);
        name = _name;
        symbol = _symbol;
    }

    function setTokenPrice(uint256 price) external onlyOwner {
        tokenPrice = price;

        emit PriceChangedEvent(price);
    }

    function setUsdcAddress(address _usdcAddress) external onlyOwner {
        require(_usdcAddress != address(0x0), "Invalid address");
        usdcAddress = IERC20(_usdcAddress);

        emit UsdcAddressChangedEvent(_usdcAddress);
    }

    function setWalletToSend(address payable newAddress) external onlyOwner {
        require(newAddress != address(0x0), "Invalid address");
        walletToSend = newAddress;

        emit WalletToSendAddressChangedEvent(newAddress);
    }

    function setURI(string memory _uri) external onlyOwner {
        _setURI(_uri);

        emit UriAddressChangedEvent(_uri);
    }

    function buy(uint256 amount) external payable {
        require(tokenPrice > 0, "Not for sale yet");
        require(amount * tokenPrice == msg.value, "ETH amount mismatch");
        require(this.balanceOf(address(this), TYPE0) >= amount, "There is no such amount of tokens");
        require(
            this.balanceOf(address(this), TYPE0) - amount >= allowableSCLimit,
            string.concat("Limit reached")
        );
        if (this.balanceOf(address(this), TYPE0) > MINT_AMOUNT) {
            // It is pre-sale
            require(
                this.balanceOf(msg.sender, TYPE0) + amount <= PRESALE_LIMIT_PER_WALLET,
                "User can't have this amount of tokens for presale"
            );
        }

        walletToSend.transfer(msg.value);
        _safeTransferFrom(address(this), msg.sender, TYPE0, amount, "0x0");

        emit BuyEvent(msg.sender, amount);
    }

    function giveAway(address _address, uint256 amount) external onlyOwner {
        _safeTransferFrom(address(this), _address, TYPE0, amount, "GiveAway");

        emit GiveAwayEvent(_address, amount);
    }

    function airdrop(address[] memory recipients, uint256[] memory amount) external {
        require(recipients.length == amount.length, "Recipient and amount arrays mismatch");
        uint sum = 0;
        for (uint i = 0; i < recipients.length; i++) {
            require(recipients[i] != address(0), "Recipient should not have 0x0 address");
            sum += amount[i];
        }
        require(usdcAddress.allowance(msg.sender, address(this)) >= sum, "Insufficient USDC allowance");
        require(usdcAddress.balanceOf(msg.sender) >= sum, "Insufficient USDC");

        for (uint i = 0; i < recipients.length; i++) {
            require(
                usdcAddress.transferFrom(msg.sender, recipients[i], amount[i]) == true,
                "Unable to transfer"
            );
        }
    }

    function updateName(string memory newName) external onlyOwner {
        string memory oldName = name;
        name = newName;
        emit UpdateNameEvent(oldName, name);
    }

    function updateSymbol(string memory newSymbol) external onlyOwner {
        string memory oldSymbol = symbol;
        symbol = newSymbol;
        emit UpdateSymbolEvent(oldSymbol, symbol);
    }

    // If a user sends other tokens to this smart contract, the owner can transfer it to himself.
    function withdrawToken(address _tokenContract, address _recipient, uint256 _amount) external onlyOwner {
        IERC20 tokenContract = IERC20(_tokenContract);

        // transfer the token from address of this contract
        // to address of the user (executing the withdrawToken() function)
        tokenContract.transfer(_recipient, _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_usdcAddress","type":"address"},{"internalType":"address payable","name":"_walletToSend","type":"address"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"GiveAwayEvent","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":"uint256","name":"price","type":"uint256"}],"name":"PriceChangedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"oldName","type":"string"},{"indexed":true,"internalType":"string","name":"newName","type":"string"}],"name":"UpdateNameEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"oldSymbol","type":"string"},{"indexed":true,"internalType":"string","name":"newSymbol","type":"string"}],"name":"UpdateSymbolEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"uri","type":"string"}],"name":"UriAddressChangedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usdcAddress","type":"address"}],"name":"UsdcAddressChangedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"WalletToSendAddressChangedEvent","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowableSCLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"uint256","name":"price","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdcAddress","type":"address"}],"name":"setUsdcAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"setWalletToSend","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":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newName","type":"string"}],"name":"updateName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newSymbol","type":"string"}],"name":"updateSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdcAddress","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletToSend","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526702386f26fc1000006007556113886008553480156200002357600080fd5b50604051620031c8380380620031c8833981016040819052620000469162000596565b826200005281620000e3565b506200005e33620000f5565b6200008a306000620000756103e861138862000653565b60408051602081019091526000815262000147565b600980546001600160a01b038087166001600160a01b03199283161790925560048054928816929091169190911790556005620000c8838262000706565b506006620000d7828262000706565b50505050505062000951565b6002620000f1828262000706565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416620001ad5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084015b60405180910390fd5b336000620001bb8562000269565b90506000620001ca8562000269565b90506000868152602081815260408083206001600160a01b038b16845290915281208054879290620001fe90849062000653565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46200026083600089898989620002bf565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110620002a657620002a6620007d2565b602090810291909101015292915050565b505050505050565b620002de846001600160a01b03166200048b60201b6200162d1760201c565b15620002b75760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906200031a908990899088908890889060040162000816565b6020604051808303816000875af192505050801562000358575060408051601f3d908101601f1916820190925262000355918101906200085d565b60015b62000418576200036762000890565b806308c379a003620003a757506200037e620008ad565b806200038b5750620003a9565b8060405162461bcd60e51b8152600401620001a491906200093c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401620001a4565b6001600160e01b0319811663f23a6e6160e01b14620002605760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401620001a4565b6001600160a01b03163b151590565b6001600160a01b0381168114620004b057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715620004f157620004f1620004b3565b6040525050565b60005b8381101562000515578181015183820152602001620004fb565b50506000910152565b600082601f8301126200053057600080fd5b81516001600160401b038111156200054c576200054c620004b3565b60405162000565601f8301601f191660200182620004c9565b8181528460208386010111156200057b57600080fd5b6200058e826020830160208701620004f8565b949350505050565b600080600080600060a08688031215620005af57600080fd5b8551620005bc816200049a565b6020870151909550620005cf816200049a565b60408701519094506001600160401b0380821115620005ed57600080fd5b620005fb89838a016200051e565b945060608801519150808211156200061257600080fd5b6200062089838a016200051e565b935060808801519150808211156200063757600080fd5b5062000646888289016200051e565b9150509295509295909350565b808201808211156200067557634e487b7160e01b600052601160045260246000fd5b92915050565b600181811c908216806200069057607f821691505b602082108103620006b157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200070157600081815260208120601f850160051c81016020861015620006e05750805b601f850160051c820191505b81811015620002b757828155600101620006ec565b505050565b81516001600160401b03811115620007225762000722620004b3565b6200073a816200073384546200067b565b84620006b7565b602080601f831160018114620007725760008415620007595750858301515b600019600386901b1c1916600185901b178555620002b7565b600085815260208120601f198616915b82811015620007a35788860151825594840194600190910190840162000782565b5085821015620007c25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b6000815180845262000802816020860160208601620004f8565b601f01601f19169290920160200192915050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906200085290830184620007e8565b979650505050505050565b6000602082840312156200087057600080fd5b81516001600160e01b0319811681146200088957600080fd5b9392505050565b600060033d1115620008aa5760046000803e5060005160e01c5b90565b600060443d1015620008bc5790565b6040516003193d81016004833e81513d6001600160401b038083116024840183101715620008ec57505050505090565b8285019150815181811115620009055750505050505090565b843d8701016020828501011115620009205750505050505090565b6200093160208286010187620004c9565b509095945050505050565b602081526000620008896020830184620007e8565b61286780620009616000396000f3fe60806040526004361061019b5760003560e01c8063715018a6116100ec578063c92059ef1161008a578063d96a094a11610064578063d96a094a146104a0578063e985e9c5146104b3578063f242432a146104fc578063f2fde38b1461051c57600080fd5b8063c92059ef14610440578063ca80014414610460578063d38bcdee1461048057600080fd5b80638da5cb5b116100c65780638da5cb5b146103cd57806395d89b41146103eb5780639967586214610400578063a22cb4651461042057600080fd5b8063715018a6146103825780637ff9b5961461039757806384da92a7146103ad57600080fd5b80630e89341c116101595780634e1273f4116101335780634e1273f4146102f5578063537f53121461032257806367243482146103425780636a61e5fc1461036257600080fd5b80630e89341c1461029f5780631b82a925146102bf5780632eb2c2d6146102d557600080fd5b8062fdd58e146101a057806301e33667146101d357806301ffc9a7146101f557806302d454571461022557806302fe53051461025d57806306fdde031461027d575b600080fd5b3480156101ac57600080fd5b506101c06101bb366004611d5a565b61053c565b6040519081526020015b60405180910390f35b3480156101df57600080fd5b506101f36101ee366004611d86565b6105d5565b005b34801561020157600080fd5b50610215610210366004611ddd565b61065a565b60405190151581526020016101ca565b34801561023157600080fd5b50600454610245906001600160a01b031681565b6040516001600160a01b0390911681526020016101ca565b34801561026957600080fd5b506101f3610278366004611ea2565b6106aa565b34801561028957600080fd5b506102926106fc565b6040516101ca9190611f43565b3480156102ab57600080fd5b506102926102ba366004611f56565b61078a565b3480156102cb57600080fd5b506101c060085481565b3480156102e157600080fd5b506101f36102f0366004612024565b61081e565b34801561030157600080fd5b506103156103103660046120d2565b610863565b6040516101ca91906121da565b34801561032e57600080fd5b506101f361033d366004611ea2565b61098d565b34801561034e57600080fd5b506101f361035d3660046120d2565b610a8d565b34801561036e57600080fd5b506101f361037d366004611f56565b610e64565b34801561038e57600080fd5b506101f3610e9f565b3480156103a357600080fd5b506101c060075481565b3480156103b957600080fd5b506101f36103c8366004611ea2565b610eb3565b3480156103d957600080fd5b506003546001600160a01b0316610245565b3480156103f757600080fd5b50610292610fb3565b34801561040c57600080fd5b50600954610245906001600160a01b031681565b34801561042c57600080fd5b506101f361043b3660046121fb565b610fc0565b34801561044c57600080fd5b506101f361045b366004612234565b610fcf565b34801561046c57600080fd5b506101f361047b366004611d5a565b611069565b34801561048c57600080fd5b506101f361049b366004612234565b6110dc565b6101f36104ae366004611f56565b611175565b3480156104bf57600080fd5b506102156104ce366004612251565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561050857600080fd5b506101f361051736600461227f565b61156f565b34801561052857600080fd5b506101f3610537366004612234565b6115b4565b60006001600160a01b0383166105ac5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b6105dd61163c565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284919082169063a9059cbb906044016020604051808303816000875af115801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906122e8565b5050505050565b60006001600160e01b03198216636cdb3d1360e11b148061068b57506001600160e01b031982166303a24d0760e21b145b806105cf57506301ffc9a760e01b6001600160e01b03198316146105cf565b6106b261163c565b6106bb81611696565b806040516106c99190612305565b604051908190038120907f6371393c3d9555c2d01fb75661714b2268aa8b568c2f794fd8103f941bcafec990600090a250565b6005805461070990612321565b80601f016020809104026020016040519081016040528092919081815260200182805461073590612321565b80156107825780601f1061075757610100808354040283529160200191610782565b820191906000526020600020905b81548152906001019060200180831161076557829003601f168201915b505050505081565b60606002805461079990612321565b80601f01602080910402602001604051908101604052809291908181526020018280546107c590612321565b80156108125780601f106107e757610100808354040283529160200191610812565b820191906000526020600020905b8154815290600101906020018083116107f557829003601f168201915b50505050509050919050565b6001600160a01b03851633148061083a575061083a85336104ce565b6108565760405162461bcd60e51b81526004016105a39061235b565b61065385858585856116a2565b606081518351146108c85760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105a3565b6000835167ffffffffffffffff8111156108e4576108e4611e01565b60405190808252806020026020018201604052801561090d578160200160208202803683370190505b50905060005b845181101561098557610958858281518110610931576109316123aa565b602002602001015185838151811061094b5761094b6123aa565b602002602001015161053c565b82828151811061096a5761096a6123aa565b602090810291909101015261097e816123d6565b9050610913565b509392505050565b61099561163c565b6000600680546109a490612321565b80601f01602080910402602001604051908101604052809291908181526020018280546109d090612321565b8015610a1d5780601f106109f257610100808354040283529160200191610a1d565b820191906000526020600020905b815481529060010190602001808311610a0057829003601f168201915b505050505090508160069081610a33919061243a565b506006604051610a4391906124fa565b604051809103902081604051610a599190612305565b604051908190038120907f5344d4d433345406ae6b78f1be2f3317b44670bb31b729561391004fbdf99cc790600090a35050565b8051825114610aea5760405162461bcd60e51b8152602060048201526024808201527f526563697069656e7420616e6420616d6f756e7420617272617973206d69736d6044820152630c2e8c6d60e31b60648201526084016105a3565b6000805b8351811015610bb95760006001600160a01b0316848281518110610b1457610b146123aa565b60200260200101516001600160a01b031603610b805760405162461bcd60e51b815260206004820152602560248201527f526563697069656e742073686f756c64206e6f74206861766520307830206164604482015264647265737360d81b60648201526084016105a3565b828181518110610b9257610b926123aa565b602002602001015182610ba59190612570565b915080610bb1816123d6565b915050610aee565b5060048054604051636eb1769f60e11b8152339281019290925230602483015282916001600160a01b039091169063dd62ed3e90604401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612583565b1015610c7f5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74205553444320616c6c6f77616e6365000000000060448201526064016105a3565b600480546040516370a0823160e01b8152339281019290925282916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf09190612583565b1015610d325760405162461bcd60e51b8152602060048201526011602482015270496e73756666696369656e74205553444360781b60448201526064016105a3565b60005b8351811015610e5e5760045484516001600160a01b03909116906323b872dd903390879085908110610d6957610d696123aa565b6020026020010151868581518110610d8357610d836123aa565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0691906122e8565b1515600114610e4c5760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b60448201526064016105a3565b80610e56816123d6565b915050610d35565b50505050565b610e6c61163c565b600781905560405181907f43cc2bf0d89011a9c152ad3160caf9678bb178be531fde89e6fcd723ac2ad28190600090a250565b610ea761163c565b610eb1600061187f565b565b610ebb61163c565b600060058054610eca90612321565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef690612321565b8015610f435780601f10610f1857610100808354040283529160200191610f43565b820191906000526020600020905b815481529060010190602001808311610f2657829003601f168201915b505050505090508160059081610f59919061243a565b506005604051610f6991906124fa565b604051809103902081604051610f7f9190612305565b604051908190038120907f7c792b0935c1aad589d60c776f75efe6bea81bce17fda35401dad37cf9bff7ed90600090a35050565b6006805461070990612321565b610fcb3383836118d1565b5050565b610fd761163c565b6001600160a01b03811661101f5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016105a3565b600980546001600160a01b0319166001600160a01b0383169081179091556040517fec110daf3a677eeaaa88ee47fc5f448169c5d572c7120a743a3a22f8c862191190600090a250565b61107161163c565b6110a23083600060ff168460405180604001604052806008815260200167476976654177617960c01b8152506119b1565b60405181906001600160a01b038416907f6168705e0a60590b36665938201fba6487d17d61c8fc43c835c9e458a9a0812890600090a35050565b6110e461163c565b6001600160a01b03811661112c5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016105a3565b600480546001600160a01b0319166001600160a01b0383169081179091556040517e38d8b0f1b31328df3e779674a819cfa6c748e46dce8dca98c4a371433a639790600090a250565b6000600754116111ba5760405162461bcd60e51b815260206004820152601060248201526f139bdd08199bdc881cd85b19481e595d60821b60448201526064016105a3565b34600754826111c9919061259c565b1461120c5760405162461bcd60e51b815260206004820152601360248201527208aa89040c2dadeeadce840dad2e6dac2e8c6d606b1b60448201526064016105a3565b604051627eeac760e11b8152306004820181905260006024830152829162fdd58e90604401602060405180830381865afa15801561124e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112729190612583565b10156112ca5760405162461bcd60e51b815260206004820152602160248201527f5468657265206973206e6f207375636820616d6f756e74206f6620746f6b656e6044820152607360f81b60648201526084016105a3565b600854604051627eeac760e11b8152306004820181905260006024830152839162fdd58e90604401602060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113339190612583565b61133d91906125b3565b1015604051602001611362906c131a5b5a5d081c995858da1959609a1b8152600d0190565b6040516020818303038152906040529061138f5760405162461bcd60e51b81526004016105a39190611f43565b50604051627eeac760e11b81523060048201819052600060248301526113889162fdd58e90604401602060405180830381865afa1580156113d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f89190612583565b11156114d957604051627eeac760e11b8152336004820152600060248201526032908290309062fdd58e90604401602060405180830381865afa158015611443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114679190612583565b6114719190612570565b11156114d95760405162461bcd60e51b815260206004820152603160248201527f557365722063616e27742068617665207468697320616d6f756e74206f6620746044820152706f6b656e7320666f722070726573616c6560781b60648201526084016105a3565b6009546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611512573d6000803e3d6000fd5b5061153f3033600060ff16846040518060400160405280600381526020016203078360ec1b8152506119b1565b604051819033907f1027a425782977e3813afc94e489dccce57fecec47b5b531804d7d8e9eb26bff90600090a350565b6001600160a01b03851633148061158b575061158b85336104ce565b6115a75760405162461bcd60e51b81526004016105a39061235b565b61065385858585856119b1565b6115bc61163c565b6001600160a01b0381166116215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105a3565b61162a8161187f565b50565b6001600160a01b03163b151590565b6003546001600160a01b03163314610eb15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105a3565b6002610fcb828261243a565b81518351146117045760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016105a3565b6001600160a01b03841661172a5760405162461bcd60e51b81526004016105a3906125c6565b3360005b845181101561181157600085828151811061174b5761174b6123aa565b602002602001015190506000858381518110611769576117696123aa565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156117b95760405162461bcd60e51b81526004016105a39061260b565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906117f6908490612570565b925050819055505050508061180a906123d6565b905061172e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611861929190612655565b60405180910390a4611877818787878787611adb565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036119445760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105a3565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166119d75760405162461bcd60e51b81526004016105a3906125c6565b3360006119e385611c3f565b905060006119f085611c3f565b90506000868152602081815260408083206001600160a01b038c16845290915290205485811015611a335760405162461bcd60e51b81526004016105a39061260b565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611a70908490612570565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611ad0848a8a8a8a8a611c8a565b505050505050505050565b6001600160a01b0384163b156118775760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611b1f9089908990889088908890600401612683565b6020604051808303816000875af1925050508015611b5a575060408051601f3d908101601f19168201909252611b57918101906126e1565b60015b611c0657611b666126fe565b806308c379a003611b9f5750611b7a61271a565b80611b855750611ba1565b8060405162461bcd60e51b81526004016105a39190611f43565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105a3565b6001600160e01b0319811663bc197c8160e01b14611c365760405162461bcd60e51b81526004016105a3906127a4565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611c7957611c796123aa565b602090810291909101015292915050565b6001600160a01b0384163b156118775760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611cce90899089908890889088906004016127ec565b6020604051808303816000875af1925050508015611d09575060408051601f3d908101601f19168201909252611d06918101906126e1565b60015b611d1557611b666126fe565b6001600160e01b0319811663f23a6e6160e01b14611c365760405162461bcd60e51b81526004016105a3906127a4565b6001600160a01b038116811461162a57600080fd5b60008060408385031215611d6d57600080fd5b8235611d7881611d45565b946020939093013593505050565b600080600060608486031215611d9b57600080fd5b8335611da681611d45565b92506020840135611db681611d45565b929592945050506040919091013590565b6001600160e01b03198116811461162a57600080fd5b600060208284031215611def57600080fd5b8135611dfa81611dc7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611e3d57611e3d611e01565b6040525050565b600067ffffffffffffffff831115611e5e57611e5e611e01565b604051611e75601f8501601f191660200182611e17565b809150838152848484011115611e8a57600080fd5b83836020830137600060208583010152509392505050565b600060208284031215611eb457600080fd5b813567ffffffffffffffff811115611ecb57600080fd5b8201601f81018413611edc57600080fd5b611eeb84823560208401611e44565b949350505050565b60005b83811015611f0e578181015183820152602001611ef6565b50506000910152565b60008151808452611f2f816020860160208601611ef3565b601f01601f19169290920160200192915050565b602081526000611dfa6020830184611f17565b600060208284031215611f6857600080fd5b5035919050565b600067ffffffffffffffff821115611f8957611f89611e01565b5060051b60200190565b600082601f830112611fa457600080fd5b81356020611fb182611f6f565b604051611fbe8282611e17565b83815260059390931b8501820192828101915086841115611fde57600080fd5b8286015b84811015611ff95780358352918301918301611fe2565b509695505050505050565b600082601f83011261201557600080fd5b611dfa83833560208501611e44565b600080600080600060a0868803121561203c57600080fd5b853561204781611d45565b9450602086013561205781611d45565b9350604086013567ffffffffffffffff8082111561207457600080fd5b61208089838a01611f93565b9450606088013591508082111561209657600080fd5b6120a289838a01611f93565b935060808801359150808211156120b857600080fd5b506120c588828901612004565b9150509295509295909350565b600080604083850312156120e557600080fd5b823567ffffffffffffffff808211156120fd57600080fd5b818501915085601f83011261211157600080fd5b8135602061211e82611f6f565b60405161212b8282611e17565b83815260059390931b850182019282810191508984111561214b57600080fd5b948201945b8386101561217257853561216381611d45565b82529482019490820190612150565b9650508601359250508082111561218857600080fd5b5061219585828601611f93565b9150509250929050565b600081518084526020808501945080840160005b838110156121cf578151875295820195908201906001016121b3565b509495945050505050565b602081526000611dfa602083018461219f565b801515811461162a57600080fd5b6000806040838503121561220e57600080fd5b823561221981611d45565b91506020830135612229816121ed565b809150509250929050565b60006020828403121561224657600080fd5b8135611dfa81611d45565b6000806040838503121561226457600080fd5b823561226f81611d45565b9150602083013561222981611d45565b600080600080600060a0868803121561229757600080fd5b85356122a281611d45565b945060208601356122b281611d45565b93506040860135925060608601359150608086013567ffffffffffffffff8111156122dc57600080fd5b6120c588828901612004565b6000602082840312156122fa57600080fd5b8151611dfa816121ed565b60008251612317818460208701611ef3565b9190910192915050565b600181811c9082168061233557607f821691505b60208210810361235557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016123e8576123e86123c0565b5060010190565b601f82111561243557600081815260208120601f850160051c810160208610156124165750805b601f850160051c820191505b8181101561187757828155600101612422565b505050565b815167ffffffffffffffff81111561245457612454611e01565b612468816124628454612321565b846123ef565b602080601f83116001811461249d57600084156124855750858301515b600019600386901b1c1916600185901b178555611877565b600085815260208120601f198616915b828110156124cc578886015182559484019460019091019084016124ad565b50858210156124ea5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600080835461250881612321565b60018281168015612520576001811461253557612564565b60ff1984168752821515830287019450612564565b8760005260208060002060005b8581101561255b5781548a820152908401908201612542565b50505082870194505b50929695505050505050565b808201808211156105cf576105cf6123c0565b60006020828403121561259557600080fd5b5051919050565b80820281158282048414176105cf576105cf6123c0565b818103818111156105cf576105cf6123c0565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612668604083018561219f565b828103602084015261267a818561219f565b95945050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906126af9083018661219f565b82810360608401526126c1818661219f565b905082810360808401526126d58185611f17565b98975050505050505050565b6000602082840312156126f357600080fd5b8151611dfa81611dc7565b600060033d11156127175760046000803e5060005160e01c5b90565b600060443d10156127285790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561275857505050505090565b82850191508151818111156127705750505050505090565b843d870101602082850101111561278a5750505050505090565b61279960208286010187611e17565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061282690830184611f17565b97965050505050505056fea2646970667358221220ebf921deb10fc0129634282291cc8c6b3548919cf37a6cecdae0f75368484f2564736f6c63430008110033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000090f3caf118b3c429b2d259cc53e99bc0115272600000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f746865756e636861727465642e73706163652f302f7b69647d2e6a736f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029556e636861727465643a2043686170746572204f6e652c2054686520536f75746865726e2052696e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029556e636861727465643a2043686170746572204f6e652c2054686520536f75746865726e2052696e670000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061019b5760003560e01c8063715018a6116100ec578063c92059ef1161008a578063d96a094a11610064578063d96a094a146104a0578063e985e9c5146104b3578063f242432a146104fc578063f2fde38b1461051c57600080fd5b8063c92059ef14610440578063ca80014414610460578063d38bcdee1461048057600080fd5b80638da5cb5b116100c65780638da5cb5b146103cd57806395d89b41146103eb5780639967586214610400578063a22cb4651461042057600080fd5b8063715018a6146103825780637ff9b5961461039757806384da92a7146103ad57600080fd5b80630e89341c116101595780634e1273f4116101335780634e1273f4146102f5578063537f53121461032257806367243482146103425780636a61e5fc1461036257600080fd5b80630e89341c1461029f5780631b82a925146102bf5780632eb2c2d6146102d557600080fd5b8062fdd58e146101a057806301e33667146101d357806301ffc9a7146101f557806302d454571461022557806302fe53051461025d57806306fdde031461027d575b600080fd5b3480156101ac57600080fd5b506101c06101bb366004611d5a565b61053c565b6040519081526020015b60405180910390f35b3480156101df57600080fd5b506101f36101ee366004611d86565b6105d5565b005b34801561020157600080fd5b50610215610210366004611ddd565b61065a565b60405190151581526020016101ca565b34801561023157600080fd5b50600454610245906001600160a01b031681565b6040516001600160a01b0390911681526020016101ca565b34801561026957600080fd5b506101f3610278366004611ea2565b6106aa565b34801561028957600080fd5b506102926106fc565b6040516101ca9190611f43565b3480156102ab57600080fd5b506102926102ba366004611f56565b61078a565b3480156102cb57600080fd5b506101c060085481565b3480156102e157600080fd5b506101f36102f0366004612024565b61081e565b34801561030157600080fd5b506103156103103660046120d2565b610863565b6040516101ca91906121da565b34801561032e57600080fd5b506101f361033d366004611ea2565b61098d565b34801561034e57600080fd5b506101f361035d3660046120d2565b610a8d565b34801561036e57600080fd5b506101f361037d366004611f56565b610e64565b34801561038e57600080fd5b506101f3610e9f565b3480156103a357600080fd5b506101c060075481565b3480156103b957600080fd5b506101f36103c8366004611ea2565b610eb3565b3480156103d957600080fd5b506003546001600160a01b0316610245565b3480156103f757600080fd5b50610292610fb3565b34801561040c57600080fd5b50600954610245906001600160a01b031681565b34801561042c57600080fd5b506101f361043b3660046121fb565b610fc0565b34801561044c57600080fd5b506101f361045b366004612234565b610fcf565b34801561046c57600080fd5b506101f361047b366004611d5a565b611069565b34801561048c57600080fd5b506101f361049b366004612234565b6110dc565b6101f36104ae366004611f56565b611175565b3480156104bf57600080fd5b506102156104ce366004612251565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561050857600080fd5b506101f361051736600461227f565b61156f565b34801561052857600080fd5b506101f3610537366004612234565b6115b4565b60006001600160a01b0383166105ac5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b6105dd61163c565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284919082169063a9059cbb906044016020604051808303816000875af115801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906122e8565b5050505050565b60006001600160e01b03198216636cdb3d1360e11b148061068b57506001600160e01b031982166303a24d0760e21b145b806105cf57506301ffc9a760e01b6001600160e01b03198316146105cf565b6106b261163c565b6106bb81611696565b806040516106c99190612305565b604051908190038120907f6371393c3d9555c2d01fb75661714b2268aa8b568c2f794fd8103f941bcafec990600090a250565b6005805461070990612321565b80601f016020809104026020016040519081016040528092919081815260200182805461073590612321565b80156107825780601f1061075757610100808354040283529160200191610782565b820191906000526020600020905b81548152906001019060200180831161076557829003601f168201915b505050505081565b60606002805461079990612321565b80601f01602080910402602001604051908101604052809291908181526020018280546107c590612321565b80156108125780601f106107e757610100808354040283529160200191610812565b820191906000526020600020905b8154815290600101906020018083116107f557829003601f168201915b50505050509050919050565b6001600160a01b03851633148061083a575061083a85336104ce565b6108565760405162461bcd60e51b81526004016105a39061235b565b61065385858585856116a2565b606081518351146108c85760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105a3565b6000835167ffffffffffffffff8111156108e4576108e4611e01565b60405190808252806020026020018201604052801561090d578160200160208202803683370190505b50905060005b845181101561098557610958858281518110610931576109316123aa565b602002602001015185838151811061094b5761094b6123aa565b602002602001015161053c565b82828151811061096a5761096a6123aa565b602090810291909101015261097e816123d6565b9050610913565b509392505050565b61099561163c565b6000600680546109a490612321565b80601f01602080910402602001604051908101604052809291908181526020018280546109d090612321565b8015610a1d5780601f106109f257610100808354040283529160200191610a1d565b820191906000526020600020905b815481529060010190602001808311610a0057829003601f168201915b505050505090508160069081610a33919061243a565b506006604051610a4391906124fa565b604051809103902081604051610a599190612305565b604051908190038120907f5344d4d433345406ae6b78f1be2f3317b44670bb31b729561391004fbdf99cc790600090a35050565b8051825114610aea5760405162461bcd60e51b8152602060048201526024808201527f526563697069656e7420616e6420616d6f756e7420617272617973206d69736d6044820152630c2e8c6d60e31b60648201526084016105a3565b6000805b8351811015610bb95760006001600160a01b0316848281518110610b1457610b146123aa565b60200260200101516001600160a01b031603610b805760405162461bcd60e51b815260206004820152602560248201527f526563697069656e742073686f756c64206e6f74206861766520307830206164604482015264647265737360d81b60648201526084016105a3565b828181518110610b9257610b926123aa565b602002602001015182610ba59190612570565b915080610bb1816123d6565b915050610aee565b5060048054604051636eb1769f60e11b8152339281019290925230602483015282916001600160a01b039091169063dd62ed3e90604401602060405180830381865afa158015610c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c319190612583565b1015610c7f5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74205553444320616c6c6f77616e6365000000000060448201526064016105a3565b600480546040516370a0823160e01b8152339281019290925282916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf09190612583565b1015610d325760405162461bcd60e51b8152602060048201526011602482015270496e73756666696369656e74205553444360781b60448201526064016105a3565b60005b8351811015610e5e5760045484516001600160a01b03909116906323b872dd903390879085908110610d6957610d696123aa565b6020026020010151868581518110610d8357610d836123aa565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0691906122e8565b1515600114610e4c5760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b60448201526064016105a3565b80610e56816123d6565b915050610d35565b50505050565b610e6c61163c565b600781905560405181907f43cc2bf0d89011a9c152ad3160caf9678bb178be531fde89e6fcd723ac2ad28190600090a250565b610ea761163c565b610eb1600061187f565b565b610ebb61163c565b600060058054610eca90612321565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef690612321565b8015610f435780601f10610f1857610100808354040283529160200191610f43565b820191906000526020600020905b815481529060010190602001808311610f2657829003601f168201915b505050505090508160059081610f59919061243a565b506005604051610f6991906124fa565b604051809103902081604051610f7f9190612305565b604051908190038120907f7c792b0935c1aad589d60c776f75efe6bea81bce17fda35401dad37cf9bff7ed90600090a35050565b6006805461070990612321565b610fcb3383836118d1565b5050565b610fd761163c565b6001600160a01b03811661101f5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016105a3565b600980546001600160a01b0319166001600160a01b0383169081179091556040517fec110daf3a677eeaaa88ee47fc5f448169c5d572c7120a743a3a22f8c862191190600090a250565b61107161163c565b6110a23083600060ff168460405180604001604052806008815260200167476976654177617960c01b8152506119b1565b60405181906001600160a01b038416907f6168705e0a60590b36665938201fba6487d17d61c8fc43c835c9e458a9a0812890600090a35050565b6110e461163c565b6001600160a01b03811661112c5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016105a3565b600480546001600160a01b0319166001600160a01b0383169081179091556040517e38d8b0f1b31328df3e779674a819cfa6c748e46dce8dca98c4a371433a639790600090a250565b6000600754116111ba5760405162461bcd60e51b815260206004820152601060248201526f139bdd08199bdc881cd85b19481e595d60821b60448201526064016105a3565b34600754826111c9919061259c565b1461120c5760405162461bcd60e51b815260206004820152601360248201527208aa89040c2dadeeadce840dad2e6dac2e8c6d606b1b60448201526064016105a3565b604051627eeac760e11b8152306004820181905260006024830152829162fdd58e90604401602060405180830381865afa15801561124e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112729190612583565b10156112ca5760405162461bcd60e51b815260206004820152602160248201527f5468657265206973206e6f207375636820616d6f756e74206f6620746f6b656e6044820152607360f81b60648201526084016105a3565b600854604051627eeac760e11b8152306004820181905260006024830152839162fdd58e90604401602060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113339190612583565b61133d91906125b3565b1015604051602001611362906c131a5b5a5d081c995858da1959609a1b8152600d0190565b6040516020818303038152906040529061138f5760405162461bcd60e51b81526004016105a39190611f43565b50604051627eeac760e11b81523060048201819052600060248301526113889162fdd58e90604401602060405180830381865afa1580156113d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f89190612583565b11156114d957604051627eeac760e11b8152336004820152600060248201526032908290309062fdd58e90604401602060405180830381865afa158015611443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114679190612583565b6114719190612570565b11156114d95760405162461bcd60e51b815260206004820152603160248201527f557365722063616e27742068617665207468697320616d6f756e74206f6620746044820152706f6b656e7320666f722070726573616c6560781b60648201526084016105a3565b6009546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611512573d6000803e3d6000fd5b5061153f3033600060ff16846040518060400160405280600381526020016203078360ec1b8152506119b1565b604051819033907f1027a425782977e3813afc94e489dccce57fecec47b5b531804d7d8e9eb26bff90600090a350565b6001600160a01b03851633148061158b575061158b85336104ce565b6115a75760405162461bcd60e51b81526004016105a39061235b565b61065385858585856119b1565b6115bc61163c565b6001600160a01b0381166116215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105a3565b61162a8161187f565b50565b6001600160a01b03163b151590565b6003546001600160a01b03163314610eb15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105a3565b6002610fcb828261243a565b81518351146117045760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016105a3565b6001600160a01b03841661172a5760405162461bcd60e51b81526004016105a3906125c6565b3360005b845181101561181157600085828151811061174b5761174b6123aa565b602002602001015190506000858381518110611769576117696123aa565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156117b95760405162461bcd60e51b81526004016105a39061260b565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906117f6908490612570565b925050819055505050508061180a906123d6565b905061172e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611861929190612655565b60405180910390a4611877818787878787611adb565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036119445760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105a3565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166119d75760405162461bcd60e51b81526004016105a3906125c6565b3360006119e385611c3f565b905060006119f085611c3f565b90506000868152602081815260408083206001600160a01b038c16845290915290205485811015611a335760405162461bcd60e51b81526004016105a39061260b565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611a70908490612570565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611ad0848a8a8a8a8a611c8a565b505050505050505050565b6001600160a01b0384163b156118775760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611b1f9089908990889088908890600401612683565b6020604051808303816000875af1925050508015611b5a575060408051601f3d908101601f19168201909252611b57918101906126e1565b60015b611c0657611b666126fe565b806308c379a003611b9f5750611b7a61271a565b80611b855750611ba1565b8060405162461bcd60e51b81526004016105a39190611f43565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105a3565b6001600160e01b0319811663bc197c8160e01b14611c365760405162461bcd60e51b81526004016105a3906127a4565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611c7957611c796123aa565b602090810291909101015292915050565b6001600160a01b0384163b156118775760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611cce90899089908890889088906004016127ec565b6020604051808303816000875af1925050508015611d09575060408051601f3d908101601f19168201909252611d06918101906126e1565b60015b611d1557611b666126fe565b6001600160e01b0319811663f23a6e6160e01b14611c365760405162461bcd60e51b81526004016105a3906127a4565b6001600160a01b038116811461162a57600080fd5b60008060408385031215611d6d57600080fd5b8235611d7881611d45565b946020939093013593505050565b600080600060608486031215611d9b57600080fd5b8335611da681611d45565b92506020840135611db681611d45565b929592945050506040919091013590565b6001600160e01b03198116811461162a57600080fd5b600060208284031215611def57600080fd5b8135611dfa81611dc7565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611e3d57611e3d611e01565b6040525050565b600067ffffffffffffffff831115611e5e57611e5e611e01565b604051611e75601f8501601f191660200182611e17565b809150838152848484011115611e8a57600080fd5b83836020830137600060208583010152509392505050565b600060208284031215611eb457600080fd5b813567ffffffffffffffff811115611ecb57600080fd5b8201601f81018413611edc57600080fd5b611eeb84823560208401611e44565b949350505050565b60005b83811015611f0e578181015183820152602001611ef6565b50506000910152565b60008151808452611f2f816020860160208601611ef3565b601f01601f19169290920160200192915050565b602081526000611dfa6020830184611f17565b600060208284031215611f6857600080fd5b5035919050565b600067ffffffffffffffff821115611f8957611f89611e01565b5060051b60200190565b600082601f830112611fa457600080fd5b81356020611fb182611f6f565b604051611fbe8282611e17565b83815260059390931b8501820192828101915086841115611fde57600080fd5b8286015b84811015611ff95780358352918301918301611fe2565b509695505050505050565b600082601f83011261201557600080fd5b611dfa83833560208501611e44565b600080600080600060a0868803121561203c57600080fd5b853561204781611d45565b9450602086013561205781611d45565b9350604086013567ffffffffffffffff8082111561207457600080fd5b61208089838a01611f93565b9450606088013591508082111561209657600080fd5b6120a289838a01611f93565b935060808801359150808211156120b857600080fd5b506120c588828901612004565b9150509295509295909350565b600080604083850312156120e557600080fd5b823567ffffffffffffffff808211156120fd57600080fd5b818501915085601f83011261211157600080fd5b8135602061211e82611f6f565b60405161212b8282611e17565b83815260059390931b850182019282810191508984111561214b57600080fd5b948201945b8386101561217257853561216381611d45565b82529482019490820190612150565b9650508601359250508082111561218857600080fd5b5061219585828601611f93565b9150509250929050565b600081518084526020808501945080840160005b838110156121cf578151875295820195908201906001016121b3565b509495945050505050565b602081526000611dfa602083018461219f565b801515811461162a57600080fd5b6000806040838503121561220e57600080fd5b823561221981611d45565b91506020830135612229816121ed565b809150509250929050565b60006020828403121561224657600080fd5b8135611dfa81611d45565b6000806040838503121561226457600080fd5b823561226f81611d45565b9150602083013561222981611d45565b600080600080600060a0868803121561229757600080fd5b85356122a281611d45565b945060208601356122b281611d45565b93506040860135925060608601359150608086013567ffffffffffffffff8111156122dc57600080fd5b6120c588828901612004565b6000602082840312156122fa57600080fd5b8151611dfa816121ed565b60008251612317818460208701611ef3565b9190910192915050565b600181811c9082168061233557607f821691505b60208210810361235557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016123e8576123e86123c0565b5060010190565b601f82111561243557600081815260208120601f850160051c810160208610156124165750805b601f850160051c820191505b8181101561187757828155600101612422565b505050565b815167ffffffffffffffff81111561245457612454611e01565b612468816124628454612321565b846123ef565b602080601f83116001811461249d57600084156124855750858301515b600019600386901b1c1916600185901b178555611877565b600085815260208120601f198616915b828110156124cc578886015182559484019460019091019084016124ad565b50858210156124ea5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600080835461250881612321565b60018281168015612520576001811461253557612564565b60ff1984168752821515830287019450612564565b8760005260208060002060005b8581101561255b5781548a820152908401908201612542565b50505082870194505b50929695505050505050565b808201808211156105cf576105cf6123c0565b60006020828403121561259557600080fd5b5051919050565b80820281158282048414176105cf576105cf6123c0565b818103818111156105cf576105cf6123c0565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612668604083018561219f565b828103602084015261267a818561219f565b95945050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906126af9083018661219f565b82810360608401526126c1818661219f565b905082810360808401526126d58185611f17565b98975050505050505050565b6000602082840312156126f357600080fd5b8151611dfa81611dc7565b600060033d11156127175760046000803e5060005160e01c5b90565b600060443d10156127285790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561275857505050505090565b82850191508151818111156127705750505050505090565b843d870101602082850101111561278a5750505050505090565b61279960208286010187611e17565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061282690830184611f17565b97965050505050505056fea2646970667358221220ebf921deb10fc0129634282291cc8c6b3548919cf37a6cecdae0f75368484f2564736f6c63430008110033

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

000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000090f3caf118b3c429b2d259cc53e99bc0115272600000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000002668747470733a2f2f746865756e636861727465642e73706163652f302f7b69647d2e6a736f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029556e636861727465643a2043686170746572204f6e652c2054686520536f75746865726e2052696e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029556e636861727465643a2043686170746572204f6e652c2054686520536f75746865726e2052696e670000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _usdcAddress (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [1] : _walletToSend (address): 0x090F3cAF118b3C429b2d259CC53E99bc01152726
Arg [2] : _uri (string): https://theuncharted.space/0/{id}.json
Arg [3] : _name (string): Uncharted: Chapter One, The Southern Ring
Arg [4] : _symbol (string): Uncharted: Chapter One, The Southern Ring

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [1] : 000000000000000000000000090f3caf118b3c429b2d259cc53e99bc01152726
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000026
Arg [6] : 68747470733a2f2f746865756e636861727465642e73706163652f302f7b6964
Arg [7] : 7d2e6a736f6e0000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000029
Arg [9] : 556e636861727465643a2043686170746572204f6e652c2054686520536f7574
Arg [10] : 6865726e2052696e670000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000029
Arg [12] : 556e636861727465643a2043686170746572204f6e652c2054686520536f7574
Arg [13] : 6865726e2052696e670000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42106:5264:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23624:230;;;;;;;;;;-1:-1:-1;23624:230:0;;;;;:::i;:::-;;:::i;:::-;;;616:25:1;;;604:2;589:18;23624:230:0;;;;;;;;47007:360;;;;;;;;;;-1:-1:-1;47007:360:0;;;;;:::i;:::-;;:::i;:::-;;22647:310;;;;;;;;;;-1:-1:-1;22647:310:0;;;;;:::i;:::-;;:::i;:::-;;;1664:14:1;;1657:22;1639:41;;1627:2;1612:18;22647:310:0;1499:187:1;42364:25:0;;;;;;;;;;-1:-1:-1;42364:25:0;;;;-1:-1:-1;;;;;42364:25:0;;;;;;-1:-1:-1;;;;;1870:32:1;;;1852:51;;1840:2;1825:18;42364:25:0;1691:218:1;44412:133:0;;;;;;;;;;-1:-1:-1;44412:133:0;;;;;:::i;:::-;;:::i;42486:18::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23368:105::-;;;;;;;;;;-1:-1:-1;23368:105:0;;;;;:::i;:::-;;:::i;43251:45::-;;;;;;;;;;;;;;;;25568:439;;;;;;;;;;-1:-1:-1;25568:439:0;;;;;:::i;:::-;;:::i;24020:524::-;;;;;;;;;;-1:-1:-1;24020:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46702:198::-;;;;;;;;;;-1:-1:-1;46702:198:0;;;;;:::i;:::-;;:::i;45690:816::-;;;;;;;;;;-1:-1:-1;45690:816:0;;;;;:::i;:::-;;:::i;43770:136::-;;;;;;;;;;-1:-1:-1;43770:136:0;;;;;:::i;:::-;;:::i;2776:103::-;;;;;;;;;;;;;:::i;43089:37::-;;;;;;;;;;;;;;;;46514:180;;;;;;;;;;-1:-1:-1;46514:180:0;;;;;:::i;:::-;;:::i;2128:87::-;;;;;;;;;;-1:-1:-1;2201:6:0;;-1:-1:-1;;;;;2201:6:0;2128:87;;42511:20;;;;;;;;;;;;;:::i;43305:35::-;;;;;;;;;;-1:-1:-1;43305:35:0;;;;-1:-1:-1;;;;;43305:35:0;;;24617:155;;;;;;;;;;-1:-1:-1;24617:155:0;;;;;:::i;:::-;;:::i;44162:242::-;;;;;;;;;;-1:-1:-1;44162:242:0;;;;;:::i;:::-;;:::i;45474:208::-;;;;;;;;;;-1:-1:-1;45474:208:0;;;;;:::i;:::-;;:::i;43914:240::-;;;;;;;;;;-1:-1:-1;43914:240:0;;;;;:::i;:::-;;:::i;44553:913::-;;;;;;:::i;:::-;;:::i;24844:168::-;;;;;;;;;;-1:-1:-1;24844:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;24967:27:0;;;24943:4;24967:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;24844:168;25084:407;;;;;;;;;;-1:-1:-1;25084:407:0;;;;;:::i;:::-;;:::i;3034:201::-;;;;;;;;;;-1:-1:-1;3034:201:0;;;;;:::i;:::-;;:::i;23624:230::-;23710:7;-1:-1:-1;;;;;23738:21:0;;23730:76;;;;-1:-1:-1;;;23730:76:0;;11166:2:1;23730:76:0;;;11148:21:1;11205:2;11185:18;;;11178:30;11244:34;11224:18;;;11217:62;-1:-1:-1;;;11295:18:1;;;11288:40;11345:19;;23730:76:0;;;;;;;;;-1:-1:-1;23824:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;23824:22:0;;;;;;;;;;23624:230;;;;;:::o;47007:360::-;2014:13;:11;:13::i;:::-;47316:43:::1;::::0;-1:-1:-1;;;47316:43:0;;-1:-1:-1;;;;;11567:32:1;;;47316:43:0::1;::::0;::::1;11549:51:1::0;11616:18;;;11609:34;;;47151:14:0;;47316:22;;::::1;::::0;::::1;::::0;11522:18:1;;47316:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47110:257;47007:360:::0;;;:::o;22647:310::-;22749:4;-1:-1:-1;;;;;;22786:41:0;;-1:-1:-1;;;22786:41:0;;:110;;-1:-1:-1;;;;;;;22844:52:0;;-1:-1:-1;;;22844:52:0;22786:110;:163;;;-1:-1:-1;;;;;;;;;;14037:40:0;;;22913:36;13928:157;44412:133;2014:13;:11;:13::i;:::-;44478::::1;44486:4;44478:7;:13::i;:::-;44532:4;44509:28;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;44412:133:::0;:::o;42486:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23368:105::-;23428:13;23461:4;23454:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23368:105;;;:::o;25568:439::-;-1:-1:-1;;;;;25801:20:0;;759:10;25801:20;;:60;;-1:-1:-1;25825:36:0;25842:4;759:10;24844:168;:::i;25825:36::-;25779:157;;;;-1:-1:-1;;;25779:157:0;;;;;;;:::i;:::-;25947:52;25970:4;25976:2;25980:3;25985:7;25994:4;25947:22;:52::i;24020:524::-;24176:16;24237:3;:10;24218:8;:15;:29;24210:83;;;;-1:-1:-1;;;24210:83:0;;13201:2:1;24210:83:0;;;13183:21:1;13240:2;13220:18;;;13213:30;13279:34;13259:18;;;13252:62;-1:-1:-1;;;13330:18:1;;;13323:39;13379:19;;24210:83:0;12999:405:1;24210:83:0;24306:30;24353:8;:15;24339:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24339:30:0;;24306:63;;24387:9;24382:122;24406:8;:15;24402:1;:19;24382:122;;;24462:30;24472:8;24481:1;24472:11;;;;;;;;:::i;:::-;;;;;;;24485:3;24489:1;24485:6;;;;;;;;:::i;:::-;;;;;;;24462:9;:30::i;:::-;24443:13;24457:1;24443:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;24423:3;;;:::i;:::-;;;24382:122;;;-1:-1:-1;24523:13:0;24020:524;-1:-1:-1;;;24020:524:0:o;46702:198::-;2014:13;:11;:13::i;:::-;46779:23:::1;46805:6;46779:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46831:9;46822:6;:18;;;;;;:::i;:::-;;46885:6;46856:36;;;;;;:::i;:::-;;;;;;;;46874:9;46856:36;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;46768:132;46702:198:::0;:::o;45690:816::-;45810:6;:13;45789:10;:17;:34;45781:83;;;;-1:-1:-1;;;45781:83:0;;17066:2:1;45781:83:0;;;17048:21:1;17105:2;17085:18;;;17078:30;17144:34;17124:18;;;17117:62;-1:-1:-1;;;17195:18:1;;;17188:34;17239:19;;45781:83:0;16864:400:1;45781:83:0;45875:8;45903:6;45898:180;45919:10;:17;45915:1;:21;45898:180;;;45991:1;-1:-1:-1;;;;;45966:27:0;:10;45977:1;45966:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;45966:27:0;;45958:77;;;;-1:-1:-1;;;45958:77:0;;17471:2:1;45958:77:0;;;17453:21:1;17510:2;17490:18;;;17483:30;17549:34;17529:18;;;17522:62;-1:-1:-1;;;17600:18:1;;;17593:35;17645:19;;45958:77:0;17269:401:1;45958:77:0;46057:6;46064:1;46057:9;;;;;;;;:::i;:::-;;;;;;;46050:16;;;;;:::i;:::-;;-1:-1:-1;45938:3:0;;;;:::i;:::-;;;;45898:180;;;-1:-1:-1;46096:11:0;;;:48;;-1:-1:-1;;;46096:48:0;;46118:10;46096:48;;;18017:34:1;;;;46138:4:0;18067:18:1;;;18060:43;46148:3:0;;-1:-1:-1;;;;;46096:11:0;;;;:21;;17952:18:1;;46096:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;46088:95;;;;-1:-1:-1;;;46088:95:0;;18505:2:1;46088:95:0;;;18487:21:1;18544:2;18524:18;;;18517:30;18583:29;18563:18;;;18556:57;18630:18;;46088:95:0;18303:351:1;46088:95:0;46202:11;;;:33;;-1:-1:-1;;;46202:33:0;;46224:10;46202:33;;;1852:51:1;;;;46239:3:0;;-1:-1:-1;;;;;46202:11:0;;;;:21;;1825:18:1;;46202:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;46194:70;;;;-1:-1:-1;;;46194:70:0;;18861:2:1;46194:70:0;;;18843:21:1;18900:2;18880:18;;;18873:30;-1:-1:-1;;;18919:18:1;;;18912:47;18976:18;;46194:70:0;18659:341:1;46194:70:0;46282:6;46277:222;46298:10;:17;46294:1;:21;46277:222;;;46363:11;;46400:13;;-1:-1:-1;;;;;46363:11:0;;;;:24;;46388:10;;46400;;46411:1;;46400:13;;;;;;:::i;:::-;;;;;;;46415:6;46422:1;46415:9;;;;;;;;:::i;:::-;;;;;;;;;;;46363:62;;-1:-1:-1;;;;;;46363:62:0;;;;;;;-1:-1:-1;;;;;19263:15:1;;;46363:62:0;;;19245:34:1;19315:15;;;;19295:18;;;19288:43;19347:18;;;19340:34;19180:18;;46363:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:70;;46429:4;46363:70;46337:150;;;;-1:-1:-1;;;46337:150:0;;19587:2:1;46337:150:0;;;19569:21:1;19626:2;19606:18;;;19599:30;-1:-1:-1;;;19645:18:1;;;19638:48;19703:18;;46337:150:0;19385:342:1;46337:150:0;46317:3;;;;:::i;:::-;;;;46277:222;;;;45770:736;45690:816;;:::o;43770:136::-;2014:13;:11;:13::i;:::-;43838:10:::1;:18:::0;;;43874:24:::1;::::0;43851:5;;43874:24:::1;::::0;;;::::1;43770:136:::0;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;46514:180::-;2014:13;:11;:13::i;:::-;46587:21:::1;46611:4;46587:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46633:7;46626:4;:14;;;;;;:::i;:::-;;46681:4;46656:30;;;;;;:::i;:::-;;;;;;;;46672:7;46656:30;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;46576:118;46514:180:::0;:::o;42511:20::-;;;;;;;:::i;24617:155::-;24712:52;759:10;24745:8;24755;24712:18;:52::i;:::-;24617:155;;:::o;44162:242::-;2014:13;:11;:13::i;:::-;-1:-1:-1;;;;;44253:26:0;::::1;44245:54;;;::::0;-1:-1:-1;;;44245:54:0;;19934:2:1;44245:54:0::1;::::0;::::1;19916:21:1::0;19973:2;19953:18;;;19946:30;-1:-1:-1;;;19992:18:1;;;19985:45;20047:18;;44245:54:0::1;19732:339:1::0;44245:54:0::1;44310:12;:25:::0;;-1:-1:-1;;;;;;44310:25:0::1;-1:-1:-1::0;;;;;44310:25:0;::::1;::::0;;::::1;::::0;;;44353:43:::1;::::0;::::1;::::0;-1:-1:-1;;44353:43:0::1;44162:242:::0;:::o;45474:208::-;2014:13;:11;:13::i;:::-;45556:69:::1;45582:4;45589:8;42354:1;45556:69;;45606:6;45556:69;;;;;;;;;;;;;-1:-1:-1::0;;;45556:69:0::1;;::::0;:17:::1;:69::i;:::-;45643:31;::::0;45667:6;;-1:-1:-1;;;;;45643:31:0;::::1;::::0;::::1;::::0;;;::::1;45474:208:::0;;:::o;43914:240::-;2014:13;:11;:13::i;:::-;-1:-1:-1;;;;;43998:28:0;::::1;43990:56;;;::::0;-1:-1:-1;;;43990:56:0;;19934:2:1;43990:56:0::1;::::0;::::1;19916:21:1::0;19973:2;19953:18;;;19946:30;-1:-1:-1;;;19992:18:1;;;19985:45;20047:18;;43990:56:0::1;19732:339:1::0;43990:56:0::1;44057:11;:34:::0;;-1:-1:-1;;;;;;44057:34:0::1;-1:-1:-1::0;;;;;44057:34:0;::::1;::::0;;::::1;::::0;;;44109:37:::1;::::0;::::1;::::0;-1:-1:-1;;44109:37:0::1;43914:240:::0;:::o;44553:913::-;44631:1;44618:10;;:14;44610:43;;;;-1:-1:-1;;;44610:43:0;;20278:2:1;44610:43:0;;;20260:21:1;20317:2;20297:18;;;20290:30;-1:-1:-1;;;20336:18:1;;;20329:46;20392:18;;44610:43:0;20076:340:1;44610:43:0;44695:9;44681:10;;44672:6;:19;;;;:::i;:::-;:32;44664:64;;;;-1:-1:-1;;;44664:64:0;;20796:2:1;44664:64:0;;;20778:21:1;20835:2;20815:18;;;20808:30;-1:-1:-1;;;20854:18:1;;;20847:49;20913:18;;44664:64:0;20594:343:1;44664:64:0;44747:36;;-1:-1:-1;;;44747:36:0;;:4;:36;;;21114:51:1;;;42354:1:0;21181:18:1;;;21174:45;44787:6:0;;44747:14;;21087:18:1;;44747:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;44739:92;;;;-1:-1:-1;;;44739:92:0;;21432:2:1;44739:92:0;;;21414:21:1;21471:2;21451:18;;;21444:30;21510:34;21490:18;;;21483:62;-1:-1:-1;;;21561:18:1;;;21554:31;21602:19;;44739:92:0;21230:397:1;44739:92:0;44913:16;;44864:36;;-1:-1:-1;;;44864:36:0;;:4;:36;;;21114:51:1;;;42354:1:0;21181:18:1;;;21174:45;44903:6:0;;44864:14;;21087:18:1;;44864:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;;;:::i;:::-;:65;;44944:30;;;;;;-1:-1:-1;;;21957:28:1;;22010:2;22001:12;;21765:254;44944:30:0;;;;;;;;;;;;;44842:143;;;;;-1:-1:-1;;;44842:143:0;;;;;;;;:::i;:::-;-1:-1:-1;45000:36:0;;-1:-1:-1;;;45000:36:0;;:4;:36;;;21114:51:1;;;42354:1:0;21181:18:1;;;21174:45;42249:4:0;;45000:14;;21087:18:1;;45000:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;44996:295;;;45124:33;;-1:-1:-1;;;45124:33:0;;45139:10;45124:33;;;21114:51:1;42354:1:0;21181:18:1;;;21174:45;42312:2:0;;45160:6;;45124:4;;:14;;21087:18:1;;45124:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;;;:::i;:::-;:70;;45098:181;;;;-1:-1:-1;;;45098:181:0;;22226:2:1;45098:181:0;;;22208:21:1;22265:2;22245:18;;;22238:30;22304:34;22284:18;;;22277:62;-1:-1:-1;;;22355:18:1;;;22348:47;22412:19;;45098:181:0;22024:413:1;45098:181:0;45303:12;;:32;;-1:-1:-1;;;;;45303:12:0;;;;45325:9;45303:32;;;;;:12;:32;:12;:32;45325:9;45303:12;:32;;;;;;;;;;;;;;;;;;;;;45346:66;45372:4;45379:10;42354:1;45346:66;;45398:6;45346:66;;;;;;;;;;;;;-1:-1:-1;;;45346:66:0;;;:17;:66::i;:::-;45430:28;;45451:6;;45439:10;;45430:28;;;;;44553:913;:::o;25084:407::-;-1:-1:-1;;;;;25292:20:0;;759:10;25292:20;;:60;;-1:-1:-1;25316:36:0;25333:4;759:10;24844:168;:::i;25316:36::-;25270:157;;;;-1:-1:-1;;;25270:157:0;;;;;;;:::i;:::-;25438:45;25456:4;25462:2;25466;25470:6;25478:4;25438:17;:45::i;3034:201::-;2014:13;:11;:13::i;:::-;-1:-1:-1;;;;;3123:22:0;::::1;3115:73;;;::::0;-1:-1:-1;;;3115:73:0;;22644:2:1;3115:73:0::1;::::0;::::1;22626:21:1::0;22683:2;22663:18;;;22656:30;22722:34;22702:18;;;22695:62;-1:-1:-1;;;22773:18:1;;;22766:36;22819:19;;3115:73:0::1;22442:402:1::0;3115:73:0::1;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;4826:326::-;-1:-1:-1;;;;;5121:19:0;;:23;;;4826:326::o;2293:132::-;2201:6;;-1:-1:-1;;;;;2201:6:0;759:10;2357:23;2349:68;;;;-1:-1:-1;;;2349:68:0;;23051:2:1;2349:68:0;;;23033:21:1;;;23070:18;;;23063:30;23129:34;23109:18;;;23102:62;23181:18;;2349:68:0;22849:356:1;29793:88:0;29860:4;:13;29867:6;29860:4;:13;:::i;27803:1146::-;28030:7;:14;28016:3;:10;:28;28008:81;;;;-1:-1:-1;;;28008:81:0;;23412:2:1;28008:81:0;;;23394:21:1;23451:2;23431:18;;;23424:30;23490:34;23470:18;;;23463:62;-1:-1:-1;;;23541:18:1;;;23534:38;23589:19;;28008:81:0;23210:404:1;28008:81:0;-1:-1:-1;;;;;28108:16:0;;28100:66;;;;-1:-1:-1;;;28100:66:0;;;;;;;:::i;:::-;759:10;28179:16;28296:421;28320:3;:10;28316:1;:14;28296:421;;;28352:10;28365:3;28369:1;28365:6;;;;;;;;:::i;:::-;;;;;;;28352:19;;28386:14;28403:7;28411:1;28403:10;;;;;;;;:::i;:::-;;;;;;;;;;;;28430:19;28452:13;;;;;;;;;;-1:-1:-1;;;;;28452:19:0;;;;;;;;;;;;28403:10;;-1:-1:-1;28494:21:0;;;;28486:76;;;;-1:-1:-1;;;28486:76:0;;;;;;;:::i;:::-;28606:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28606:19:0;;;;;;;;;;28628:20;;;28606:42;;28678:17;;;;;;;:27;;28628:20;;28606:9;28678:27;;28628:20;;28678:27;:::i;:::-;;;;;;;;28337:380;;;28332:3;;;;:::i;:::-;;;28296:421;;;;28764:2;-1:-1:-1;;;;;28734:47:0;28758:4;-1:-1:-1;;;;;28734:47:0;28748:8;-1:-1:-1;;;;;28734:47:0;;28768:3;28773:7;28734:47;;;;;;;:::i;:::-;;;;;;;;28866:75;28902:8;28912:4;28918:2;28922:3;28927:7;28936:4;28866:35;:75::i;:::-;27997:952;27803:1146;;;;;:::o;3395:191::-;3488:6;;;-1:-1:-1;;;;;3505:17:0;;;-1:-1:-1;;;;;;3505:17:0;;;;;;;3538:40;;3488:6;;;3505:17;3488:6;;3538:40;;3469:16;;3538:40;3458:128;3395:191;:::o;34680:331::-;34835:8;-1:-1:-1;;;;;34826:17:0;:5;-1:-1:-1;;;;;34826:17:0;;34818:71;;;;-1:-1:-1;;;34818:71:0;;25108:2:1;34818:71:0;;;25090:21:1;25147:2;25127:18;;;25120:30;25186:34;25166:18;;;25159:62;-1:-1:-1;;;25237:18:1;;;25230:39;25286:19;;34818:71:0;24906:405:1;34818:71:0;-1:-1:-1;;;;;34900:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;34900:46:0;;;;;;;;;;34962:41;;1639::1;;;34962::0;;1612:18:1;34962:41:0;;;;;;;34680:331;;;:::o;26471:974::-;-1:-1:-1;;;;;26659:16:0;;26651:66;;;;-1:-1:-1;;;26651:66:0;;;;;;;:::i;:::-;759:10;26730:16;26795:21;26813:2;26795:17;:21::i;:::-;26772:44;;26827:24;26854:25;26872:6;26854:17;:25::i;:::-;26827:52;;26965:19;26987:13;;;;;;;;;;;-1:-1:-1;;;;;26987:19:0;;;;;;;;;;27025:21;;;;27017:76;;;;-1:-1:-1;;;27017:76:0;;;;;;;:::i;:::-;27129:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27129:19:0;;;;;;;;;;27151:20;;;27129:42;;27193:17;;;;;;;:27;;27151:20;;27129:9;27193:27;;27151:20;;27193:27;:::i;:::-;;;;-1:-1:-1;;27238:46:0;;;25490:25:1;;;25546:2;25531:18;;25524:34;;;-1:-1:-1;;;;;27238:46:0;;;;;;;;;;;;;;25463:18:1;27238:46:0;;;;;;;27369:68;27400:8;27410:4;27416:2;27420;27424:6;27432:4;27369:30;:68::i;:::-;26640:805;;;;26471:974;;;;;:::o;38125:813::-;-1:-1:-1;;;;;38365:13:0;;5121:19;:23;38361:570;;38401:79;;-1:-1:-1;;;38401:79:0;;-1:-1:-1;;;;;38401:43:0;;;;;:79;;38445:8;;38455:4;;38461:3;;38466:7;;38475:4;;38401:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38401:79:0;;;;;;;;-1:-1:-1;;38401:79:0;;;;;;;;;;;;:::i;:::-;;;38397:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38793:6;38786:14;;-1:-1:-1;;;38786:14:0;;;;;;;;:::i;38397:523::-;;;38842:62;;-1:-1:-1;;;38842:62:0;;27717:2:1;38842:62:0;;;27699:21:1;27756:2;27736:18;;;27729:30;27795:34;27775:18;;;27768:62;-1:-1:-1;;;27846:18:1;;;27839:50;27906:19;;38842:62:0;27515:416:1;38397:523:0;-1:-1:-1;;;;;;38562:60:0;;-1:-1:-1;;;38562:60:0;38558:159;;38647:50;;-1:-1:-1;;;38647:50:0;;;;;;;:::i;38558:159::-;38481:251;38125:813;;;;;;:::o;38946:198::-;39066:16;;;39080:1;39066:16;;;;;;;;;39012;;39041:22;;39066:16;;;;;;;;;;;;-1:-1:-1;39066:16:0;39041:41;;39104:7;39093:5;39099:1;39093:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;39131:5;38946:198;-1:-1:-1;;38946:198:0:o;37373:744::-;-1:-1:-1;;;;;37588:13:0;;5121:19;:23;37584:526;;37624:72;;-1:-1:-1;;;37624:72:0;;-1:-1:-1;;;;;37624:38:0;;;;;:72;;37663:8;;37673:4;;37679:2;;37683:6;;37691:4;;37624:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37624:72:0;;;;;;;;-1:-1:-1;;37624:72:0;;;;;;;;;;;;:::i;:::-;;;37620:479;;;;:::i;:::-;-1:-1:-1;;;;;;37746:55:0;;-1:-1:-1;;;37746:55:0;37742:154;;37826:50;;-1:-1:-1;;;37826:50:0;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:1:o;652:456::-;729:6;737;745;798:2;786:9;777:7;773:23;769:32;766:52;;;814:1;811;804:12;766:52;853:9;840:23;872:31;897:5;872:31;:::i;:::-;922:5;-1:-1:-1;979:2:1;964:18;;951:32;992:33;951:32;992:33;:::i;:::-;652:456;;1044:7;;-1:-1:-1;;;1098:2:1;1083:18;;;;1070:32;;652:456::o;1113:131::-;-1:-1:-1;;;;;;1187:32:1;;1177:43;;1167:71;;1234:1;1231;1224:12;1249:245;1307:6;1360:2;1348:9;1339:7;1335:23;1331:32;1328:52;;;1376:1;1373;1366:12;1328:52;1415:9;1402:23;1434:30;1458:5;1434:30;:::i;:::-;1483:5;1249:245;-1:-1:-1;;;1249:245:1:o;1914:127::-;1975:10;1970:3;1966:20;1963:1;1956:31;2006:4;2003:1;1996:15;2030:4;2027:1;2020:15;2046:249;2156:2;2137:13;;-1:-1:-1;;2133:27:1;2121:40;;2191:18;2176:34;;2212:22;;;2173:62;2170:88;;;2238:18;;:::i;:::-;2274:2;2267:22;-1:-1:-1;;2046:249:1:o;2300:469::-;2365:5;2399:18;2391:6;2388:30;2385:56;;;2421:18;;:::i;:::-;2470:2;2464:9;2482:69;2539:2;2518:15;;-1:-1:-1;;2514:29:1;2545:4;2510:40;2464:9;2482:69;:::i;:::-;2569:6;2560:15;;2599:6;2591;2584:22;2639:3;2630:6;2625:3;2621:16;2618:25;2615:45;;;2656:1;2653;2646:12;2615:45;2706:6;2701:3;2694:4;2686:6;2682:17;2669:44;2761:1;2754:4;2745:6;2737;2733:19;2729:30;2722:41;;2300:469;;;;;:::o;2774:451::-;2843:6;2896:2;2884:9;2875:7;2871:23;2867:32;2864:52;;;2912:1;2909;2902:12;2864:52;2952:9;2939:23;2985:18;2977:6;2974:30;2971:50;;;3017:1;3014;3007:12;2971:50;3040:22;;3093:4;3085:13;;3081:27;-1:-1:-1;3071:55:1;;3122:1;3119;3112:12;3071:55;3145:74;3211:7;3206:2;3193:16;3188:2;3184;3180:11;3145:74;:::i;:::-;3135:84;2774:451;-1:-1:-1;;;;2774:451:1:o;3230:250::-;3315:1;3325:113;3339:6;3336:1;3333:13;3325:113;;;3415:11;;;3409:18;3396:11;;;3389:39;3361:2;3354:10;3325:113;;;-1:-1:-1;;3472:1:1;3454:16;;3447:27;3230:250::o;3485:271::-;3527:3;3565:5;3559:12;3592:6;3587:3;3580:19;3608:76;3677:6;3670:4;3665:3;3661:14;3654:4;3647:5;3643:16;3608:76;:::i;:::-;3738:2;3717:15;-1:-1:-1;;3713:29:1;3704:39;;;;3745:4;3700:50;;3485:271;-1:-1:-1;;3485:271:1:o;3761:220::-;3910:2;3899:9;3892:21;3873:4;3930:45;3971:2;3960:9;3956:18;3948:6;3930:45;:::i;3986:180::-;4045:6;4098:2;4086:9;4077:7;4073:23;4069:32;4066:52;;;4114:1;4111;4104:12;4066:52;-1:-1:-1;4137:23:1;;3986:180;-1:-1:-1;3986:180:1:o;4171:183::-;4231:4;4264:18;4256:6;4253:30;4250:56;;;4286:18;;:::i;:::-;-1:-1:-1;4331:1:1;4327:14;4343:4;4323:25;;4171:183::o;4359:724::-;4413:5;4466:3;4459:4;4451:6;4447:17;4443:27;4433:55;;4484:1;4481;4474:12;4433:55;4520:6;4507:20;4546:4;4569:43;4609:2;4569:43;:::i;:::-;4641:2;4635:9;4653:31;4681:2;4673:6;4653:31;:::i;:::-;4719:18;;;4811:1;4807:10;;;;4795:23;;4791:32;;;4753:15;;;;-1:-1:-1;4835:15:1;;;4832:35;;;4863:1;4860;4853:12;4832:35;4899:2;4891:6;4887:15;4911:142;4927:6;4922:3;4919:15;4911:142;;;4993:17;;4981:30;;5031:12;;;;4944;;4911:142;;;-1:-1:-1;5071:6:1;4359:724;-1:-1:-1;;;;;;4359:724:1:o;5088:221::-;5130:5;5183:3;5176:4;5168:6;5164:17;5160:27;5150:55;;5201:1;5198;5191:12;5150:55;5223:80;5299:3;5290:6;5277:20;5270:4;5262:6;5258:17;5223:80;:::i;5314:1071::-;5468:6;5476;5484;5492;5500;5553:3;5541:9;5532:7;5528:23;5524:33;5521:53;;;5570:1;5567;5560:12;5521:53;5609:9;5596:23;5628:31;5653:5;5628:31;:::i;:::-;5678:5;-1:-1:-1;5735:2:1;5720:18;;5707:32;5748:33;5707:32;5748:33;:::i;:::-;5800:7;-1:-1:-1;5858:2:1;5843:18;;5830:32;5881:18;5911:14;;;5908:34;;;5938:1;5935;5928:12;5908:34;5961:61;6014:7;6005:6;5994:9;5990:22;5961:61;:::i;:::-;5951:71;;6075:2;6064:9;6060:18;6047:32;6031:48;;6104:2;6094:8;6091:16;6088:36;;;6120:1;6117;6110:12;6088:36;6143:63;6198:7;6187:8;6176:9;6172:24;6143:63;:::i;:::-;6133:73;;6259:3;6248:9;6244:19;6231:33;6215:49;;6289:2;6279:8;6276:16;6273:36;;;6305:1;6302;6295:12;6273:36;;6328:51;6371:7;6360:8;6349:9;6345:24;6328:51;:::i;:::-;6318:61;;;5314:1071;;;;;;;;:::o;6390:1277::-;6508:6;6516;6569:2;6557:9;6548:7;6544:23;6540:32;6537:52;;;6585:1;6582;6575:12;6537:52;6625:9;6612:23;6654:18;6695:2;6687:6;6684:14;6681:34;;;6711:1;6708;6701:12;6681:34;6749:6;6738:9;6734:22;6724:32;;6794:7;6787:4;6783:2;6779:13;6775:27;6765:55;;6816:1;6813;6806:12;6765:55;6852:2;6839:16;6874:4;6897:43;6937:2;6897:43;:::i;:::-;6969:2;6963:9;6981:31;7009:2;7001:6;6981:31;:::i;:::-;7047:18;;;7135:1;7131:10;;;;7123:19;;7119:28;;;7081:15;;;;-1:-1:-1;7159:19:1;;;7156:39;;;7191:1;7188;7181:12;7156:39;7215:11;;;;7235:217;7251:6;7246:3;7243:15;7235:217;;;7331:3;7318:17;7348:31;7373:5;7348:31;:::i;:::-;7392:18;;7268:12;;;;7430;;;;7235:217;;;7471:6;-1:-1:-1;;7515:18:1;;7502:32;;-1:-1:-1;;7546:16:1;;;7543:36;;;7575:1;7572;7565:12;7543:36;;7598:63;7653:7;7642:8;7631:9;7627:24;7598:63;:::i;:::-;7588:73;;;6390:1277;;;;;:::o;7672:435::-;7725:3;7763:5;7757:12;7790:6;7785:3;7778:19;7816:4;7845:2;7840:3;7836:12;7829:19;;7882:2;7875:5;7871:14;7903:1;7913:169;7927:6;7924:1;7921:13;7913:169;;;7988:13;;7976:26;;8022:12;;;;8057:15;;;;7949:1;7942:9;7913:169;;;-1:-1:-1;8098:3:1;;7672:435;-1:-1:-1;;;;;7672:435:1:o;8112:261::-;8291:2;8280:9;8273:21;8254:4;8311:56;8363:2;8352:9;8348:18;8340:6;8311:56;:::i;8810:118::-;8896:5;8889:13;8882:21;8875:5;8872:32;8862:60;;8918:1;8915;8908:12;8933:382;8998:6;9006;9059:2;9047:9;9038:7;9034:23;9030:32;9027:52;;;9075:1;9072;9065:12;9027:52;9114:9;9101:23;9133:31;9158:5;9133:31;:::i;:::-;9183:5;-1:-1:-1;9240:2:1;9225:18;;9212:32;9253:30;9212:32;9253:30;:::i;:::-;9302:7;9292:17;;;8933:382;;;;;:::o;9320:255::-;9387:6;9440:2;9428:9;9419:7;9415:23;9411:32;9408:52;;;9456:1;9453;9446:12;9408:52;9495:9;9482:23;9514:31;9539:5;9514:31;:::i;9832:388::-;9900:6;9908;9961:2;9949:9;9940:7;9936:23;9932:32;9929:52;;;9977:1;9974;9967:12;9929:52;10016:9;10003:23;10035:31;10060:5;10035:31;:::i;:::-;10085:5;-1:-1:-1;10142:2:1;10127:18;;10114:32;10155:33;10114:32;10155:33;:::i;10225:734::-;10329:6;10337;10345;10353;10361;10414:3;10402:9;10393:7;10389:23;10385:33;10382:53;;;10431:1;10428;10421:12;10382:53;10470:9;10457:23;10489:31;10514:5;10489:31;:::i;:::-;10539:5;-1:-1:-1;10596:2:1;10581:18;;10568:32;10609:33;10568:32;10609:33;:::i;:::-;10661:7;-1:-1:-1;10715:2:1;10700:18;;10687:32;;-1:-1:-1;10766:2:1;10751:18;;10738:32;;-1:-1:-1;10821:3:1;10806:19;;10793:33;10849:18;10838:30;;10835:50;;;10881:1;10878;10871:12;10835:50;10904:49;10945:7;10936:6;10925:9;10921:22;10904:49;:::i;11654:245::-;11721:6;11774:2;11762:9;11753:7;11749:23;11745:32;11742:52;;;11790:1;11787;11780:12;11742:52;11822:9;11816:16;11841:28;11863:5;11841:28;:::i;11904:289::-;12035:3;12073:6;12067:13;12089:66;12148:6;12143:3;12136:4;12128:6;12124:17;12089:66;:::i;:::-;12171:16;;;;;11904:289;-1:-1:-1;;11904:289:1:o;12198:380::-;12277:1;12273:12;;;;12320;;;12341:61;;12395:4;12387:6;12383:17;12373:27;;12341:61;12448:2;12440:6;12437:14;12417:18;12414:38;12411:161;;12494:10;12489:3;12485:20;12482:1;12475:31;12529:4;12526:1;12519:15;12557:4;12554:1;12547:15;12411:161;;12198:380;;;:::o;12583:411::-;12785:2;12767:21;;;12824:2;12804:18;;;12797:30;12863:34;12858:2;12843:18;;12836:62;-1:-1:-1;;;12929:2:1;12914:18;;12907:45;12984:3;12969:19;;12583:411::o;13409:127::-;13470:10;13465:3;13461:20;13458:1;13451:31;13501:4;13498:1;13491:15;13525:4;13522:1;13515:15;13541:127;13602:10;13597:3;13593:20;13590:1;13583:31;13633:4;13630:1;13623:15;13657:4;13654:1;13647:15;13673:135;13712:3;13733:17;;;13730:43;;13753:18;;:::i;:::-;-1:-1:-1;13800:1:1;13789:13;;13673:135::o;13939:545::-;14041:2;14036:3;14033:11;14030:448;;;14077:1;14102:5;14098:2;14091:17;14147:4;14143:2;14133:19;14217:2;14205:10;14201:19;14198:1;14194:27;14188:4;14184:38;14253:4;14241:10;14238:20;14235:47;;;-1:-1:-1;14276:4:1;14235:47;14331:2;14326:3;14322:12;14319:1;14315:20;14309:4;14305:31;14295:41;;14386:82;14404:2;14397:5;14394:13;14386:82;;;14449:17;;;14430:1;14419:13;14386:82;;14030:448;13939:545;;;:::o;14660:1352::-;14786:3;14780:10;14813:18;14805:6;14802:30;14799:56;;;14835:18;;:::i;:::-;14864:97;14954:6;14914:38;14946:4;14940:11;14914:38;:::i;:::-;14908:4;14864:97;:::i;:::-;15016:4;;15080:2;15069:14;;15097:1;15092:663;;;;15799:1;15816:6;15813:89;;;-1:-1:-1;15868:19:1;;;15862:26;15813:89;-1:-1:-1;;14617:1:1;14613:11;;;14609:24;14605:29;14595:40;14641:1;14637:11;;;14592:57;15915:81;;15062:944;;15092:663;13886:1;13879:14;;;13923:4;13910:18;;-1:-1:-1;;15128:20:1;;;15246:236;15260:7;15257:1;15254:14;15246:236;;;15349:19;;;15343:26;15328:42;;15441:27;;;;15409:1;15397:14;;;;15276:19;;15246:236;;;15250:3;15510:6;15501:7;15498:19;15495:201;;;15571:19;;;15565:26;-1:-1:-1;;15654:1:1;15650:14;;;15666:3;15646:24;15642:37;15638:42;15623:58;15608:74;;15495:201;-1:-1:-1;;;;;15742:1:1;15726:14;;;15722:22;15709:36;;-1:-1:-1;14660:1352:1:o;16017:842::-;16145:3;16174:1;16207:6;16201:13;16237:36;16263:9;16237:36;:::i;:::-;16292:1;16309:18;;;16336:133;;;;16483:1;16478:356;;;;16302:532;;16336:133;-1:-1:-1;;16369:24:1;;16357:37;;16442:14;;16435:22;16423:35;;16414:45;;;-1:-1:-1;16336:133:1;;16478:356;16509:6;16506:1;16499:17;16539:4;16584:2;16581:1;16571:16;16609:1;16623:165;16637:6;16634:1;16631:13;16623:165;;;16715:14;;16702:11;;;16695:35;16758:16;;;;16652:10;;16623:165;;;16627:3;;;16817:6;16812:3;16808:16;16801:23;;16302:532;-1:-1:-1;16850:3:1;;16017:842;-1:-1:-1;;;;;;16017:842:1:o;17675:125::-;17740:9;;;17761:10;;;17758:36;;;17774:18;;:::i;18114:184::-;18184:6;18237:2;18225:9;18216:7;18212:23;18208:32;18205:52;;;18253:1;18250;18243:12;18205:52;-1:-1:-1;18276:16:1;;18114:184;-1:-1:-1;18114:184:1:o;20421:168::-;20494:9;;;20525;;20542:15;;;20536:22;;20522:37;20512:71;;20563:18;;:::i;21632:128::-;21699:9;;;21720:11;;;21717:37;;;21734:18;;:::i;23619:401::-;23821:2;23803:21;;;23860:2;23840:18;;;23833:30;23899:34;23894:2;23879:18;;23872:62;-1:-1:-1;;;23965:2:1;23950:18;;23943:35;24010:3;23995:19;;23619:401::o;24025:406::-;24227:2;24209:21;;;24266:2;24246:18;;;24239:30;24305:34;24300:2;24285:18;;24278:62;-1:-1:-1;;;24371:2:1;24356:18;;24349:40;24421:3;24406:19;;24025:406::o;24436:465::-;24693:2;24682:9;24675:21;24656:4;24719:56;24771:2;24760:9;24756:18;24748:6;24719:56;:::i;:::-;24823:9;24815:6;24811:22;24806:2;24795:9;24791:18;24784:50;24851:44;24888:6;24880;24851:44;:::i;:::-;24843:52;24436:465;-1:-1:-1;;;;;24436:465:1:o;25569:827::-;-1:-1:-1;;;;;25966:15:1;;;25948:34;;26018:15;;26013:2;25998:18;;25991:43;25928:3;26065:2;26050:18;;26043:31;;;25891:4;;26097:57;;26134:19;;26126:6;26097:57;:::i;:::-;26202:9;26194:6;26190:22;26185:2;26174:9;26170:18;26163:50;26236:44;26273:6;26265;26236:44;:::i;:::-;26222:58;;26329:9;26321:6;26317:22;26311:3;26300:9;26296:19;26289:51;26357:33;26383:6;26375;26357:33;:::i;:::-;26349:41;25569:827;-1:-1:-1;;;;;;;;25569:827:1:o;26401:249::-;26470:6;26523:2;26511:9;26502:7;26498:23;26494:32;26491:52;;;26539:1;26536;26529:12;26491:52;26571:9;26565:16;26590:30;26614:5;26590:30;:::i;26655:179::-;26690:3;26732:1;26714:16;26711:23;26708:120;;;26778:1;26775;26772;26757:23;-1:-1:-1;26815:1:1;26809:8;26804:3;26800:18;26708:120;26655:179;:::o;26839:671::-;26878:3;26920:4;26902:16;26899:26;26896:39;;;26839:671;:::o;26896:39::-;26962:2;26956:9;-1:-1:-1;;27027:16:1;27023:25;;27020:1;26956:9;26999:50;27078:4;27072:11;27102:16;27137:18;27208:2;27201:4;27193:6;27189:17;27186:25;27181:2;27173:6;27170:14;27167:45;27164:58;;;27215:5;;;;;26839:671;:::o;27164:58::-;27252:6;27246:4;27242:17;27231:28;;27288:3;27282:10;27315:2;27307:6;27304:14;27301:27;;;27321:5;;;;;;26839:671;:::o;27301:27::-;27405:2;27386:16;27380:4;27376:27;27372:36;27365:4;27356:6;27351:3;27347:16;27343:27;27340:69;27337:82;;;27412:5;;;;;;26839:671;:::o;27337:82::-;27428:57;27479:4;27470:6;27462;27458:19;27454:30;27448:4;27428:57;:::i;:::-;-1:-1:-1;27501:3:1;;26839:671;-1:-1:-1;;;;;26839:671:1:o;27936:404::-;28138:2;28120:21;;;28177:2;28157:18;;;28150:30;28216:34;28211:2;28196:18;;28189:62;-1:-1:-1;;;28282:2:1;28267:18;;28260:38;28330:3;28315:19;;27936:404::o;28345:561::-;-1:-1:-1;;;;;28642:15:1;;;28624:34;;28694:15;;28689:2;28674:18;;28667:43;28741:2;28726:18;;28719:34;;;28784:2;28769:18;;28762:34;;;28604:3;28827;28812:19;;28805:32;;;28567:4;;28854:46;;28880:19;;28872:6;28854:46;:::i;:::-;28846:54;28345:561;-1:-1:-1;;;;;;;28345:561:1:o

Swarm Source

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