ETH Price: $3,376.06 (-1.17%)
Gas: 10 Gwei

Token

ExpansionPhunks (PHUNX)
 

Overview

Max Total Supply

10,000 PHUNX

Holders

2,025

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
525960.eth
0x97013995b4866f7279e2bf6dbd7677529b21a762
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:
ExpansionPhunks

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-30
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

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

/**
 * @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

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

/**
 * @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


/**
 * @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

/**
 * @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.
        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. 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

/**
 * @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 be 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

/**
 * @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

/**
 * @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: balance query for the zero address");
        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 {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 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: transfer caller is not 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();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), 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);

        _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);

        _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 `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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);

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

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

        emit TransferSingle(operator, account, address(0), id, amount);
    }

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

        address operator = _msgSender();

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

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

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

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @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 `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 _beforeTokenTransfer(
        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;
    }
}

contract ExpansionPhunks is ERC1155, Ownable {
    string public constant name = "ExpansionPhunks";
    string public constant symbol = "PHUNX";

    uint32 public totalSupply = 0;
    uint256 public constant phunkPrice = 0.02 ether;
    uint256 public constant bulkPrice = 0.015 ether;
    
    uint32 public saleStart = 1640894400;
    uint32 public constant startSupply = 10000;
    uint32 public maxSupply = 10000;

    address private wallet1 = 0xD44F85aA20b03cc773309f10d67cC4eaB0BD26a6;
    address private wallet2 = 0xB9e1cc664a0140953c2512f57BCd36Bb92c2eEf6;

    constructor(string memory uri) ERC1155(uri) {}

    function setURI(string memory uri) public onlyOwner {
        _setURI(uri);
    }

    function setSaleStart(uint32 timestamp) public onlyOwner {
        saleStart = timestamp;
    }
    
    function saleIsActive() public view returns (bool) {
        return saleStart <= block.timestamp;
    }

    function setMaxSupply(uint32 _supply) public onlyOwner {
        maxSupply = _supply;
    }

    function mint(address to, uint32 count) internal {
        if (count > 1) {
            uint256[] memory ids = new uint256[](uint256(count));
            uint256[] memory amounts = new uint256[](uint256(count));

            for (uint32 i = 0; i < count; i++) {
                ids[i] = startSupply + totalSupply + i;
                amounts[i] = 1;
            }

            _mintBatch(to, ids, amounts, "");
        } else {
            _mint(to, startSupply + totalSupply, 1, "");
        }

        totalSupply += count;
    }
    
    function purchase(uint32 count) external payable {
        require(saleIsActive(), "Sale inactive");
        require(count > 0, "Count must be greater than 0");
        require(count < 51, "Count must be less than or equal to 50");
        require(totalSupply + count <= maxSupply, "Exceeds max supply");

        if (count > 9) {
            require(msg.value >= bulkPrice * count, "Insufficient funds");
        } else {
            require(msg.value >= phunkPrice * count, "Insufficient funds");
        }

        mint(msg.sender, count);
    }

    function teamMint(uint32 count) external onlyOwner {
        require(totalSupply + count <= maxSupply, "Exceeds max supply");
        mint(msg.sender, count);
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        uint256 balance1 = balance * 85 / 100;
        uint256 balance2 = balance * 10 / 100;
        uint256 balance3 = balance * 5 / 100;

        payable(wallet1).transfer(balance1);
        payable(wallet2).transfer(balance2);
        payable(msg.sender).transfer(balance3);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"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":[],"name":"bulkPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"maxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":"phunkPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"purchase","outputs":[],"stateMutability":"payable","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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_supply","type":"uint32"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260038054649c4187383f60c61b6001600160a01b03909116179055600480546001600160a01b031990811673d44f85aa20b03cc773309f10d67cc4eab0bd26a6179091556005805490911673b9e1cc664a0140953c2512f57bcd36bb92c2eef61790553480156200007457600080fd5b50604051620026bd380380620026bd8339810160408190526200009791620001dd565b80620000a381620000b6565b50620000af33620000cf565b50620002f6565b8051620000cb90600290602084019062000121565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200012f90620002b9565b90600052602060002090601f0160209004810192826200015357600085556200019e565b82601f106200016e57805160ff19168380011785556200019e565b828001600101855582156200019e579182015b828111156200019e57825182559160200191906001019062000181565b50620001ac929150620001b0565b5090565b5b80821115620001ac5760008155600101620001b1565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215620001f157600080fd5b82516001600160401b03808211156200020957600080fd5b818501915085601f8301126200021e57600080fd5b815181811115620002335762000233620001c7565b604051601f8201601f19908116603f011681019083821181831017156200025e576200025e620001c7565b8160405282815288868487010111156200027757600080fd5b600093505b828410156200029b57848401860151818501870152928501926200027c565b82841115620002ad5760008684830101525b98975050505050505050565b600181811c90821680620002ce57607f821691505b60208210811415620002f057634e487b7160e01b600052602260045260246000fd5b50919050565b6123b780620003066000396000f3fe6080604052600436106101805760003560e01c806395d89b41116100d1578063d5abeb011161008a578063f242432a11610064578063f242432a146104d1578063f2fde38b146104f1578063f9da322414610511578063fbf0c2e61461053157600080fd5b8063d5abeb011461043e578063e985e9c514610462578063eb8d2444146104ab57600080fd5b806395d89b4114610380578063a22cb465146103b1578063a741ae1e146103d1578063ab0bcc41146103f1578063ab6e7b4a14610415578063c7f04e651461042b57600080fd5b80632eb2c2d61161013e578063682b1b4511610118578063682b1b451461030d578063715018a6146103285780638da5cb5b1461033d5780639187011a1461036557600080fd5b80632eb2c2d6146102ab5780633ccfd60b146102cb5780634e1273f4146102e057600080fd5b8062fdd58e1461018557806301ffc9a7146101b857806302fe5305146101e857806306fdde031461020a5780630e89341c1461025257806318160ddd14610272575b600080fd5b34801561019157600080fd5b506101a56101a03660046119d5565b610551565b6040519081526020015b60405180910390f35b3480156101c457600080fd5b506101d86101d3366004611a15565b6105e8565b60405190151581526020016101af565b3480156101f457600080fd5b50610208610203366004611ada565b61063a565b005b34801561021657600080fd5b506102456040518060400160405280600f81526020016e457870616e73696f6e5068756e6b7360881b81525081565b6040516101af9190611b78565b34801561025e57600080fd5b5061024561026d366004611b8b565b610670565b34801561027e57600080fd5b5060035461029690600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016101af565b3480156102b757600080fd5b506102086102c6366004611c59565b610704565b3480156102d757600080fd5b5061020861079b565b3480156102ec57600080fd5b506103006102fb366004611d03565b6108b9565b6040516101af9190611e09565b34801561031957600080fd5b506101a566354a6ba7a1800081565b34801561033457600080fd5b506102086109e3565b34801561034957600080fd5b506003546040516001600160a01b0390911681526020016101af565b34801561037157600080fd5b506101a566470de4df82000081565b34801561038c57600080fd5b50610245604051806040016040528060058152602001640a090aa9cb60db1b81525081565b3480156103bd57600080fd5b506102086103cc366004611e1c565b610a19565b3480156103dd57600080fd5b506102086103ec366004611e58565b610af0565b3480156103fd57600080fd5b5060035461029690600160c01b900463ffffffff1681565b34801561042157600080fd5b5061029661271081565b610208610439366004611e58565b610b40565b34801561044a57600080fd5b5060035461029690600160e01b900463ffffffff1681565b34801561046e57600080fd5b506101d861047d366004611e7e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156104b757600080fd5b5060035442600160c01b90910463ffffffff1611156101d8565b3480156104dd57600080fd5b506102086104ec366004611eb1565b610d8d565b3480156104fd57600080fd5b5061020861050c366004611f16565b610e14565b34801561051d57600080fd5b5061020861052c366004611e58565b610eac565b34801561053d57600080fd5b5061020861054c366004611e58565b610efb565b60006001600160a01b0383166105c25760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061061957506001600160e01b031982166303a24d0760e21b145b8061063457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146106645760405162461bcd60e51b81526004016105b990611f31565b61066d81610f93565b50565b60606002805461067f90611f66565b80601f01602080910402602001604051908101604052809291908181526020018280546106ab90611f66565b80156106f85780601f106106cd576101008083540402835291602001916106f8565b820191906000526020600020905b8154815290600101906020018083116106db57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806107205750610720853361047d565b6107875760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016105b9565b6107948585858585610faa565b5050505050565b6003546001600160a01b031633146107c55760405162461bcd60e51b81526004016105b990611f31565b47600060646107d5836055611fb7565b6107df9190611fd6565b9050600060646107f084600a611fb7565b6107fa9190611fd6565b90506000606461080b856005611fb7565b6108159190611fd6565b6004546040519192506001600160a01b03169084156108fc029085906000818181858888f19350505050158015610850573d6000803e3d6000fd5b506005546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561088b573d6000803e3d6000fd5b50604051339082156108fc029083906000818181858888f19350505050158015610794573d6000803e3d6000fd5b6060815183511461091e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105b9565b6000835167ffffffffffffffff81111561093a5761093a611a39565b604051908082528060200260200182016040528015610963578160200160208202803683370190505b50905060005b84518110156109db576109ae85828151811061098757610987611ff8565b60200260200101518583815181106109a1576109a1611ff8565b6020026020010151610551565b8282815181106109c0576109c0611ff8565b60209081029190910101526109d48161200e565b9050610969565b509392505050565b6003546001600160a01b03163314610a0d5760405162461bcd60e51b81526004016105b990611f31565b610a176000611146565b565b336001600160a01b0383161415610a845760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105b9565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6003546001600160a01b03163314610b1a5760405162461bcd60e51b81526004016105b990611f31565b6003805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b60035442600160c01b90910463ffffffff161115610b905760405162461bcd60e51b815260206004820152600d60248201526c53616c6520696e61637469766560981b60448201526064016105b9565b60008163ffffffff1611610be65760405162461bcd60e51b815260206004820152601c60248201527f436f756e74206d7573742062652067726561746572207468616e20300000000060448201526064016105b9565b60338163ffffffff1610610c4b5760405162461bcd60e51b815260206004820152602660248201527f436f756e74206d757374206265206c657373207468616e206f7220657175616c604482015265020746f2035360d41b60648201526084016105b9565b60035463ffffffff600160e01b8204811691610c70918491600160a01b900416612029565b63ffffffff161115610cb95760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016105b9565b60098163ffffffff161115610d2857610cdf63ffffffff821666354a6ba7a18000611fb7565b341015610d235760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016105b9565b610d83565b610d3f63ffffffff821666470de4df820000611fb7565b341015610d835760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016105b9565b61066d3382611198565b6001600160a01b038516331480610da95750610da9853361047d565b610e075760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016105b9565b6107948585858585611386565b6003546001600160a01b03163314610e3e5760405162461bcd60e51b81526004016105b990611f31565b6001600160a01b038116610ea35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105b9565b61066d81611146565b6003546001600160a01b03163314610ed65760405162461bcd60e51b81526004016105b990611f31565b6003805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b6003546001600160a01b03163314610f255760405162461bcd60e51b81526004016105b990611f31565b60035463ffffffff600160e01b8204811691610f4a918491600160a01b900416612029565b63ffffffff161115610d835760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016105b9565b8051610fa6906002906020840190611920565b5050565b8151835114610fcb5760405162461bcd60e51b81526004016105b990612051565b6001600160a01b038416610ff15760405162461bcd60e51b81526004016105b990612099565b3360005b84518110156110d857600085828151811061101257611012611ff8565b60200260200101519050600085838151811061103057611030611ff8565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156110805760405162461bcd60e51b81526004016105b9906120de565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906110bd908490612128565b92505081905550505050806110d19061200e565b9050610ff5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611128929190612140565b60405180910390a461113e8187878787876114ac565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60018163ffffffff1611156113045760008163ffffffff1667ffffffffffffffff8111156111c8576111c8611a39565b6040519080825280602002602001820160405280156111f1578160200160208202803683370190505b50905060008263ffffffff1667ffffffffffffffff81111561121557611215611a39565b60405190808252806020026020018201604052801561123e578160200160208202803683370190505b50905060005b8363ffffffff168163ffffffff1610156112e157600354819061127690600160a01b900463ffffffff16612710612029565b6112809190612029565b63ffffffff16838263ffffffff168151811061129e5761129e611ff8565b6020026020010181815250506001828263ffffffff16815181106112c4576112c4611ff8565b6020908102919091010152806112d98161216e565b915050611244565b506112fd84838360405180602001604052806000815250611608565b5050611343565b60035461134390839061132690600160a01b900463ffffffff16612710612029565b63ffffffff16600160405180602001604052806000815250611753565b80600360148282829054906101000a900463ffffffff166113649190612029565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050565b6001600160a01b0384166113ac5760405162461bcd60e51b81526004016105b990612099565b336113c58187876113bc8861181a565b6107948861181a565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156114065760405162461bcd60e51b81526004016105b9906120de565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611443908490612128565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46114a3828888888888611865565b50505050505050565b6001600160a01b0384163b1561113e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906114f09089908990889088908890600401612192565b6020604051808303816000875af192505050801561152b575060408051601f3d908101601f19168201909252611528918101906121f0565b60015b6115d85761153761220d565b806308c379a01415611571575061154c612229565b806115575750611573565b8060405162461bcd60e51b81526004016105b99190611b78565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105b9565b6001600160e01b0319811663bc197c8160e01b146114a35760405162461bcd60e51b81526004016105b9906122b3565b6001600160a01b03841661162e5760405162461bcd60e51b81526004016105b9906122fb565b815183511461164f5760405162461bcd60e51b81526004016105b990612051565b3360005b84518110156116eb5783818151811061166e5761166e611ff8565b602002602001015160008087848151811061168b5761168b611ff8565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546116d39190612128565b909155508190506116e38161200e565b915050611653565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161173c929190612140565b60405180910390a4610794816000878787876114ac565b6001600160a01b0384166117795760405162461bcd60e51b81526004016105b9906122fb565b3361178a816000876113bc8861181a565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906117ba908490612128565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461079481600087878787611865565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061185457611854611ff8565b602090810291909101015292915050565b6001600160a01b0384163b1561113e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906118a9908990899088908890889060040161233c565b6020604051808303816000875af19250505080156118e4575060408051601f3d908101601f191682019092526118e1918101906121f0565b60015b6118f05761153761220d565b6001600160e01b0319811663f23a6e6160e01b146114a35760405162461bcd60e51b81526004016105b9906122b3565b82805461192c90611f66565b90600052602060002090601f01602090048101928261194e5760008555611994565b82601f1061196757805160ff1916838001178555611994565b82800160010185558215611994579182015b82811115611994578251825591602001919060010190611979565b506119a09291506119a4565b5090565b5b808211156119a057600081556001016119a5565b80356001600160a01b03811681146119d057600080fd5b919050565b600080604083850312156119e857600080fd5b6119f1836119b9565b946020939093013593505050565b6001600160e01b03198116811461066d57600080fd5b600060208284031215611a2757600080fd5b8135611a32816119ff565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611a7557611a75611a39565b6040525050565b600067ffffffffffffffff831115611a9657611a96611a39565b604051611aad601f8501601f191660200182611a4f565b809150838152848484011115611ac257600080fd5b83836020830137600060208583010152509392505050565b600060208284031215611aec57600080fd5b813567ffffffffffffffff811115611b0357600080fd5b8201601f81018413611b1457600080fd5b611b2384823560208401611a7c565b949350505050565b6000815180845260005b81811015611b5157602081850181015186830182015201611b35565b81811115611b63576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611a326020830184611b2b565b600060208284031215611b9d57600080fd5b5035919050565b600067ffffffffffffffff821115611bbe57611bbe611a39565b5060051b60200190565b600082601f830112611bd957600080fd5b81356020611be682611ba4565b604051611bf38282611a4f565b83815260059390931b8501820192828101915086841115611c1357600080fd5b8286015b84811015611c2e5780358352918301918301611c17565b509695505050505050565b600082601f830112611c4a57600080fd5b611a3283833560208501611a7c565b600080600080600060a08688031215611c7157600080fd5b611c7a866119b9565b9450611c88602087016119b9565b9350604086013567ffffffffffffffff80821115611ca557600080fd5b611cb189838a01611bc8565b94506060880135915080821115611cc757600080fd5b611cd389838a01611bc8565b93506080880135915080821115611ce957600080fd5b50611cf688828901611c39565b9150509295509295909350565b60008060408385031215611d1657600080fd5b823567ffffffffffffffff80821115611d2e57600080fd5b818501915085601f830112611d4257600080fd5b81356020611d4f82611ba4565b604051611d5c8282611a4f565b83815260059390931b8501820192828101915089841115611d7c57600080fd5b948201945b83861015611da157611d92866119b9565b82529482019490820190611d81565b96505086013592505080821115611db757600080fd5b50611dc485828601611bc8565b9150509250929050565b600081518084526020808501945080840160005b83811015611dfe57815187529582019590820190600101611de2565b509495945050505050565b602081526000611a326020830184611dce565b60008060408385031215611e2f57600080fd5b611e38836119b9565b915060208301358015158114611e4d57600080fd5b809150509250929050565b600060208284031215611e6a57600080fd5b813563ffffffff81168114611a3257600080fd5b60008060408385031215611e9157600080fd5b611e9a836119b9565b9150611ea8602084016119b9565b90509250929050565b600080600080600060a08688031215611ec957600080fd5b611ed2866119b9565b9450611ee0602087016119b9565b93506040860135925060608601359150608086013567ffffffffffffffff811115611f0a57600080fd5b611cf688828901611c39565b600060208284031215611f2857600080fd5b611a32826119b9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611f7a57607f821691505b60208210811415611f9b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611fd157611fd1611fa1565b500290565b600082611ff357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141561202257612022611fa1565b5060010190565b600063ffffffff80831681851680830382111561204857612048611fa1565b01949350505050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6000821982111561213b5761213b611fa1565b500190565b6040815260006121536040830185611dce565b82810360208401526121658185611dce565b95945050505050565b600063ffffffff8083168181141561218857612188611fa1565b6001019392505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906121be90830186611dce565b82810360608401526121d08186611dce565b905082810360808401526121e48185611b2b565b98975050505050505050565b60006020828403121561220257600080fd5b8151611a32816119ff565b600060033d11156122265760046000803e5060005160e01c5b90565b600060443d10156122375790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561226757505050505090565b828501915081518181111561227f5750505050505090565b843d87010160208285010111156122995750505050505090565b6122a860208286010187611a4f565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061237690830184611b2b565b97965050505050505056fea2646970667358221220d006bc8ea26a437f7545e0e0df0b2b9bd7838b08d6634c55d8306514a1c82a2e64736f6c634300080b00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f657870616e73696f6e7068756e6b732e76657263656c2e6170702f6170692f7b69647d000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101805760003560e01c806395d89b41116100d1578063d5abeb011161008a578063f242432a11610064578063f242432a146104d1578063f2fde38b146104f1578063f9da322414610511578063fbf0c2e61461053157600080fd5b8063d5abeb011461043e578063e985e9c514610462578063eb8d2444146104ab57600080fd5b806395d89b4114610380578063a22cb465146103b1578063a741ae1e146103d1578063ab0bcc41146103f1578063ab6e7b4a14610415578063c7f04e651461042b57600080fd5b80632eb2c2d61161013e578063682b1b4511610118578063682b1b451461030d578063715018a6146103285780638da5cb5b1461033d5780639187011a1461036557600080fd5b80632eb2c2d6146102ab5780633ccfd60b146102cb5780634e1273f4146102e057600080fd5b8062fdd58e1461018557806301ffc9a7146101b857806302fe5305146101e857806306fdde031461020a5780630e89341c1461025257806318160ddd14610272575b600080fd5b34801561019157600080fd5b506101a56101a03660046119d5565b610551565b6040519081526020015b60405180910390f35b3480156101c457600080fd5b506101d86101d3366004611a15565b6105e8565b60405190151581526020016101af565b3480156101f457600080fd5b50610208610203366004611ada565b61063a565b005b34801561021657600080fd5b506102456040518060400160405280600f81526020016e457870616e73696f6e5068756e6b7360881b81525081565b6040516101af9190611b78565b34801561025e57600080fd5b5061024561026d366004611b8b565b610670565b34801561027e57600080fd5b5060035461029690600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016101af565b3480156102b757600080fd5b506102086102c6366004611c59565b610704565b3480156102d757600080fd5b5061020861079b565b3480156102ec57600080fd5b506103006102fb366004611d03565b6108b9565b6040516101af9190611e09565b34801561031957600080fd5b506101a566354a6ba7a1800081565b34801561033457600080fd5b506102086109e3565b34801561034957600080fd5b506003546040516001600160a01b0390911681526020016101af565b34801561037157600080fd5b506101a566470de4df82000081565b34801561038c57600080fd5b50610245604051806040016040528060058152602001640a090aa9cb60db1b81525081565b3480156103bd57600080fd5b506102086103cc366004611e1c565b610a19565b3480156103dd57600080fd5b506102086103ec366004611e58565b610af0565b3480156103fd57600080fd5b5060035461029690600160c01b900463ffffffff1681565b34801561042157600080fd5b5061029661271081565b610208610439366004611e58565b610b40565b34801561044a57600080fd5b5060035461029690600160e01b900463ffffffff1681565b34801561046e57600080fd5b506101d861047d366004611e7e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156104b757600080fd5b5060035442600160c01b90910463ffffffff1611156101d8565b3480156104dd57600080fd5b506102086104ec366004611eb1565b610d8d565b3480156104fd57600080fd5b5061020861050c366004611f16565b610e14565b34801561051d57600080fd5b5061020861052c366004611e58565b610eac565b34801561053d57600080fd5b5061020861054c366004611e58565b610efb565b60006001600160a01b0383166105c25760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061061957506001600160e01b031982166303a24d0760e21b145b8061063457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6003546001600160a01b031633146106645760405162461bcd60e51b81526004016105b990611f31565b61066d81610f93565b50565b60606002805461067f90611f66565b80601f01602080910402602001604051908101604052809291908181526020018280546106ab90611f66565b80156106f85780601f106106cd576101008083540402835291602001916106f8565b820191906000526020600020905b8154815290600101906020018083116106db57829003601f168201915b50505050509050919050565b6001600160a01b0385163314806107205750610720853361047d565b6107875760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016105b9565b6107948585858585610faa565b5050505050565b6003546001600160a01b031633146107c55760405162461bcd60e51b81526004016105b990611f31565b47600060646107d5836055611fb7565b6107df9190611fd6565b9050600060646107f084600a611fb7565b6107fa9190611fd6565b90506000606461080b856005611fb7565b6108159190611fd6565b6004546040519192506001600160a01b03169084156108fc029085906000818181858888f19350505050158015610850573d6000803e3d6000fd5b506005546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561088b573d6000803e3d6000fd5b50604051339082156108fc029083906000818181858888f19350505050158015610794573d6000803e3d6000fd5b6060815183511461091e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105b9565b6000835167ffffffffffffffff81111561093a5761093a611a39565b604051908082528060200260200182016040528015610963578160200160208202803683370190505b50905060005b84518110156109db576109ae85828151811061098757610987611ff8565b60200260200101518583815181106109a1576109a1611ff8565b6020026020010151610551565b8282815181106109c0576109c0611ff8565b60209081029190910101526109d48161200e565b9050610969565b509392505050565b6003546001600160a01b03163314610a0d5760405162461bcd60e51b81526004016105b990611f31565b610a176000611146565b565b336001600160a01b0383161415610a845760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105b9565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6003546001600160a01b03163314610b1a5760405162461bcd60e51b81526004016105b990611f31565b6003805463ffffffff909216600160c01b0263ffffffff60c01b19909216919091179055565b60035442600160c01b90910463ffffffff161115610b905760405162461bcd60e51b815260206004820152600d60248201526c53616c6520696e61637469766560981b60448201526064016105b9565b60008163ffffffff1611610be65760405162461bcd60e51b815260206004820152601c60248201527f436f756e74206d7573742062652067726561746572207468616e20300000000060448201526064016105b9565b60338163ffffffff1610610c4b5760405162461bcd60e51b815260206004820152602660248201527f436f756e74206d757374206265206c657373207468616e206f7220657175616c604482015265020746f2035360d41b60648201526084016105b9565b60035463ffffffff600160e01b8204811691610c70918491600160a01b900416612029565b63ffffffff161115610cb95760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016105b9565b60098163ffffffff161115610d2857610cdf63ffffffff821666354a6ba7a18000611fb7565b341015610d235760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016105b9565b610d83565b610d3f63ffffffff821666470de4df820000611fb7565b341015610d835760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b60448201526064016105b9565b61066d3382611198565b6001600160a01b038516331480610da95750610da9853361047d565b610e075760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016105b9565b6107948585858585611386565b6003546001600160a01b03163314610e3e5760405162461bcd60e51b81526004016105b990611f31565b6001600160a01b038116610ea35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105b9565b61066d81611146565b6003546001600160a01b03163314610ed65760405162461bcd60e51b81526004016105b990611f31565b6003805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b6003546001600160a01b03163314610f255760405162461bcd60e51b81526004016105b990611f31565b60035463ffffffff600160e01b8204811691610f4a918491600160a01b900416612029565b63ffffffff161115610d835760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016105b9565b8051610fa6906002906020840190611920565b5050565b8151835114610fcb5760405162461bcd60e51b81526004016105b990612051565b6001600160a01b038416610ff15760405162461bcd60e51b81526004016105b990612099565b3360005b84518110156110d857600085828151811061101257611012611ff8565b60200260200101519050600085838151811061103057611030611ff8565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156110805760405162461bcd60e51b81526004016105b9906120de565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906110bd908490612128565b92505081905550505050806110d19061200e565b9050610ff5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611128929190612140565b60405180910390a461113e8187878787876114ac565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60018163ffffffff1611156113045760008163ffffffff1667ffffffffffffffff8111156111c8576111c8611a39565b6040519080825280602002602001820160405280156111f1578160200160208202803683370190505b50905060008263ffffffff1667ffffffffffffffff81111561121557611215611a39565b60405190808252806020026020018201604052801561123e578160200160208202803683370190505b50905060005b8363ffffffff168163ffffffff1610156112e157600354819061127690600160a01b900463ffffffff16612710612029565b6112809190612029565b63ffffffff16838263ffffffff168151811061129e5761129e611ff8565b6020026020010181815250506001828263ffffffff16815181106112c4576112c4611ff8565b6020908102919091010152806112d98161216e565b915050611244565b506112fd84838360405180602001604052806000815250611608565b5050611343565b60035461134390839061132690600160a01b900463ffffffff16612710612029565b63ffffffff16600160405180602001604052806000815250611753565b80600360148282829054906101000a900463ffffffff166113649190612029565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050565b6001600160a01b0384166113ac5760405162461bcd60e51b81526004016105b990612099565b336113c58187876113bc8861181a565b6107948861181a565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156114065760405162461bcd60e51b81526004016105b9906120de565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611443908490612128565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46114a3828888888888611865565b50505050505050565b6001600160a01b0384163b1561113e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906114f09089908990889088908890600401612192565b6020604051808303816000875af192505050801561152b575060408051601f3d908101601f19168201909252611528918101906121f0565b60015b6115d85761153761220d565b806308c379a01415611571575061154c612229565b806115575750611573565b8060405162461bcd60e51b81526004016105b99190611b78565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105b9565b6001600160e01b0319811663bc197c8160e01b146114a35760405162461bcd60e51b81526004016105b9906122b3565b6001600160a01b03841661162e5760405162461bcd60e51b81526004016105b9906122fb565b815183511461164f5760405162461bcd60e51b81526004016105b990612051565b3360005b84518110156116eb5783818151811061166e5761166e611ff8565b602002602001015160008087848151811061168b5761168b611ff8565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546116d39190612128565b909155508190506116e38161200e565b915050611653565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161173c929190612140565b60405180910390a4610794816000878787876114ac565b6001600160a01b0384166117795760405162461bcd60e51b81526004016105b9906122fb565b3361178a816000876113bc8861181a565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906117ba908490612128565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461079481600087878787611865565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061185457611854611ff8565b602090810291909101015292915050565b6001600160a01b0384163b1561113e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906118a9908990899088908890889060040161233c565b6020604051808303816000875af19250505080156118e4575060408051601f3d908101601f191682019092526118e1918101906121f0565b60015b6118f05761153761220d565b6001600160e01b0319811663f23a6e6160e01b146114a35760405162461bcd60e51b81526004016105b9906122b3565b82805461192c90611f66565b90600052602060002090601f01602090048101928261194e5760008555611994565b82601f1061196757805160ff1916838001178555611994565b82800160010185558215611994579182015b82811115611994578251825591602001919060010190611979565b506119a09291506119a4565b5090565b5b808211156119a057600081556001016119a5565b80356001600160a01b03811681146119d057600080fd5b919050565b600080604083850312156119e857600080fd5b6119f1836119b9565b946020939093013593505050565b6001600160e01b03198116811461066d57600080fd5b600060208284031215611a2757600080fd5b8135611a32816119ff565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611a7557611a75611a39565b6040525050565b600067ffffffffffffffff831115611a9657611a96611a39565b604051611aad601f8501601f191660200182611a4f565b809150838152848484011115611ac257600080fd5b83836020830137600060208583010152509392505050565b600060208284031215611aec57600080fd5b813567ffffffffffffffff811115611b0357600080fd5b8201601f81018413611b1457600080fd5b611b2384823560208401611a7c565b949350505050565b6000815180845260005b81811015611b5157602081850181015186830182015201611b35565b81811115611b63576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611a326020830184611b2b565b600060208284031215611b9d57600080fd5b5035919050565b600067ffffffffffffffff821115611bbe57611bbe611a39565b5060051b60200190565b600082601f830112611bd957600080fd5b81356020611be682611ba4565b604051611bf38282611a4f565b83815260059390931b8501820192828101915086841115611c1357600080fd5b8286015b84811015611c2e5780358352918301918301611c17565b509695505050505050565b600082601f830112611c4a57600080fd5b611a3283833560208501611a7c565b600080600080600060a08688031215611c7157600080fd5b611c7a866119b9565b9450611c88602087016119b9565b9350604086013567ffffffffffffffff80821115611ca557600080fd5b611cb189838a01611bc8565b94506060880135915080821115611cc757600080fd5b611cd389838a01611bc8565b93506080880135915080821115611ce957600080fd5b50611cf688828901611c39565b9150509295509295909350565b60008060408385031215611d1657600080fd5b823567ffffffffffffffff80821115611d2e57600080fd5b818501915085601f830112611d4257600080fd5b81356020611d4f82611ba4565b604051611d5c8282611a4f565b83815260059390931b8501820192828101915089841115611d7c57600080fd5b948201945b83861015611da157611d92866119b9565b82529482019490820190611d81565b96505086013592505080821115611db757600080fd5b50611dc485828601611bc8565b9150509250929050565b600081518084526020808501945080840160005b83811015611dfe57815187529582019590820190600101611de2565b509495945050505050565b602081526000611a326020830184611dce565b60008060408385031215611e2f57600080fd5b611e38836119b9565b915060208301358015158114611e4d57600080fd5b809150509250929050565b600060208284031215611e6a57600080fd5b813563ffffffff81168114611a3257600080fd5b60008060408385031215611e9157600080fd5b611e9a836119b9565b9150611ea8602084016119b9565b90509250929050565b600080600080600060a08688031215611ec957600080fd5b611ed2866119b9565b9450611ee0602087016119b9565b93506040860135925060608601359150608086013567ffffffffffffffff811115611f0a57600080fd5b611cf688828901611c39565b600060208284031215611f2857600080fd5b611a32826119b9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611f7a57607f821691505b60208210811415611f9b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611fd157611fd1611fa1565b500290565b600082611ff357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141561202257612022611fa1565b5060010190565b600063ffffffff80831681851680830382111561204857612048611fa1565b01949350505050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6000821982111561213b5761213b611fa1565b500190565b6040815260006121536040830185611dce565b82810360208401526121658185611dce565b95945050505050565b600063ffffffff8083168181141561218857612188611fa1565b6001019392505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906121be90830186611dce565b82810360608401526121d08186611dce565b905082810360808401526121e48185611b2b565b98975050505050505050565b60006020828403121561220257600080fd5b8151611a32816119ff565b600060033d11156122265760046000803e5060005160e01c5b90565b600060443d10156122375790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561226757505050505090565b828501915081518181111561227f5750505050505090565b843d87010160208285010111156122995750505050505090565b6122a860208286010187611a4f565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061237690830184611b2b565b97965050505050505056fea2646970667358221220d006bc8ea26a437f7545e0e0df0b2b9bd7838b08d6634c55d8306514a1c82a2e64736f6c634300080b0033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f657870616e73696f6e7068756e6b732e76657263656c2e6170702f6170692f7b69647d000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : uri (string): https://expansionphunks.vercel.app/api/{id}

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000002b
Arg [2] : 68747470733a2f2f657870616e73696f6e7068756e6b732e76657263656c2e61
Arg [3] : 70702f6170692f7b69647d000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

35258:2745:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21964:231;;;;;;;;;;-1:-1:-1;21964:231:0;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;21964:231:0;;;;;;;;20987:310;;;;;;;;;;-1:-1:-1;20987:310:0;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;20987:310:0;1019:187:1;35900:83:0;;;;;;;;;;-1:-1:-1;35900:83:0;;;;;:::i;:::-;;:::i;:::-;;35310:47;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35310:47:0;;;;;;;;;;;;:::i;21708:105::-;;;;;;;;;;-1:-1:-1;21708:105:0;;;;;:::i;:::-;;:::i;35412:29::-;;;;;;;;;;-1:-1:-1;35412:29:0;;;;-1:-1:-1;;;35412:29:0;;;;;;;;;3588:10:1;3576:23;;;3558:42;;3546:2;3531:18;35412:29:0;3414:192:1;24059:442:0;;;;;;;;;;-1:-1:-1;24059:442:0;;;;;:::i;:::-;;:::i;37617:383::-;;;;;;;;;;;;;:::i;22361:524::-;;;;;;;;;;-1:-1:-1;22361:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35502:47::-;;;;;;;;;;;;35538:11;35502:47;;2485:94;;;;;;;;;;;;;:::i;1834:87::-;;;;;;;;;;-1:-1:-1;1907:6:0;;1834:87;;-1:-1:-1;;;;;1907:6:0;;;7767:51:1;;7755:2;7740:18;1834:87:0;7621:203:1;35448:47:0;;;;;;;;;;;;35485:10;35448:47;;35364:39;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35364:39:0;;;;;22958:311;;;;;;;;;;-1:-1:-1;22958:311:0;;;;;:::i;:::-;;:::i;35991:97::-;;;;;;;;;;-1:-1:-1;35991:97:0;;;;;:::i;:::-;;:::i;35562:36::-;;;;;;;;;;-1:-1:-1;35562:36:0;;;;-1:-1:-1;;;35562:36:0;;;;;;35605:42;;;;;;;;;;;;35642:5;35605:42;;36873:561;;;;;;:::i;:::-;;:::i;35654:31::-;;;;;;;;;;-1:-1:-1;35654:31:0;;;;-1:-1:-1;;;35654:31:0;;;;;;23341:168;;;;;;;;;;-1:-1:-1;23341:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;23464:27:0;;;23440:4;23464:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;23341:168;36100:105;;;;;;;;;;-1:-1:-1;36169:9:0;;36182:15;-1:-1:-1;;;36169:9:0;;;;;:28;;36100:105;;23581:401;;;;;;;;;;-1:-1:-1;23581:401:0;;;;;:::i;:::-;;:::i;2734:192::-;;;;;;;;;;-1:-1:-1;2734:192:0;;;;;:::i;:::-;;:::i;36213:93::-;;;;;;;;;;-1:-1:-1;36213:93:0;;;;;:::i;:::-;;:::i;37442:167::-;;;;;;;;;;-1:-1:-1;37442:167:0;;;;;:::i;:::-;;:::i;21964:231::-;22050:7;-1:-1:-1;;;;;22078:21:0;;22070:77;;;;-1:-1:-1;;;22070:77:0;;9731:2:1;22070:77:0;;;9713:21:1;9770:2;9750:18;;;9743:30;9809:34;9789:18;;;9782:62;-1:-1:-1;;;9860:18:1;;;9853:41;9911:19;;22070:77:0;;;;;;;;;-1:-1:-1;22165:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;22165:22:0;;;;;;;;;;;;21964:231::o;20987:310::-;21089:4;-1:-1:-1;;;;;;21126:41:0;;-1:-1:-1;;;21126:41:0;;:110;;-1:-1:-1;;;;;;;21184:52:0;;-1:-1:-1;;;21184:52:0;21126:110;:163;;;-1:-1:-1;;;;;;;;;;12874:40:0;;;21253:36;21106:183;20987:310;-1:-1:-1;;20987:310:0:o;35900:83::-;1907:6;;-1:-1:-1;;;;;1907:6:0;735:10;2054:23;2046:68;;;;-1:-1:-1;;;2046:68:0;;;;;;;:::i;:::-;35963:12:::1;35971:3;35963:7;:12::i;:::-;35900:83:::0;:::o;21708:105::-;21768:13;21801:4;21794:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21708:105;;;:::o;24059:442::-;-1:-1:-1;;;;;24292:20:0;;735:10;24292:20;;:60;;-1:-1:-1;24316:36:0;24333:4;735:10;23341:168;:::i;24316:36::-;24270:160;;;;-1:-1:-1;;;24270:160:0;;10889:2:1;24270:160:0;;;10871:21:1;10928:2;10908:18;;;10901:30;10967:34;10947:18;;;10940:62;-1:-1:-1;;;11018:18:1;;;11011:48;11076:19;;24270:160:0;10687:414:1;24270:160:0;24441:52;24464:4;24470:2;24474:3;24479:7;24488:4;24441:22;:52::i;:::-;24059:442;;;;;:::o;37617:383::-;1907:6;;-1:-1:-1;;;;;1907:6:0;735:10;2054:23;2046:68;;;;-1:-1:-1;;;2046:68:0;;;;;;;:::i;:::-;37685:21:::1;37667:15;37751:3;37736:12;37685:21:::0;37746:2:::1;37736:12;:::i;:::-;:18;;;;:::i;:::-;37717:37:::0;-1:-1:-1;37765:16:0::1;37799:3;37784:12;:7:::0;37794:2:::1;37784:12;:::i;:::-;:18;;;;:::i;:::-;37765:37:::0;-1:-1:-1;37813:16:0::1;37846:3;37832:11;:7:::0;37842:1:::1;37832:11;:::i;:::-;:17;;;;:::i;:::-;37870:7;::::0;37862:35:::1;::::0;37813:36;;-1:-1:-1;;;;;;37870:7:0::1;::::0;37862:35;::::1;;;::::0;37888:8;;37870:7:::1;37862:35:::0;37870:7;37862:35;37888:8;37870:7;37862:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;37916:7:0::1;::::0;37908:35:::1;::::0;-1:-1:-1;;;;;37916:7:0;;::::1;::::0;37908:35;::::1;;;::::0;37934:8;;37916:7:::1;37908:35:::0;37916:7;37908:35;37934:8;37916:7;37908:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;37954:38:0::1;::::0;37962:10:::1;::::0;37954:38;::::1;;;::::0;37983:8;;37954:38:::1;::::0;;;37983:8;37962:10;37954:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;22361:524:::0;22517:16;22578:3;:10;22559:8;:15;:29;22551:83;;;;-1:-1:-1;;;22551:83:0;;11835:2:1;22551:83:0;;;11817:21:1;11874:2;11854:18;;;11847:30;11913:34;11893:18;;;11886:62;-1:-1:-1;;;11964:18:1;;;11957:39;12013:19;;22551:83:0;11633:405:1;22551:83:0;22647:30;22694:8;:15;22680:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22680:30:0;;22647:63;;22728:9;22723:122;22747:8;:15;22743:1;:19;22723:122;;;22803:30;22813:8;22822:1;22813:11;;;;;;;;:::i;:::-;;;;;;;22826:3;22830:1;22826:6;;;;;;;;:::i;:::-;;;;;;;22803:9;:30::i;:::-;22784:13;22798:1;22784:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;22764:3;;;:::i;:::-;;;22723:122;;;-1:-1:-1;22864:13:0;22361:524;-1:-1:-1;;;22361:524:0:o;2485:94::-;1907:6;;-1:-1:-1;;;;;1907:6:0;735:10;2054:23;2046:68;;;;-1:-1:-1;;;2046:68:0;;;;;;;:::i;:::-;2550:21:::1;2568:1;2550:9;:21::i;:::-;2485:94::o:0;22958:311::-;735:10;-1:-1:-1;;;;;23061:24:0;;;;23053:78;;;;-1:-1:-1;;;23053:78:0;;12517:2:1;23053:78:0;;;12499:21:1;12556:2;12536:18;;;12529:30;12595:34;12575:18;;;12568:62;-1:-1:-1;;;12646:18:1;;;12639:39;12695:19;;23053:78:0;12315:405:1;23053:78:0;735:10;23144:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23144:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;23144:53:0;;;;;;;;;;23213:48;;1159:41:1;;;23144:42:0;;735:10;23213:48;;1132:18:1;23213:48:0;;;;;;;22958:311;;:::o;35991:97::-;1907:6;;-1:-1:-1;;;;;1907:6:0;735:10;2054:23;2046:68;;;;-1:-1:-1;;;2046:68:0;;;;;;;:::i;:::-;36059:9:::1;:21:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;36059:21:0::1;-1:-1:-1::0;;;;36059:21:0;;::::1;::::0;;;::::1;::::0;;35991:97::o;36873:561::-;36169:9;;36182:15;-1:-1:-1;;;36169:9:0;;;;;:28;;36933:40;;;;-1:-1:-1;;;36933:40:0;;12927:2:1;36933:40:0;;;12909:21:1;12966:2;12946:18;;;12939:30;-1:-1:-1;;;12985:18:1;;;12978:43;13038:18;;36933:40:0;12725:337:1;36933:40:0;37000:1;36992:5;:9;;;36984:50;;;;-1:-1:-1;;;36984:50:0;;13269:2:1;36984:50:0;;;13251:21:1;13308:2;13288:18;;;13281:30;13347;13327:18;;;13320:58;13395:18;;36984:50:0;13067:352:1;36984:50:0;37061:2;37053:5;:10;;;37045:61;;;;-1:-1:-1;;;37045:61:0;;13626:2:1;37045:61:0;;;13608:21:1;13665:2;13645:18;;;13638:30;13704:34;13684:18;;;13677:62;-1:-1:-1;;;13755:18:1;;;13748:36;13801:19;;37045:61:0;13424:402:1;37045:61:0;37148:9;;;-1:-1:-1;;;37148:9:0;;;;;37125:19;;37139:5;;-1:-1:-1;;;37125:11:0;;;:19;:::i;:::-;:32;;;;37117:63;;;;-1:-1:-1;;;37117:63:0;;14266:2:1;37117:63:0;;;14248:21:1;14305:2;14285:18;;;14278:30;-1:-1:-1;;;14324:18:1;;;14317:48;14382:18;;37117:63:0;14064:342:1;37117:63:0;37205:1;37197:5;:9;;;37193:198;;;37244:17;;;;35538:11;37244:17;:::i;:::-;37231:9;:30;;37223:61;;;;-1:-1:-1;;;37223:61:0;;14613:2:1;37223:61:0;;;14595:21:1;14652:2;14632:18;;;14625:30;-1:-1:-1;;;14671:18:1;;;14664:48;14729:18;;37223:61:0;14411:342:1;37223:61:0;37193:198;;;37338:18;;;;35485:10;37338:18;:::i;:::-;37325:9;:31;;37317:62;;;;-1:-1:-1;;;37317:62:0;;14613:2:1;37317:62:0;;;14595:21:1;14652:2;14632:18;;;14625:30;-1:-1:-1;;;14671:18:1;;;14664:48;14729:18;;37317:62:0;14411:342:1;37317:62:0;37403:23;37408:10;37420:5;37403:4;:23::i;23581:401::-;-1:-1:-1;;;;;23789:20:0;;735:10;23789:20;;:60;;-1:-1:-1;23813:36:0;23830:4;735:10;23341:168;:::i;23813:36::-;23767:151;;;;-1:-1:-1;;;23767:151:0;;14960:2:1;23767:151:0;;;14942:21:1;14999:2;14979:18;;;14972:30;15038:34;15018:18;;;15011:62;-1:-1:-1;;;15089:18:1;;;15082:39;15138:19;;23767:151:0;14758:405:1;23767:151:0;23929:45;23947:4;23953:2;23957;23961:6;23969:4;23929:17;:45::i;2734:192::-;1907:6;;-1:-1:-1;;;;;1907:6:0;735:10;2054:23;2046:68;;;;-1:-1:-1;;;2046:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2823:22:0;::::1;2815:73;;;::::0;-1:-1:-1;;;2815:73:0;;15370:2:1;2815:73:0::1;::::0;::::1;15352:21:1::0;15409:2;15389:18;;;15382:30;15448:34;15428:18;;;15421:62;-1:-1:-1;;;15499:18:1;;;15492:36;15545:19;;2815:73:0::1;15168:402:1::0;2815:73:0::1;2899:19;2909:8;2899:9;:19::i;36213:93::-:0;1907:6;;-1:-1:-1;;;;;1907:6:0;735:10;2054:23;2046:68;;;;-1:-1:-1;;;2046:68:0;;;;;;;:::i;:::-;36279:9:::1;:19:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;36279:19:0::1;-1:-1:-1::0;;;;;36279:19:0;;::::1;::::0;;;::::1;::::0;;36213:93::o;37442:167::-;1907:6;;-1:-1:-1;;;;;1907:6:0;735:10;2054:23;2046:68;;;;-1:-1:-1;;;2046:68:0;;;;;;;:::i;:::-;37535:9:::1;::::0;::::1;-1:-1:-1::0;;;37535:9:0;::::1;::::0;::::1;::::0;37512:19:::1;::::0;37526:5;;-1:-1:-1;;;37512:11:0;::::1;;:19;:::i;:::-;:32;;;;37504:63;;;::::0;-1:-1:-1;;;37504:63:0;;14266:2:1;37504:63:0::1;::::0;::::1;14248:21:1::0;14305:2;14285:18;;;14278:30;-1:-1:-1;;;14324:18:1;;;14317:48;14382:18;;37504:63:0::1;14064:342:1::0;28061:88:0;28128:13;;;;:4;;:13;;;;;:::i;:::-;;28061:88;:::o;26143:1074::-;26370:7;:14;26356:3;:10;:28;26348:81;;;;-1:-1:-1;;;26348:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26448:16:0;;26440:66;;;;-1:-1:-1;;;26440:66:0;;;;;;;:::i;:::-;735:10;26519:16;26636:421;26660:3;:10;26656:1;:14;26636:421;;;26692:10;26705:3;26709:1;26705:6;;;;;;;;:::i;:::-;;;;;;;26692:19;;26726:14;26743:7;26751:1;26743:10;;;;;;;;:::i;:::-;;;;;;;;;;;;26770:19;26792:13;;;;;;;;;;-1:-1:-1;;;;;26792:19:0;;;;;;;;;;;;26743:10;;-1:-1:-1;26834:21:0;;;;26826:76;;;;-1:-1:-1;;;26826:76:0;;;;;;;:::i;:::-;26946:9;:13;;;;;;;;;;;-1:-1:-1;;;;;26946:19:0;;;;;;;;;;26968:20;;;26946:42;;27018:17;;;;;;;:27;;26968:20;;26946:9;27018:27;;26968:20;;27018:27;:::i;:::-;;;;;;;;26677:380;;;26672:3;;;;:::i;:::-;;;26636:421;;;;27104:2;-1:-1:-1;;;;;27074:47:0;27098:4;-1:-1:-1;;;;;27074:47:0;27088:8;-1:-1:-1;;;;;27074:47:0;;27108:3;27113:7;27074:47;;;;;;;:::i;:::-;;;;;;;;27134:75;27170:8;27180:4;27186:2;27190:3;27195:7;27204:4;27134:35;:75::i;:::-;26337:880;26143:1074;;;;;:::o;2934:173::-;3009:6;;;-1:-1:-1;;;;;3026:17:0;;;-1:-1:-1;;;;;;3026:17:0;;;;;;;3059:40;;3009:6;;;3026:17;3009:6;;3059:40;;2990:16;;3059:40;2979:128;2934:173;:::o;36314:547::-;36386:1;36378:5;:9;;;36374:447;;;36404:20;36449:5;36441:14;;36427:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36427:29:0;;36404:52;;36471:24;36520:5;36512:14;;36498:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36498:29:0;;36471:56;;36549:8;36544:141;36567:5;36563:9;;:1;:9;;;36544:141;;;36621:11;;36635:1;;36607:25;;-1:-1:-1;;;36621:11:0;;;;35642:5;36607:25;:::i;:::-;:29;;;;:::i;:::-;36598:38;;:3;36602:1;36598:6;;;;;;;;;;:::i;:::-;;;;;;:38;;;;;36668:1;36655:7;36663:1;36655:10;;;;;;;;;;:::i;:::-;;;;;;;;;;:14;36574:3;;;;:::i;:::-;;;;36544:141;;;;36701:32;36712:2;36716:3;36721:7;36701:32;;;;;;;;;;;;:10;:32::i;:::-;36389:356;;36374:447;;;36790:11;;36766:43;;36772:2;;36776:25;;-1:-1:-1;;;36790:11:0;;;;35642:5;36776:25;:::i;:::-;36766:43;;36803:1;36766:43;;;;;;;;;;;;:5;:43::i;:::-;36848:5;36833:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36314:547;;:::o;24965:820::-;-1:-1:-1;;;;;25153:16:0;;25145:66;;;;-1:-1:-1;;;25145:66:0;;;;;;;:::i;:::-;735:10;25268:96;735:10;25299:4;25305:2;25309:21;25327:2;25309:17;:21::i;:::-;25332:25;25350:6;25332:17;:25::i;25268:96::-;25377:19;25399:13;;;;;;;;;;;-1:-1:-1;;;;;25399:19:0;;;;;;;;;;25437:21;;;;25429:76;;;;-1:-1:-1;;;25429:76:0;;;;;;;:::i;:::-;25541:9;:13;;;;;;;;;;;-1:-1:-1;;;;;25541:19:0;;;;;;;;;;25563:20;;;25541:42;;25605:17;;;;;;;:27;;25563:20;;25541:9;25605:27;;25563:20;;25605:27;:::i;:::-;;;;-1:-1:-1;;25650:46:0;;;17784:25:1;;;17840:2;17825:18;;17818:34;;;-1:-1:-1;;;;;25650:46:0;;;;;;;;;;;;;;17757:18:1;25650:46:0;;;;;;;25709:68;25740:8;25750:4;25756:2;25760;25764:6;25772:4;25709:30;:68::i;:::-;25134:651;;24965:820;;;;;:::o;34232:813::-;-1:-1:-1;;;;;34472:13:0;;4172:20;4220:8;34468:570;;34508:79;;-1:-1:-1;;;34508:79:0;;-1:-1:-1;;;;;34508:43:0;;;;;:79;;34552:8;;34562:4;;34568:3;;34573:7;;34582:4;;34508:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34508:79:0;;;;;;;;-1:-1:-1;;34508:79:0;;;;;;;;;;;;:::i;:::-;;;34504:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34900:6;34893:14;;-1:-1:-1;;;34893:14:0;;;;;;;;:::i;34504:523::-;;;34949:62;;-1:-1:-1;;;34949:62:0;;20011:2:1;34949:62:0;;;19993:21:1;20050:2;20030:18;;;20023:30;20089:34;20069:18;;;20062:62;-1:-1:-1;;;20140:18:1;;;20133:50;20200:19;;34949:62:0;19809:416:1;34504:523:0;-1:-1:-1;;;;;;34669:60:0;;-1:-1:-1;;;34669:60:0;34665:159;;34754:50;;-1:-1:-1;;;34754:50:0;;;;;;;:::i;29505:735::-;-1:-1:-1;;;;;29683:16:0;;29675:62;;;;-1:-1:-1;;;29675:62:0;;;;;;;:::i;:::-;29770:7;:14;29756:3;:10;:28;29748:81;;;;-1:-1:-1;;;29748:81:0;;;;;;;:::i;:::-;735:10;29842:16;29965:103;29989:3;:10;29985:1;:14;29965:103;;;30046:7;30054:1;30046:10;;;;;;;;:::i;:::-;;;;;;;30021:9;:17;30031:3;30035:1;30031:6;;;;;;;;:::i;:::-;;;;;;;30021:17;;;;;;;;;;;:21;30039:2;-1:-1:-1;;;;;30021:21:0;-1:-1:-1;;;;;30021:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;30001:3:0;;-1:-1:-1;30001:3:0;;;:::i;:::-;;;;29965:103;;;;30121:2;-1:-1:-1;;;;;30085:53:0;30117:1;-1:-1:-1;;;;;30085:53:0;30099:8;-1:-1:-1;;;;;30085:53:0;;30125:3;30130:7;30085:53;;;;;;;:::i;:::-;;;;;;;;30151:81;30187:8;30205:1;30209:2;30213:3;30218:7;30227:4;30151:35;:81::i;28550:599::-;-1:-1:-1;;;;;28708:21:0;;28700:67;;;;-1:-1:-1;;;28700:67:0;;;;;;;:::i;:::-;735:10;28824:107;735:10;28780:16;28867:7;28876:21;28894:2;28876:17;:21::i;28824:107::-;28944:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28944:22:0;;;;;;;;;:32;;28970:6;;28944:9;:32;;28970:6;;28944:32;:::i;:::-;;;;-1:-1:-1;;28992:57:0;;;17784:25:1;;;17840:2;17825:18;;17818:34;;;-1:-1:-1;;;;;28992:57:0;;;;29025:1;;28992:57;;;;;;17757:18:1;28992:57:0;;;;;;;29062:79;29093:8;29111:1;29115:7;29124:2;29128:6;29136:4;29062:30;:79::i;35053:198::-;35173:16;;;35187:1;35173:16;;;;;;;;;35119;;35148:22;;35173:16;;;;;;;;;;;;-1:-1:-1;35173:16:0;35148:41;;35211:7;35200:5;35206:1;35200:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;35238:5;35053:198;-1:-1:-1;;35053:198:0:o;33480:744::-;-1:-1:-1;;;;;33695:13:0;;4172:20;4220:8;33691:526;;33731:72;;-1:-1:-1;;;33731:72:0;;-1:-1:-1;;;;;33731:38:0;;;;;:72;;33770:8;;33780:4;;33786:2;;33790:6;;33798:4;;33731:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33731:72:0;;;;;;;;-1:-1:-1;;33731:72:0;;;;;;;;;;;;:::i;:::-;;;33727:479;;;;:::i;:::-;-1:-1:-1;;;;;;33853:55:0;;-1:-1:-1;;;33853:55:0;33849:154;;33933:50;;-1:-1:-1;;;33933:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:1:o;1211:127::-;1272:10;1267:3;1263:20;1260:1;1253:31;1303:4;1300:1;1293:15;1327:4;1324:1;1317:15;1343:249;1453:2;1434:13;;-1:-1:-1;;1430:27:1;1418:40;;1488:18;1473:34;;1509:22;;;1470:62;1467:88;;;1535:18;;:::i;:::-;1571:2;1564:22;-1:-1:-1;;1343:249:1:o;1597:469::-;1662:5;1696:18;1688:6;1685:30;1682:56;;;1718:18;;:::i;:::-;1767:2;1761:9;1779:69;1836:2;1815:15;;-1:-1:-1;;1811:29:1;1842:4;1807:40;1761:9;1779:69;:::i;:::-;1866:6;1857:15;;1896:6;1888;1881:22;1936:3;1927:6;1922:3;1918:16;1915:25;1912:45;;;1953:1;1950;1943:12;1912:45;2003:6;1998:3;1991:4;1983:6;1979:17;1966:44;2058:1;2051:4;2042:6;2034;2030:19;2026:30;2019:41;;1597:469;;;;;:::o;2071:451::-;2140:6;2193:2;2181:9;2172:7;2168:23;2164:32;2161:52;;;2209:1;2206;2199:12;2161:52;2249:9;2236:23;2282:18;2274:6;2271:30;2268:50;;;2314:1;2311;2304:12;2268:50;2337:22;;2390:4;2382:13;;2378:27;-1:-1:-1;2368:55:1;;2419:1;2416;2409:12;2368:55;2442:74;2508:7;2503:2;2490:16;2485:2;2481;2477:11;2442:74;:::i;:::-;2432:84;2071:451;-1:-1:-1;;;;2071:451:1:o;2527:472::-;2569:3;2607:5;2601:12;2634:6;2629:3;2622:19;2659:1;2669:162;2683:6;2680:1;2677:13;2669:162;;;2745:4;2801:13;;;2797:22;;2791:29;2773:11;;;2769:20;;2762:59;2698:12;2669:162;;;2849:6;2846:1;2843:13;2840:87;;;2915:1;2908:4;2899:6;2894:3;2890:16;2886:27;2879:38;2840:87;-1:-1:-1;2981:2:1;2960:15;-1:-1:-1;;2956:29:1;2947:39;;;;2988:4;2943:50;;2527:472;-1:-1:-1;;2527:472:1:o;3004:220::-;3153:2;3142:9;3135:21;3116:4;3173:45;3214:2;3203:9;3199:18;3191:6;3173:45;:::i;3229:180::-;3288:6;3341:2;3329:9;3320:7;3316:23;3312:32;3309:52;;;3357:1;3354;3347:12;3309:52;-1:-1:-1;3380:23:1;;3229:180;-1:-1:-1;3229:180:1:o;3611:183::-;3671:4;3704:18;3696:6;3693:30;3690:56;;;3726:18;;:::i;:::-;-1:-1:-1;3771:1:1;3767:14;3783:4;3763:25;;3611:183::o;3799:724::-;3853:5;3906:3;3899:4;3891:6;3887:17;3883:27;3873:55;;3924:1;3921;3914:12;3873:55;3960:6;3947:20;3986:4;4009:43;4049:2;4009:43;:::i;:::-;4081:2;4075:9;4093:31;4121:2;4113:6;4093:31;:::i;:::-;4159:18;;;4251:1;4247:10;;;;4235:23;;4231:32;;;4193:15;;;;-1:-1:-1;4275:15:1;;;4272:35;;;4303:1;4300;4293:12;4272:35;4339:2;4331:6;4327:15;4351:142;4367:6;4362:3;4359:15;4351:142;;;4433:17;;4421:30;;4471:12;;;;4384;;4351:142;;;-1:-1:-1;4511:6:1;3799:724;-1:-1:-1;;;;;;3799:724:1:o;4528:221::-;4570:5;4623:3;4616:4;4608:6;4604:17;4600:27;4590:55;;4641:1;4638;4631:12;4590:55;4663:80;4739:3;4730:6;4717:20;4710:4;4702:6;4698:17;4663:80;:::i;4754:943::-;4908:6;4916;4924;4932;4940;4993:3;4981:9;4972:7;4968:23;4964:33;4961:53;;;5010:1;5007;5000:12;4961:53;5033:29;5052:9;5033:29;:::i;:::-;5023:39;;5081:38;5115:2;5104:9;5100:18;5081:38;:::i;:::-;5071:48;;5170:2;5159:9;5155:18;5142:32;5193:18;5234:2;5226:6;5223:14;5220:34;;;5250:1;5247;5240:12;5220:34;5273:61;5326:7;5317:6;5306:9;5302:22;5273:61;:::i;:::-;5263:71;;5387:2;5376:9;5372:18;5359:32;5343:48;;5416:2;5406:8;5403:16;5400:36;;;5432:1;5429;5422:12;5400:36;5455:63;5510:7;5499:8;5488:9;5484:24;5455:63;:::i;:::-;5445:73;;5571:3;5560:9;5556:19;5543:33;5527:49;;5601:2;5591:8;5588:16;5585:36;;;5617:1;5614;5607:12;5585:36;;5640:51;5683:7;5672:8;5661:9;5657:24;5640:51;:::i;:::-;5630:61;;;4754:943;;;;;;;;:::o;5702:1208::-;5820:6;5828;5881:2;5869:9;5860:7;5856:23;5852:32;5849:52;;;5897:1;5894;5887:12;5849:52;5937:9;5924:23;5966:18;6007:2;5999:6;5996:14;5993:34;;;6023:1;6020;6013:12;5993:34;6061:6;6050:9;6046:22;6036:32;;6106:7;6099:4;6095:2;6091:13;6087:27;6077:55;;6128:1;6125;6118:12;6077:55;6164:2;6151:16;6186:4;6209:43;6249:2;6209:43;:::i;:::-;6281:2;6275:9;6293:31;6321:2;6313:6;6293:31;:::i;:::-;6359:18;;;6447:1;6443:10;;;;6435:19;;6431:28;;;6393:15;;;;-1:-1:-1;6471:19:1;;;6468:39;;;6503:1;6500;6493:12;6468:39;6527:11;;;;6547:148;6563:6;6558:3;6555:15;6547:148;;;6629:23;6648:3;6629:23;:::i;:::-;6617:36;;6580:12;;;;6673;;;;6547:148;;;6714:6;-1:-1:-1;;6758:18:1;;6745:32;;-1:-1:-1;;6789:16:1;;;6786:36;;;6818:1;6815;6808:12;6786:36;;6841:63;6896:7;6885:8;6874:9;6870:24;6841:63;:::i;:::-;6831:73;;;5702:1208;;;;;:::o;6915:435::-;6968:3;7006:5;7000:12;7033:6;7028:3;7021:19;7059:4;7088:2;7083:3;7079:12;7072:19;;7125:2;7118:5;7114:14;7146:1;7156:169;7170:6;7167:1;7164:13;7156:169;;;7231:13;;7219:26;;7265:12;;;;7300:15;;;;7192:1;7185:9;7156:169;;;-1:-1:-1;7341:3:1;;6915:435;-1:-1:-1;;;;;6915:435:1:o;7355:261::-;7534:2;7523:9;7516:21;7497:4;7554:56;7606:2;7595:9;7591:18;7583:6;7554:56;:::i;7829:347::-;7894:6;7902;7955:2;7943:9;7934:7;7930:23;7926:32;7923:52;;;7971:1;7968;7961:12;7923:52;7994:29;8013:9;7994:29;:::i;:::-;7984:39;;8073:2;8062:9;8058:18;8045:32;8120:5;8113:13;8106:21;8099:5;8096:32;8086:60;;8142:1;8139;8132:12;8086:60;8165:5;8155:15;;;7829:347;;;;;:::o;8181:276::-;8239:6;8292:2;8280:9;8271:7;8267:23;8263:32;8260:52;;;8308:1;8305;8298:12;8260:52;8347:9;8334:23;8397:10;8390:5;8386:22;8379:5;8376:33;8366:61;;8423:1;8420;8413:12;8462:260;8530:6;8538;8591:2;8579:9;8570:7;8566:23;8562:32;8559:52;;;8607:1;8604;8597:12;8559:52;8630:29;8649:9;8630:29;:::i;:::-;8620:39;;8678:38;8712:2;8701:9;8697:18;8678:38;:::i;:::-;8668:48;;8462:260;;;;;:::o;8727:606::-;8831:6;8839;8847;8855;8863;8916:3;8904:9;8895:7;8891:23;8887:33;8884:53;;;8933:1;8930;8923:12;8884:53;8956:29;8975:9;8956:29;:::i;:::-;8946:39;;9004:38;9038:2;9027:9;9023:18;9004:38;:::i;:::-;8994:48;;9089:2;9078:9;9074:18;9061:32;9051:42;;9140:2;9129:9;9125:18;9112:32;9102:42;;9195:3;9184:9;9180:19;9167:33;9223:18;9215:6;9212:30;9209:50;;;9255:1;9252;9245:12;9209:50;9278:49;9319:7;9310:6;9299:9;9295:22;9278:49;:::i;9338:186::-;9397:6;9450:2;9438:9;9429:7;9425:23;9421:32;9418:52;;;9466:1;9463;9456:12;9418:52;9489:29;9508:9;9489:29;:::i;9941:356::-;10143:2;10125:21;;;10162:18;;;10155:30;10221:34;10216:2;10201:18;;10194:62;10288:2;10273:18;;9941:356::o;10302:380::-;10381:1;10377:12;;;;10424;;;10445:61;;10499:4;10491:6;10487:17;10477:27;;10445:61;10552:2;10544:6;10541:14;10521:18;10518:38;10515:161;;;10598:10;10593:3;10589:20;10586:1;10579:31;10633:4;10630:1;10623:15;10661:4;10658:1;10651:15;10515:161;;10302:380;;;:::o;11106:127::-;11167:10;11162:3;11158:20;11155:1;11148:31;11198:4;11195:1;11188:15;11222:4;11219:1;11212:15;11238:168;11278:7;11344:1;11340;11336:6;11332:14;11329:1;11326:21;11321:1;11314:9;11307:17;11303:45;11300:71;;;11351:18;;:::i;:::-;-1:-1:-1;11391:9:1;;11238:168::o;11411:217::-;11451:1;11477;11467:132;;11521:10;11516:3;11512:20;11509:1;11502:31;11556:4;11553:1;11546:15;11584:4;11581:1;11574:15;11467:132;-1:-1:-1;11613:9:1;;11411:217::o;12043:127::-;12104:10;12099:3;12095:20;12092:1;12085:31;12135:4;12132:1;12125:15;12159:4;12156:1;12149:15;12175:135;12214:3;-1:-1:-1;;12235:17:1;;12232:43;;;12255:18;;:::i;:::-;-1:-1:-1;12302:1:1;12291:13;;12175:135::o;13831:228::-;13870:3;13898:10;13935:2;13932:1;13928:10;13965:2;13962:1;13958:10;13996:3;13992:2;13988:12;13983:3;13980:21;13977:47;;;14004:18;;:::i;:::-;14040:13;;13831:228;-1:-1:-1;;;;13831:228:1:o;15575:404::-;15777:2;15759:21;;;15816:2;15796:18;;;15789:30;15855:34;15850:2;15835:18;;15828:62;-1:-1:-1;;;15921:2:1;15906:18;;15899:38;15969:3;15954:19;;15575:404::o;15984:401::-;16186:2;16168:21;;;16225:2;16205:18;;;16198:30;16264:34;16259:2;16244:18;;16237:62;-1:-1:-1;;;16330:2:1;16315:18;;16308:35;16375:3;16360:19;;15984:401::o;16390:406::-;16592:2;16574:21;;;16631:2;16611:18;;;16604:30;16670:34;16665:2;16650:18;;16643:62;-1:-1:-1;;;16736:2:1;16721:18;;16714:40;16786:3;16771:19;;16390:406::o;16801:128::-;16841:3;16872:1;16868:6;16865:1;16862:13;16859:39;;;16878:18;;:::i;:::-;-1:-1:-1;16914:9:1;;16801:128::o;16934:465::-;17191:2;17180:9;17173:21;17154:4;17217:56;17269:2;17258:9;17254:18;17246:6;17217:56;:::i;:::-;17321:9;17313:6;17309:22;17304:2;17293:9;17289:18;17282:50;17349:44;17386:6;17378;17349:44;:::i;:::-;17341:52;16934:465;-1:-1:-1;;;;;16934:465:1:o;17404:201::-;17442:3;17470:10;17515:2;17508:5;17504:14;17542:2;17533:7;17530:15;17527:41;;;17548:18;;:::i;:::-;17597:1;17584:15;;17404:201;-1:-1:-1;;;17404:201:1:o;17863:827::-;-1:-1:-1;;;;;18260:15:1;;;18242:34;;18312:15;;18307:2;18292:18;;18285:43;18222:3;18359:2;18344:18;;18337:31;;;18185:4;;18391:57;;18428:19;;18420:6;18391:57;:::i;:::-;18496:9;18488:6;18484:22;18479:2;18468:9;18464:18;18457:50;18530:44;18567:6;18559;18530:44;:::i;:::-;18516:58;;18623:9;18615:6;18611:22;18605:3;18594:9;18590:19;18583:51;18651:33;18677:6;18669;18651:33;:::i;:::-;18643:41;17863:827;-1:-1:-1;;;;;;;;17863:827:1:o;18695:249::-;18764:6;18817:2;18805:9;18796:7;18792:23;18788:32;18785:52;;;18833:1;18830;18823:12;18785:52;18865:9;18859:16;18884:30;18908:5;18884:30;:::i;18949:179::-;18984:3;19026:1;19008:16;19005:23;19002:120;;;19072:1;19069;19066;19051:23;-1:-1:-1;19109:1:1;19103:8;19098:3;19094:18;19002:120;18949:179;:::o;19133:671::-;19172:3;19214:4;19196:16;19193:26;19190:39;;;19133:671;:::o;19190:39::-;19256:2;19250:9;-1:-1:-1;;19321:16:1;19317:25;;19314:1;19250:9;19293:50;19372:4;19366:11;19396:16;19431:18;19502:2;19495:4;19487:6;19483:17;19480:25;19475:2;19467:6;19464:14;19461:45;19458:58;;;19509:5;;;;;19133:671;:::o;19458:58::-;19546:6;19540:4;19536:17;19525:28;;19582:3;19576:10;19609:2;19601:6;19598:14;19595:27;;;19615:5;;;;;;19133:671;:::o;19595:27::-;19699:2;19680:16;19674:4;19670:27;19666:36;19659:4;19650:6;19645:3;19641:16;19637:27;19634:69;19631:82;;;19706:5;;;;;;19133:671;:::o;19631:82::-;19722:57;19773:4;19764:6;19756;19752:19;19748:30;19742:4;19722:57;:::i;:::-;-1:-1:-1;19795:3:1;;19133:671;-1:-1:-1;;;;;19133:671:1:o;20230:404::-;20432:2;20414:21;;;20471:2;20451:18;;;20444:30;20510:34;20505:2;20490:18;;20483:62;-1:-1:-1;;;20576:2:1;20561:18;;20554:38;20624:3;20609:19;;20230:404::o;20639:397::-;20841:2;20823:21;;;20880:2;20860:18;;;20853:30;20919:34;20914:2;20899:18;;20892:62;-1:-1:-1;;;20985:2:1;20970:18;;20963:31;21026:3;21011:19;;20639:397::o;21041:561::-;-1:-1:-1;;;;;21338:15:1;;;21320:34;;21390:15;;21385:2;21370:18;;21363:43;21437:2;21422:18;;21415:34;;;21480:2;21465:18;;21458:34;;;21300:3;21523;21508:19;;21501:32;;;21263:4;;21550:46;;21576:19;;21568:6;21550:46;:::i;:::-;21542:54;21041:561;-1:-1:-1;;;;;;;21041:561:1:o

Swarm Source

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