ETH Price: $3,506.64 (+0.75%)
Gas: 7 Gwei

Token

The NFT Pixel Project: Wonder Women (NFTWW)
 

Overview

Max Total Supply

2,222 NFTWW

Holders

191

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
sepimnft.eth
Balance
1 NFTWW
0xa697e7d803997f026b4d67abeabf548ac6849100
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:
NftPixel

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-19
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;
pragma experimental ABIEncoderV2;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @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);
}

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

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

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

/**
 * @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);
    }
}

contract NftPixel is ERC721, Ownable {
    using Counters for Counters.Counter;
    using Strings for uint256;

    string baseURI;

    Counters.Counter private _nextTokenId;

    uint256 constant nftPrice = 0.122 ether;
    uint256 constant maxAmountPerMint = 10;
    uint256 constant maxAmount = 2222;
    address public walletAddress;

    constructor() ERC721("The NFT Pixel Project: Wonder Women", "NFTWW") {
        baseURI = "https://gateway.pinata.cloud/ipfs/QmR8DJ8TunAJqSbcWsQkej4VXJWoeQAnDgmkDvXGL9oofw/";
        _nextTokenId.increment();
    }

    /**
     * @notice Require that the token has not been burned and has been minted
     */
    modifier onlyExistingToken(uint256 tokenId) {
        require(_exists(tokenId), "nonexistent token");
        _;
    }

    /**
     * @notice Ensure that the provided spender is the approved or the owner of
     * the media for the specified tokenId
     */
    modifier onlyApprovedOrOwner(address spender, uint256 tokenId) {
        require(_isApprovedOrOwner(spender, tokenId), "Only approved or owner");
        _;
    }

    function baseTokenURI() public view returns (string memory) {
        return _baseURI();
    }

    function setBaseTokenURI(string memory _baseTokenURI) external onlyOwner {
        baseURI = _baseTokenURI;
    }

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

    /**
     * @dev Returns an URI for a given token ID
     */
    function tokenURI(uint256 _tokenId)
        public
        view
        override
        onlyExistingToken(_tokenId)
        returns (string memory)
    {
        return string(abi.encodePacked(baseURI, _tokenId.toString(), ".JSON"));
    }

    function setWalletAddress(address _walletAddress) external onlyOwner {
        require(_walletAddress != address(0), "Invalid address");
        walletAddress = _walletAddress;
    }

    function mintToken(address user, uint256 amount) external payable {
        require((user == _msgSender() || _msgSender() == owner()));
        require(
            amount <= maxAmountPerMint && amount > 0,
            "Invalid token amount"
        );
        require(msg.value == amount * nftPrice, "Invalid price");
        require(totalSupply() + amount <= maxAmount, "Not enough nfts left");

        for (uint256 i = 0; i < amount; i++) {
            uint256 id = totalSupply() + 1;
            _safeMint(user, id);
            _nextTokenId.increment();
        }
        require(
            payable(walletAddress).send(msg.value),
            "Failed to send eth to wallet address"
        );
    }

    function totalSupply() public view returns (uint256) {
        return _nextTokenId.current() - 1;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"payable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"setWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405180606001604052806023815260200162001f5060239139604051806040016040528060058152602001644e4654575760d81b81525081600090805190602001906200006292919062000142565b5080516200007890600190602084019062000142565b505050620000956200008f620000e360201b60201c565b620000e7565b60405180608001604052806051815260200162001f73605191398051620000c59160079160209091019062000142565b50620000dd60086200013960201b62000b5b1760201c565b62000225565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80546001019055565b8280546200015090620001e8565b90600052602060002090601f016020900481019282620001745760008555620001bf565b82601f106200018f57805160ff1916838001178555620001bf565b82800160010185558215620001bf579182015b82811115620001bf578251825591602001919060010190620001a2565b50620001cd929150620001d1565b5090565b5b80821115620001cd5760008155600101620001d2565b600281046001821680620001fd57607f821691505b602082108114156200021f57634e487b7160e01b600052602260045260246000fd5b50919050565b611d1b80620002356000396000f3fe6080604052600436106101355760003560e01c8063715018a6116100ab578063ac1a386a1161006f578063ac1a386a1461032a578063b88d4fde1461034a578063c87b56dd1461036a578063d547cfb71461038a578063e985e9c51461039f578063f2fde38b146103bf57610135565b8063715018a6146102b857806379c65068146102cd5780638da5cb5b146102e057806395d89b41146102f5578063a22cb4651461030a57610135565b806323b872dd116100fd57806323b872dd1461020357806330176e131461022357806342842e0e146102435780636352211e146102635780636ad5b3ea1461028357806370a082311461029857610135565b806301ffc9a71461013a57806306fdde0314610170578063081812fc14610192578063095ea7b3146101bf57806318160ddd146101e1575b600080fd5b34801561014657600080fd5b5061015a610155366004611448565b6103df565b6040516101679190611636565b60405180910390f35b34801561017c57600080fd5b50610185610427565b6040516101679190611641565b34801561019e57600080fd5b506101b26101ad3660046114c6565b6104b9565b60405161016791906115e5565b3480156101cb57600080fd5b506101df6101da36600461141f565b610505565b005b3480156101ed57600080fd5b506101f661059d565b6040516101679190611b86565b34801561020f57600080fd5b506101df61021e366004611331565b6105ba565b34801561022f57600080fd5b506101df61023e366004611480565b6105f2565b34801561024f57600080fd5b506101df61025e366004611331565b610648565b34801561026f57600080fd5b506101b261027e3660046114c6565b610663565b34801561028f57600080fd5b506101b2610698565b3480156102a457600080fd5b506101f66102b33660046112de565b6106a7565b3480156102c457600080fd5b506101df6106eb565b6101df6102db36600461141f565b610736565b3480156102ec57600080fd5b506101b26108a4565b34801561030157600080fd5b506101856108b3565b34801561031657600080fd5b506101df6103253660046113e5565b6108c2565b34801561033657600080fd5b506101df6103453660046112de565b610990565b34801561035657600080fd5b506101df61036536600461136c565b610a17565b34801561037657600080fd5b506101856103853660046114c6565b610a56565b34801561039657600080fd5b50610185610ab2565b3480156103ab57600080fd5b5061015a6103ba3660046112ff565b610abc565b3480156103cb57600080fd5b506101df6103da3660046112de565b610aea565b60006001600160e01b031982166380ac58cd60e01b148061041057506001600160e01b03198216635b5e139f60e01b145b8061041f575061041f82610b64565b90505b919050565b60606000805461043690611c29565b80601f016020809104026020016040519081016040528092919081815260200182805461046290611c29565b80156104af5780601f10610484576101008083540402835291602001916104af565b820191906000526020600020905b81548152906001019060200180831161049257829003601f168201915b5050505050905090565b60006104c482610b7d565b6104e95760405162461bcd60e51b81526004016104e0906119d8565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061051082610663565b9050806001600160a01b0316836001600160a01b031614156105445760405162461bcd60e51b81526004016104e090611acd565b806001600160a01b0316610556610b9a565b6001600160a01b031614806105725750610572816103ba610b9a565b61058e5760405162461bcd60e51b81526004016104e0906118b3565b6105988383610b9e565b505050565b600060016105ab6008610c0c565b6105b59190611be6565b905090565b6105cb6105c5610b9a565b82610c10565b6105e75760405162461bcd60e51b81526004016104e090611b0e565b610598838383610c95565b6105fa610b9a565b6001600160a01b031661060b6108a4565b6001600160a01b0316146106315760405162461bcd60e51b81526004016104e090611a4f565b80516106449060079060208401906111be565b5050565b61059883838360405180602001604052806000815250610a17565b6000818152600260205260408120546001600160a01b03168061041f5760405162461bcd60e51b81526004016104e09061195a565b6009546001600160a01b031681565b60006001600160a01b0382166106cf5760405162461bcd60e51b81526004016104e090611910565b506001600160a01b031660009081526003602052604090205490565b6106f3610b9a565b6001600160a01b03166107046108a4565b6001600160a01b03161461072a5760405162461bcd60e51b81526004016104e090611a4f565b6107346000610dc2565b565b61073e610b9a565b6001600160a01b0316826001600160a01b0316148061077c57506107606108a4565b6001600160a01b0316610771610b9a565b6001600160a01b0316145b61078557600080fd5b600a81111580156107965750600081115b6107b25760405162461bcd60e51b81526004016104e0906117c7565b6107c46701b16e5a8699000082611bc7565b34146107e25760405162461bcd60e51b81526004016104e090611b5f565b6108ae816107ee61059d565b6107f89190611b9b565b11156108165760405162461bcd60e51b81526004016104e0906117f5565b60005b8181101561085f57600061082b61059d565b610836906001611b9b565b90506108428482610e14565b61084c6008610b5b565b508061085781611c5e565b915050610819565b506009546040516001600160a01b03909116903480156108fc02916000818181858888f193505050506106445760405162461bcd60e51b81526004016104e09061186f565b6006546001600160a01b031690565b60606001805461043690611c29565b6108ca610b9a565b6001600160a01b0316826001600160a01b031614156108fb5760405162461bcd60e51b81526004016104e090611790565b8060056000610908610b9a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561094c610b9a565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516109849190611636565b60405180910390a35050565b610998610b9a565b6001600160a01b03166109a96108a4565b6001600160a01b0316146109cf5760405162461bcd60e51b81526004016104e090611a4f565b6001600160a01b0381166109f55760405162461bcd60e51b81526004016104e090611654565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b610a28610a22610b9a565b83610c10565b610a445760405162461bcd60e51b81526004016104e090611b0e565b610a5084848484610e2e565b50505050565b606081610a6281610b7d565b610a7e5760405162461bcd60e51b81526004016104e090611a24565b6007610a8984610e61565b604051602001610a9a929190611537565b60405160208183030381529060405291505b50919050565b60606105b5610f7c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610af2610b9a565b6001600160a01b0316610b036108a4565b6001600160a01b031614610b295760405162461bcd60e51b81526004016104e090611a4f565b6001600160a01b038116610b4f5760405162461bcd60e51b81526004016104e0906116cf565b610b5881610dc2565b50565b80546001019055565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610bd382610663565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5490565b6000610c1b82610b7d565b610c375760405162461bcd60e51b81526004016104e090611823565b6000610c4283610663565b9050806001600160a01b0316846001600160a01b03161480610c7d5750836001600160a01b0316610c72846104b9565b6001600160a01b0316145b80610c8d5750610c8d8185610abc565b949350505050565b826001600160a01b0316610ca882610663565b6001600160a01b031614610cce5760405162461bcd60e51b81526004016104e090611a84565b6001600160a01b038216610cf45760405162461bcd60e51b81526004016104e09061174c565b610cff838383610598565b610d0a600082610b9e565b6001600160a01b0383166000908152600360205260408120805460019290610d33908490611be6565b90915550506001600160a01b0382166000908152600360205260408120805460019290610d61908490611b9b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610644828260405180602001604052806000815250610f8b565b610e39848484610c95565b610e4584848484610fbe565b610a505760405162461bcd60e51b81526004016104e09061167d565b606081610e8657506040805180820190915260018152600360fc1b6020820152610422565b8160005b8115610eb05780610e9a81611c5e565b9150610ea99050600a83611bb3565b9150610e8a565b60008167ffffffffffffffff811115610ed957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610f03576020820181803683370190505b5090505b8415610c8d57610f18600183611be6565b9150610f25600a86611c79565b610f30906030611b9b565b60f81b818381518110610f5357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350610f75600a86611bb3565b9450610f07565b60606007805461043690611c29565b610f9583836110d9565b610fa26000848484610fbe565b6105985760405162461bcd60e51b81526004016104e09061167d565b6000610fd2846001600160a01b03166111b8565b156110ce57836001600160a01b031663150b7a02610fee610b9a565b8786866040518563ffffffff1660e01b815260040161101094939291906115f9565b602060405180830381600087803b15801561102a57600080fd5b505af192505050801561105a575060408051601f3d908101601f1916820190925261105791810190611464565b60015b6110b4573d808015611088576040519150601f19603f3d011682016040523d82523d6000602084013e61108d565b606091505b5080516110ac5760405162461bcd60e51b81526004016104e09061167d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610c8d565b506001949350505050565b6001600160a01b0382166110ff5760405162461bcd60e51b81526004016104e0906119a3565b61110881610b7d565b156111255760405162461bcd60e51b81526004016104e090611715565b61113160008383610598565b6001600160a01b038216600090815260036020526040812080546001929061115a908490611b9b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b8280546111ca90611c29565b90600052602060002090601f0160209004810192826111ec5760008555611232565b82601f1061120557805160ff1916838001178555611232565b82800160010185558215611232579182015b82811115611232578251825591602001919060010190611217565b5061123e929150611242565b5090565b5b8082111561123e5760008155600101611243565b600067ffffffffffffffff8084111561127257611272611cb9565b604051601f8501601f19168101602001828111828210171561129657611296611cb9565b6040528481529150818385018610156112ae57600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461042257600080fd5b6000602082840312156112ef578081fd5b6112f8826112c7565b9392505050565b60008060408385031215611311578081fd5b61131a836112c7565b9150611328602084016112c7565b90509250929050565b600080600060608486031215611345578081fd5b61134e846112c7565b925061135c602085016112c7565b9150604084013590509250925092565b60008060008060808587031215611381578081fd5b61138a856112c7565b9350611398602086016112c7565b925060408501359150606085013567ffffffffffffffff8111156113ba578182fd5b8501601f810187136113ca578182fd5b6113d987823560208401611257565b91505092959194509250565b600080604083850312156113f7578182fd5b611400836112c7565b915060208301358015158114611414578182fd5b809150509250929050565b60008060408385031215611431578182fd5b61143a836112c7565b946020939093013593505050565b600060208284031215611459578081fd5b81356112f881611ccf565b600060208284031215611475578081fd5b81516112f881611ccf565b600060208284031215611491578081fd5b813567ffffffffffffffff8111156114a7578182fd5b8201601f810184136114b7578182fd5b610c8d84823560208401611257565b6000602082840312156114d7578081fd5b5035919050565b600081518084526114f6816020860160208601611bfd565b601f01601f19169290920160200192915050565b6000815161151c818560208601611bfd565b9290920192915050565b64172529a7a760d91b815260050190565b825460009081906002810460018083168061155357607f831692505b602080841082141561157357634e487b7160e01b87526022600452602487fd5b8180156115875760018114611598576115c4565b60ff198616895284890196506115c4565b6115a18b611b8f565b885b868110156115bc5781548b8201529085019083016115a3565b505084890196505b5050505050506115dc6115d7828661150a565b611526565b95945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061162c908301846114de565b9695505050505050565b901515815260200190565b6000602082526112f860208301846114de565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b602080825260149082015273125b9d985b1a59081d1bdad95b88185b5bdd5b9d60621b604082015260600190565b602080825260149082015273139bdd08195b9bdd59da081b999d1cc81b19599d60621b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526024908201527f4661696c656420746f2073656e642065746820746f2077616c6c6574206164646040820152637265737360e01b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601190820152703737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252600d908201526c496e76616c696420707269636560981b604082015260600190565b90815260200190565b60009081526020902090565b60008219821115611bae57611bae611c8d565b500190565b600082611bc257611bc2611ca3565b500490565b6000816000190483118215151615611be157611be1611c8d565b500290565b600082821015611bf857611bf8611c8d565b500390565b60005b83811015611c18578181015183820152602001611c00565b83811115610a505750506000910152565b600281046001821680611c3d57607f821691505b60208210811415610aac57634e487b7160e01b600052602260045260246000fd5b6000600019821415611c7257611c72611c8d565b5060010190565b600082611c8857611c88611ca3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b5857600080fdfea2646970667358221220e99fc809504799422906f2c4cd11eacdd9589d47eceae617ce168d2ed8e3742f64736f6c63430008000033546865204e465420506978656c2050726f6a6563743a20576f6e64657220576f6d656e68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5238444a3854756e414a715362635773516b656a3456584a576f6551416e44676d6b447658474c396f6f66772f

Deployed Bytecode

0x6080604052600436106101355760003560e01c8063715018a6116100ab578063ac1a386a1161006f578063ac1a386a1461032a578063b88d4fde1461034a578063c87b56dd1461036a578063d547cfb71461038a578063e985e9c51461039f578063f2fde38b146103bf57610135565b8063715018a6146102b857806379c65068146102cd5780638da5cb5b146102e057806395d89b41146102f5578063a22cb4651461030a57610135565b806323b872dd116100fd57806323b872dd1461020357806330176e131461022357806342842e0e146102435780636352211e146102635780636ad5b3ea1461028357806370a082311461029857610135565b806301ffc9a71461013a57806306fdde0314610170578063081812fc14610192578063095ea7b3146101bf57806318160ddd146101e1575b600080fd5b34801561014657600080fd5b5061015a610155366004611448565b6103df565b6040516101679190611636565b60405180910390f35b34801561017c57600080fd5b50610185610427565b6040516101679190611641565b34801561019e57600080fd5b506101b26101ad3660046114c6565b6104b9565b60405161016791906115e5565b3480156101cb57600080fd5b506101df6101da36600461141f565b610505565b005b3480156101ed57600080fd5b506101f661059d565b6040516101679190611b86565b34801561020f57600080fd5b506101df61021e366004611331565b6105ba565b34801561022f57600080fd5b506101df61023e366004611480565b6105f2565b34801561024f57600080fd5b506101df61025e366004611331565b610648565b34801561026f57600080fd5b506101b261027e3660046114c6565b610663565b34801561028f57600080fd5b506101b2610698565b3480156102a457600080fd5b506101f66102b33660046112de565b6106a7565b3480156102c457600080fd5b506101df6106eb565b6101df6102db36600461141f565b610736565b3480156102ec57600080fd5b506101b26108a4565b34801561030157600080fd5b506101856108b3565b34801561031657600080fd5b506101df6103253660046113e5565b6108c2565b34801561033657600080fd5b506101df6103453660046112de565b610990565b34801561035657600080fd5b506101df61036536600461136c565b610a17565b34801561037657600080fd5b506101856103853660046114c6565b610a56565b34801561039657600080fd5b50610185610ab2565b3480156103ab57600080fd5b5061015a6103ba3660046112ff565b610abc565b3480156103cb57600080fd5b506101df6103da3660046112de565b610aea565b60006001600160e01b031982166380ac58cd60e01b148061041057506001600160e01b03198216635b5e139f60e01b145b8061041f575061041f82610b64565b90505b919050565b60606000805461043690611c29565b80601f016020809104026020016040519081016040528092919081815260200182805461046290611c29565b80156104af5780601f10610484576101008083540402835291602001916104af565b820191906000526020600020905b81548152906001019060200180831161049257829003601f168201915b5050505050905090565b60006104c482610b7d565b6104e95760405162461bcd60e51b81526004016104e0906119d8565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061051082610663565b9050806001600160a01b0316836001600160a01b031614156105445760405162461bcd60e51b81526004016104e090611acd565b806001600160a01b0316610556610b9a565b6001600160a01b031614806105725750610572816103ba610b9a565b61058e5760405162461bcd60e51b81526004016104e0906118b3565b6105988383610b9e565b505050565b600060016105ab6008610c0c565b6105b59190611be6565b905090565b6105cb6105c5610b9a565b82610c10565b6105e75760405162461bcd60e51b81526004016104e090611b0e565b610598838383610c95565b6105fa610b9a565b6001600160a01b031661060b6108a4565b6001600160a01b0316146106315760405162461bcd60e51b81526004016104e090611a4f565b80516106449060079060208401906111be565b5050565b61059883838360405180602001604052806000815250610a17565b6000818152600260205260408120546001600160a01b03168061041f5760405162461bcd60e51b81526004016104e09061195a565b6009546001600160a01b031681565b60006001600160a01b0382166106cf5760405162461bcd60e51b81526004016104e090611910565b506001600160a01b031660009081526003602052604090205490565b6106f3610b9a565b6001600160a01b03166107046108a4565b6001600160a01b03161461072a5760405162461bcd60e51b81526004016104e090611a4f565b6107346000610dc2565b565b61073e610b9a565b6001600160a01b0316826001600160a01b0316148061077c57506107606108a4565b6001600160a01b0316610771610b9a565b6001600160a01b0316145b61078557600080fd5b600a81111580156107965750600081115b6107b25760405162461bcd60e51b81526004016104e0906117c7565b6107c46701b16e5a8699000082611bc7565b34146107e25760405162461bcd60e51b81526004016104e090611b5f565b6108ae816107ee61059d565b6107f89190611b9b565b11156108165760405162461bcd60e51b81526004016104e0906117f5565b60005b8181101561085f57600061082b61059d565b610836906001611b9b565b90506108428482610e14565b61084c6008610b5b565b508061085781611c5e565b915050610819565b506009546040516001600160a01b03909116903480156108fc02916000818181858888f193505050506106445760405162461bcd60e51b81526004016104e09061186f565b6006546001600160a01b031690565b60606001805461043690611c29565b6108ca610b9a565b6001600160a01b0316826001600160a01b031614156108fb5760405162461bcd60e51b81526004016104e090611790565b8060056000610908610b9a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561094c610b9a565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516109849190611636565b60405180910390a35050565b610998610b9a565b6001600160a01b03166109a96108a4565b6001600160a01b0316146109cf5760405162461bcd60e51b81526004016104e090611a4f565b6001600160a01b0381166109f55760405162461bcd60e51b81526004016104e090611654565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b610a28610a22610b9a565b83610c10565b610a445760405162461bcd60e51b81526004016104e090611b0e565b610a5084848484610e2e565b50505050565b606081610a6281610b7d565b610a7e5760405162461bcd60e51b81526004016104e090611a24565b6007610a8984610e61565b604051602001610a9a929190611537565b60405160208183030381529060405291505b50919050565b60606105b5610f7c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610af2610b9a565b6001600160a01b0316610b036108a4565b6001600160a01b031614610b295760405162461bcd60e51b81526004016104e090611a4f565b6001600160a01b038116610b4f5760405162461bcd60e51b81526004016104e0906116cf565b610b5881610dc2565b50565b80546001019055565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610bd382610663565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5490565b6000610c1b82610b7d565b610c375760405162461bcd60e51b81526004016104e090611823565b6000610c4283610663565b9050806001600160a01b0316846001600160a01b03161480610c7d5750836001600160a01b0316610c72846104b9565b6001600160a01b0316145b80610c8d5750610c8d8185610abc565b949350505050565b826001600160a01b0316610ca882610663565b6001600160a01b031614610cce5760405162461bcd60e51b81526004016104e090611a84565b6001600160a01b038216610cf45760405162461bcd60e51b81526004016104e09061174c565b610cff838383610598565b610d0a600082610b9e565b6001600160a01b0383166000908152600360205260408120805460019290610d33908490611be6565b90915550506001600160a01b0382166000908152600360205260408120805460019290610d61908490611b9b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610644828260405180602001604052806000815250610f8b565b610e39848484610c95565b610e4584848484610fbe565b610a505760405162461bcd60e51b81526004016104e09061167d565b606081610e8657506040805180820190915260018152600360fc1b6020820152610422565b8160005b8115610eb05780610e9a81611c5e565b9150610ea99050600a83611bb3565b9150610e8a565b60008167ffffffffffffffff811115610ed957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610f03576020820181803683370190505b5090505b8415610c8d57610f18600183611be6565b9150610f25600a86611c79565b610f30906030611b9b565b60f81b818381518110610f5357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350610f75600a86611bb3565b9450610f07565b60606007805461043690611c29565b610f9583836110d9565b610fa26000848484610fbe565b6105985760405162461bcd60e51b81526004016104e09061167d565b6000610fd2846001600160a01b03166111b8565b156110ce57836001600160a01b031663150b7a02610fee610b9a565b8786866040518563ffffffff1660e01b815260040161101094939291906115f9565b602060405180830381600087803b15801561102a57600080fd5b505af192505050801561105a575060408051601f3d908101601f1916820190925261105791810190611464565b60015b6110b4573d808015611088576040519150601f19603f3d011682016040523d82523d6000602084013e61108d565b606091505b5080516110ac5760405162461bcd60e51b81526004016104e09061167d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610c8d565b506001949350505050565b6001600160a01b0382166110ff5760405162461bcd60e51b81526004016104e0906119a3565b61110881610b7d565b156111255760405162461bcd60e51b81526004016104e090611715565b61113160008383610598565b6001600160a01b038216600090815260036020526040812080546001929061115a908490611b9b565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b8280546111ca90611c29565b90600052602060002090601f0160209004810192826111ec5760008555611232565b82601f1061120557805160ff1916838001178555611232565b82800160010185558215611232579182015b82811115611232578251825591602001919060010190611217565b5061123e929150611242565b5090565b5b8082111561123e5760008155600101611243565b600067ffffffffffffffff8084111561127257611272611cb9565b604051601f8501601f19168101602001828111828210171561129657611296611cb9565b6040528481529150818385018610156112ae57600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461042257600080fd5b6000602082840312156112ef578081fd5b6112f8826112c7565b9392505050565b60008060408385031215611311578081fd5b61131a836112c7565b9150611328602084016112c7565b90509250929050565b600080600060608486031215611345578081fd5b61134e846112c7565b925061135c602085016112c7565b9150604084013590509250925092565b60008060008060808587031215611381578081fd5b61138a856112c7565b9350611398602086016112c7565b925060408501359150606085013567ffffffffffffffff8111156113ba578182fd5b8501601f810187136113ca578182fd5b6113d987823560208401611257565b91505092959194509250565b600080604083850312156113f7578182fd5b611400836112c7565b915060208301358015158114611414578182fd5b809150509250929050565b60008060408385031215611431578182fd5b61143a836112c7565b946020939093013593505050565b600060208284031215611459578081fd5b81356112f881611ccf565b600060208284031215611475578081fd5b81516112f881611ccf565b600060208284031215611491578081fd5b813567ffffffffffffffff8111156114a7578182fd5b8201601f810184136114b7578182fd5b610c8d84823560208401611257565b6000602082840312156114d7578081fd5b5035919050565b600081518084526114f6816020860160208601611bfd565b601f01601f19169290920160200192915050565b6000815161151c818560208601611bfd565b9290920192915050565b64172529a7a760d91b815260050190565b825460009081906002810460018083168061155357607f831692505b602080841082141561157357634e487b7160e01b87526022600452602487fd5b8180156115875760018114611598576115c4565b60ff198616895284890196506115c4565b6115a18b611b8f565b885b868110156115bc5781548b8201529085019083016115a3565b505084890196505b5050505050506115dc6115d7828661150a565b611526565b95945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061162c908301846114de565b9695505050505050565b901515815260200190565b6000602082526112f860208301846114de565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b602080825260149082015273125b9d985b1a59081d1bdad95b88185b5bdd5b9d60621b604082015260600190565b602080825260149082015273139bdd08195b9bdd59da081b999d1cc81b19599d60621b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526024908201527f4661696c656420746f2073656e642065746820746f2077616c6c6574206164646040820152637265737360e01b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601190820152703737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252600d908201526c496e76616c696420707269636560981b604082015260600190565b90815260200190565b60009081526020902090565b60008219821115611bae57611bae611c8d565b500190565b600082611bc257611bc2611ca3565b500490565b6000816000190483118215151615611be157611be1611c8d565b500290565b600082821015611bf857611bf8611c8d565b500390565b60005b83811015611c18578181015183820152602001611c00565b83811115610a505750506000910152565b600281046001821680611c3d57607f821691505b60208210811415610aac57634e487b7160e01b600052602260045260246000fd5b6000600019821415611c7257611c72611c8d565b5060010190565b600082611c8857611c88611ca3565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b5857600080fdfea2646970667358221220e99fc809504799422906f2c4cd11eacdd9589d47eceae617ce168d2ed8e3742f64736f6c63430008000033

Deployed Bytecode Sourcemap

37240:2814:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21905:355;;;;;;;;;;-1:-1:-1;21905:355:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23074:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24767:308::-;;;;;;;;;;-1:-1:-1;24767:308:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24290:411::-;;;;;;;;;;-1:-1:-1;24290:411:0;;;;;:::i;:::-;;:::i;:::-;;39946:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25826:376::-;;;;;;;;;;-1:-1:-1;25826:376:0;;;;;:::i;:::-;;:::i;38467:115::-;;;;;;;;;;-1:-1:-1;38467:115:0;;;;;:::i;:::-;;:::i;26273:185::-;;;;;;;;;;-1:-1:-1;26273:185:0;;;;;:::i;:::-;;:::i;22681:326::-;;;;;;;;;;-1:-1:-1;22681:326:0;;;;;:::i;:::-;;:::i;37560:28::-;;;;;;;;;;;;;:::i;22324:295::-;;;;;;;;;;-1:-1:-1;22324:295:0;;;;;:::i;:::-;;:::i;36574:94::-;;;;;;;;;;;;;:::i;39214:724::-;;;;;;:::i;:::-;;:::i;35923:87::-;;;;;;;;;;;;;:::i;23243:104::-;;;;;;;;;;;;;:::i;25147:327::-;;;;;;;;;;-1:-1:-1;25147:327:0;;;;;:::i;:::-;;:::i;39021:185::-;;;;;;;;;;-1:-1:-1;39021:185:0;;;;;:::i;:::-;;:::i;26529:365::-;;;;;;;;;;-1:-1:-1;26529:365:0;;;;;:::i;:::-;;:::i;38765:248::-;;;;;;;;;;-1:-1:-1;38765:248:0;;;;;:::i;:::-;;:::i;38363:96::-;;;;;;;;;;;;;:::i;25545:214::-;;;;;;;;;;-1:-1:-1;25545:214:0;;;;;:::i;:::-;;:::i;36823:229::-;;;;;;;;;;-1:-1:-1;36823:229:0;;;;;:::i;:::-;;:::i;21905:355::-;22052:4;-1:-1:-1;;;;;;22094:40:0;;-1:-1:-1;;;22094:40:0;;:105;;-1:-1:-1;;;;;;;22151:48:0;;-1:-1:-1;;;22151:48:0;22094:105;:158;;;;22216:36;22240:11;22216:23;:36::i;:::-;22074:178;;21905:355;;;;:::o;23074:100::-;23128:13;23161:5;23154:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23074:100;:::o;24767:308::-;24888:7;24935:16;24943:7;24935;:16::i;:::-;24913:110;;;;-1:-1:-1;;;24913:110:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;25043:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25043:24:0;;24767:308::o;24290:411::-;24371:13;24387:23;24402:7;24387:14;:23::i;:::-;24371:39;;24435:5;-1:-1:-1;;;;;24429:11:0;:2;-1:-1:-1;;;;;24429:11:0;;;24421:57;;;;-1:-1:-1;;;24421:57:0;;;;;;;:::i;:::-;24529:5;-1:-1:-1;;;;;24513:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;24513:21:0;;:62;;;;24538:37;24555:5;24562:12;:10;:12::i;24538:37::-;24491:168;;;;-1:-1:-1;;;24491:168:0;;;;;;;:::i;:::-;24672:21;24681:2;24685:7;24672:8;:21::i;:::-;24290:411;;;:::o;39946:105::-;39990:7;40042:1;40017:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;40010:33;;39946:105;:::o;25826:376::-;26035:41;26054:12;:10;:12::i;:::-;26068:7;26035:18;:41::i;:::-;26013:140;;;;-1:-1:-1;;;26013:140:0;;;;;;;:::i;:::-;26166:28;26176:4;26182:2;26186:7;26166:9;:28::i;38467:115::-;36154:12;:10;:12::i;:::-;-1:-1:-1;;;;;36143:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;36143:23:0;;36135:68;;;;-1:-1:-1;;;36135:68:0;;;;;;;:::i;:::-;38551:23;;::::1;::::0;:7:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;38467:115:::0;:::o;26273:185::-;26411:39;26428:4;26434:2;26438:7;26411:39;;;;;;;;;;;;:16;:39::i;22681:326::-;22798:7;22839:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22839:16:0;22888:19;22866:110;;;;-1:-1:-1;;;22866:110:0;;;;;;;:::i;37560:28::-;;;-1:-1:-1;;;;;37560:28:0;;:::o;22324:295::-;22441:7;-1:-1:-1;;;;;22488:19:0;;22466:111;;;;-1:-1:-1;;;22466:111:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;22595:16:0;;;;;:9;:16;;;;;;;22324:295::o;36574:94::-;36154:12;:10;:12::i;:::-;-1:-1:-1;;;;;36143:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;36143:23:0;;36135:68;;;;-1:-1:-1;;;36135:68:0;;;;;;;:::i;:::-;36639:21:::1;36657:1;36639:9;:21::i;:::-;36574:94::o:0;39214:724::-;39308:12;:10;:12::i;:::-;-1:-1:-1;;;;;39300:20:0;:4;-1:-1:-1;;;;;39300:20:0;;:47;;;;39340:7;:5;:7::i;:::-;-1:-1:-1;;;;;39324:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;39324:23:0;;39300:47;39291:58;;;;;;37511:2;39382:6;:26;;:40;;;;;39421:1;39412:6;:10;39382:40;39360:110;;;;-1:-1:-1;;;39360:110:0;;;;;;;:::i;:::-;39502:17;37457:11;39502:6;:17;:::i;:::-;39489:9;:30;39481:56;;;;-1:-1:-1;;;39481:56:0;;;;;;;:::i;:::-;37549:4;39572:6;39556:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:35;;39548:68;;;;-1:-1:-1;;;39548:68:0;;;;;;;:::i;:::-;39634:9;39629:167;39653:6;39649:1;:10;39629:167;;;39681:10;39694:13;:11;:13::i;:::-;:17;;39710:1;39694:17;:::i;:::-;39681:30;;39726:19;39736:4;39742:2;39726:9;:19::i;:::-;39760:24;:12;:22;:24::i;:::-;-1:-1:-1;39661:3:0;;;;:::i;:::-;;;;39629:167;;;-1:-1:-1;39836:13:0;;39828:38;;-1:-1:-1;;;;;39836:13:0;;;;39856:9;39828:38;;;;;39836:13;39828:38;39836:13;39828:38;39856:9;39836:13;39828:38;;;;;;;39806:124;;;;-1:-1:-1;;;39806:124:0;;;;;;;:::i;35923:87::-;35996:6;;-1:-1:-1;;;;;35996:6:0;35923:87;:::o;23243:104::-;23299:13;23332:7;23325:14;;;;;:::i;25147:327::-;25294:12;:10;:12::i;:::-;-1:-1:-1;;;;;25282:24:0;:8;-1:-1:-1;;;;;25282:24:0;;;25274:62;;;;-1:-1:-1;;;25274:62:0;;;;;;;:::i;:::-;25394:8;25349:18;:32;25368:12;:10;:12::i;:::-;-1:-1:-1;;;;;25349:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;25349:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;25349:53:0;;;;;;;;;;;25433:12;:10;:12::i;:::-;-1:-1:-1;;;;;25418:48:0;;25457:8;25418:48;;;;;;:::i;:::-;;;;;;;;25147:327;;:::o;39021:185::-;36154:12;:10;:12::i;:::-;-1:-1:-1;;;;;36143:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;36143:23:0;;36135:68;;;;-1:-1:-1;;;36135:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39109:28:0;::::1;39101:56;;;;-1:-1:-1::0;;;39101:56:0::1;;;;;;;:::i;:::-;39168:13;:30:::0;;-1:-1:-1;;;;;;39168:30:0::1;-1:-1:-1::0;;;;;39168:30:0;;;::::1;::::0;;;::::1;::::0;;39021:185::o;26529:365::-;26718:41;26737:12;:10;:12::i;:::-;26751:7;26718:18;:41::i;:::-;26696:140;;;;-1:-1:-1;;;26696:140:0;;;;;;;:::i;:::-;26847:39;26861:4;26867:2;26871:7;26880:5;26847:13;:39::i;:::-;26529:365;;;;:::o;38765:248::-;38904:13;38876:8;37981:16;37989:7;37981;:16::i;:::-;37973:46;;;;-1:-1:-1;;;37973:46:0;;;;;;;:::i;:::-;38966:7:::1;38975:19;:8;:17;:19::i;:::-;38949:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38935:70;;38030:1;38765:248:::0;;;;:::o;38363:96::-;38408:13;38441:10;:8;:10::i;25545:214::-;-1:-1:-1;;;;;25716:25:0;;;25687:4;25716:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25545:214::o;36823:229::-;36154:12;:10;:12::i;:::-;-1:-1:-1;;;;;36143:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;36143:23:0;;36135:68;;;;-1:-1:-1;;;36135:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36926:22:0;::::1;36904:110;;;;-1:-1:-1::0;;;36904:110:0::1;;;;;;;:::i;:::-;37025:19;37035:8;37025:9;:19::i;:::-;36823:229:::0;:::o;950:127::-;1039:19;;1057:1;1039:19;;;950:127::o;13365:207::-;-1:-1:-1;;;;;;13524:40:0;;-1:-1:-1;;;13524:40:0;13365:207;;;:::o;28441:127::-;28506:4;28530:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28530:16:0;:30;;;28441:127::o;20464:98::-;20544:10;20464:98;:::o;32564:174::-;32639:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;32639:29:0;-1:-1:-1;;;;;32639:29:0;;;;;;;;:24;;32693:23;32639:24;32693:14;:23::i;:::-;-1:-1:-1;;;;;32684:46:0;;;;;;;;;;;32564:174;;:::o;828:114::-;920:14;;828:114::o;28735:452::-;28864:4;28908:16;28916:7;28908;:16::i;:::-;28886:110;;;;-1:-1:-1;;;28886:110:0;;;;;;;:::i;:::-;29007:13;29023:23;29038:7;29023:14;:23::i;:::-;29007:39;;29076:5;-1:-1:-1;;;;;29065:16:0;:7;-1:-1:-1;;;;;29065:16:0;;:64;;;;29122:7;-1:-1:-1;;;;;29098:31:0;:20;29110:7;29098:11;:20::i;:::-;-1:-1:-1;;;;;29098:31:0;;29065:64;:113;;;;29146:32;29163:5;29170:7;29146:16;:32::i;:::-;29057:122;28735:452;-1:-1:-1;;;;28735:452:0:o;31831:615::-;32004:4;-1:-1:-1;;;;;31977:31:0;:23;31992:7;31977:14;:23::i;:::-;-1:-1:-1;;;;;31977:31:0;;31955:122;;;;-1:-1:-1;;;31955:122:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32096:16:0;;32088:65;;;;-1:-1:-1;;;32088:65:0;;;;;;;:::i;:::-;32166:39;32187:4;32193:2;32197:7;32166:20;:39::i;:::-;32270:29;32287:1;32291:7;32270:8;:29::i;:::-;-1:-1:-1;;;;;32312:15:0;;;;;;:9;:15;;;;;:20;;32331:1;;32312:15;:20;;32331:1;;32312:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32343:13:0;;;;;;:9;:13;;;;;:18;;32360:1;;32343:13;:18;;32360:1;;32343:18;:::i;:::-;;;;-1:-1:-1;;32372:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32372:21:0;-1:-1:-1;;;;;32372:21:0;;;;;;;;;32411:27;;32372:16;;32411:27;;;;;;;31831:615;;;:::o;37060:173::-;37135:6;;;-1:-1:-1;;;;;37152:17:0;;;-1:-1:-1;;;;;;37152:17:0;;;;;;;37185:40;;37135:6;;;37152:17;37135:6;;37185:40;;37116:16;;37185:40;37060:173;;:::o;29529:110::-;29605:26;29615:2;29619:7;29605:26;;;;;;;;;;;;:9;:26::i;27776:352::-;27933:28;27943:4;27949:2;27953:7;27933:9;:28::i;:::-;27994:48;28017:4;28023:2;28027:7;28036:5;27994:22;:48::i;:::-;27972:148;;;;-1:-1:-1;;;27972:148:0;;;;;;;:::i;10126:723::-;10182:13;10403:10;10399:53;;-1:-1:-1;10430:10:0;;;;;;;;;;;;-1:-1:-1;;;10430:10:0;;;;;;10399:53;10477:5;10462:12;10518:78;10525:9;;10518:78;;10551:8;;;;:::i;:::-;;-1:-1:-1;10574:10:0;;-1:-1:-1;10582:2:0;10574:10;;:::i;:::-;;;10518:78;;;10606:19;10638:6;10628:17;;;;;;-1:-1:-1;;;10628:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10628:17:0;;10606:39;;10656:154;10663:10;;10656:154;;10690:11;10700:1;10690:11;;:::i;:::-;;-1:-1:-1;10759:10:0;10767:2;10759:5;:10;:::i;:::-;10746:24;;:2;:24;:::i;:::-;10733:39;;10716:6;10723;10716:14;;;;;;-1:-1:-1;;;10716:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;10716:56:0;;;;;;;;-1:-1:-1;10787:11:0;10796:2;10787:11;;:::i;:::-;;;10656:154;;38590:100;38642:13;38675:7;38668:14;;;;;:::i;29866:321::-;29996:18;30002:2;30006:7;29996:5;:18::i;:::-;30047:54;30078:1;30082:2;30086:7;30095:5;30047:22;:54::i;:::-;30025:154;;;;-1:-1:-1;;;30025:154:0;;;;;;;:::i;33303:980::-;33458:4;33479:15;:2;-1:-1:-1;;;;;33479:13:0;;:15::i;:::-;33475:801;;;33548:2;-1:-1:-1;;;;;33532:36:0;;33591:12;:10;:12::i;:::-;33626:4;33653:7;33683:5;33532:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33532:175:0;;;;;;;;-1:-1:-1;;33532:175:0;;;;;;;;;;;;:::i;:::-;;;33511:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33890:13:0;;33886:320;;33933:108;;-1:-1:-1;;;33933:108:0;;;;;;;:::i;33886:320::-;34156:6;34150:13;34141:6;34137:2;34133:15;34126:38;33511:710;-1:-1:-1;;;;;;33771:51:0;-1:-1:-1;;;33771:51:0;;-1:-1:-1;33764:58:0;;33475:801;-1:-1:-1;34260:4:0;33303:980;;;;;;:::o;30523:382::-;-1:-1:-1;;;;;30603:16:0;;30595:61;;;;-1:-1:-1;;;30595:61:0;;;;;;;:::i;:::-;30676:16;30684:7;30676;:16::i;:::-;30675:17;30667:58;;;;-1:-1:-1;;;30667:58:0;;;;;;;:::i;:::-;30738:45;30767:1;30771:2;30775:7;30738:20;:45::i;:::-;-1:-1:-1;;;;;30796:13:0;;;;;;:9;:13;;;;;:18;;30813:1;;30796:13;:18;;30813:1;;30796:18;:::i;:::-;;;;-1:-1:-1;;30825:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30825:21:0;-1:-1:-1;;;;;30825:21:0;;;;;;;;30864:33;;30825:16;;;30864:33;;30825:16;;30864:33;30523:382;;:::o;2102:387::-;2425:20;2473:8;;;2102:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:198;;918:2;906:9;897:7;893:23;889:32;886:2;;;939:6;931;924:22;886:2;967:31;988:9;967:31;:::i;:::-;957:41;876:128;-1:-1:-1;;;876:128:1:o;1009:274::-;;;1138:2;1126:9;1117:7;1113:23;1109:32;1106:2;;;1159:6;1151;1144:22;1106:2;1187:31;1208:9;1187:31;:::i;:::-;1177:41;;1237:40;1273:2;1262:9;1258:18;1237:40;:::i;:::-;1227:50;;1096:187;;;;;:::o;1288:342::-;;;;1434:2;1422:9;1413:7;1409:23;1405:32;1402:2;;;1455:6;1447;1440:22;1402:2;1483:31;1504:9;1483:31;:::i;:::-;1473:41;;1533:40;1569:2;1558:9;1554:18;1533:40;:::i;:::-;1523:50;;1620:2;1609:9;1605:18;1592:32;1582:42;;1392:238;;;;;:::o;1635:702::-;;;;;1807:3;1795:9;1786:7;1782:23;1778:33;1775:2;;;1829:6;1821;1814:22;1775:2;1857:31;1878:9;1857:31;:::i;:::-;1847:41;;1907:40;1943:2;1932:9;1928:18;1907:40;:::i;:::-;1897:50;;1994:2;1983:9;1979:18;1966:32;1956:42;;2049:2;2038:9;2034:18;2021:32;2076:18;2068:6;2065:30;2062:2;;;2113:6;2105;2098:22;2062:2;2141:22;;2194:4;2186:13;;2182:27;-1:-1:-1;2172:2:1;;2228:6;2220;2213:22;2172:2;2256:75;2323:7;2318:2;2305:16;2300:2;2296;2292:11;2256:75;:::i;:::-;2246:85;;;1765:572;;;;;;;:::o;2342:369::-;;;2468:2;2456:9;2447:7;2443:23;2439:32;2436:2;;;2489:6;2481;2474:22;2436:2;2517:31;2538:9;2517:31;:::i;:::-;2507:41;;2598:2;2587:9;2583:18;2570:32;2645:5;2638:13;2631:21;2624:5;2621:32;2611:2;;2672:6;2664;2657:22;2611:2;2700:5;2690:15;;;2426:285;;;;;:::o;2716:266::-;;;2845:2;2833:9;2824:7;2820:23;2816:32;2813:2;;;2866:6;2858;2851:22;2813:2;2894:31;2915:9;2894:31;:::i;:::-;2884:41;2972:2;2957:18;;;;2944:32;;-1:-1:-1;;;2803:179:1:o;2987:257::-;;3098:2;3086:9;3077:7;3073:23;3069:32;3066:2;;;3119:6;3111;3104:22;3066:2;3163:9;3150:23;3182:32;3208:5;3182:32;:::i;3249:261::-;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3392:6;3384;3377:22;3339:2;3429:9;3423:16;3448:32;3474:5;3448:32;:::i;3515:482::-;;3637:2;3625:9;3616:7;3612:23;3608:32;3605:2;;;3658:6;3650;3643:22;3605:2;3703:9;3690:23;3736:18;3728:6;3725:30;3722:2;;;3773:6;3765;3758:22;3722:2;3801:22;;3854:4;3846:13;;3842:27;-1:-1:-1;3832:2:1;;3888:6;3880;3873:22;3832:2;3916:75;3983:7;3978:2;3965:16;3960:2;3956;3952:11;3916:75;:::i;4002:190::-;;4114:2;4102:9;4093:7;4089:23;4085:32;4082:2;;;4135:6;4127;4120:22;4082:2;-1:-1:-1;4163:23:1;;4072:120;-1:-1:-1;4072:120:1:o;4197:259::-;;4278:5;4272:12;4305:6;4300:3;4293:19;4321:63;4377:6;4370:4;4365:3;4361:14;4354:4;4347:5;4343:16;4321:63;:::i;:::-;4438:2;4417:15;-1:-1:-1;;4413:29:1;4404:39;;;;4445:4;4400:50;;4248:208;-1:-1:-1;;4248:208:1:o;4461:187::-;;4543:5;4537:12;4558:52;4603:6;4598:3;4591:4;4584:5;4580:16;4558:52;:::i;:::-;4626:16;;;;;4513:135;-1:-1:-1;;4513:135:1:o;4653:120::-;-1:-1:-1;;;4720:20:1;;4765:1;4756:11;;4710:63::o;4778:1315::-;5113:13;;4778:1315;;;;5186:1;5171:17;;5207:1;5243:18;;;;5270:2;;5324:4;5316:6;5312:17;5302:27;;5270:2;5350;5398;5390:6;5387:14;5367:18;5364:38;5361:2;;;-1:-1:-1;;;5425:33:1;;5481:4;5478:1;5471:15;5511:4;5432:3;5499:17;5361:2;5542:18;5569:104;;;;5687:1;5682:324;;;;5535:471;;5569:104;-1:-1:-1;;5602:24:1;;5590:37;;5647:16;;;;-1:-1:-1;5569:104:1;;5682:324;5718:39;5750:6;5718:39;:::i;:::-;5779:3;5795:165;5809:6;5806:1;5803:13;5795:165;;;5887:14;;5874:11;;;5867:35;5930:16;;;;5824:10;;5795:165;;;5799:3;;5989:6;5984:3;5980:16;5973:23;;5535:471;;;;;;;6022:65;6054:32;6082:3;6074:6;6054:32;:::i;:::-;6022:65;:::i;:::-;6015:72;5063:1030;-1:-1:-1;;;;;5063:1030:1:o;6098:203::-;-1:-1:-1;;;;;6262:32:1;;;;6244:51;;6232:2;6217:18;;6199:102::o;6306:490::-;-1:-1:-1;;;;;6575:15:1;;;6557:34;;6627:15;;6622:2;6607:18;;6600:43;6674:2;6659:18;;6652:34;;;6722:3;6717:2;6702:18;;6695:31;;;6306:490;;6743:47;;6770:19;;6762:6;6743:47;:::i;:::-;6735:55;6509:287;-1:-1:-1;;;;;;6509:287:1:o;6801:187::-;6966:14;;6959:22;6941:41;;6929:2;6914:18;;6896:92::o;6993:221::-;;7142:2;7131:9;7124:21;7162:46;7204:2;7193:9;7189:18;7181:6;7162:46;:::i;7219:339::-;7421:2;7403:21;;;7460:2;7440:18;;;7433:30;-1:-1:-1;;;7494:2:1;7479:18;;7472:45;7549:2;7534:18;;7393:165::o;7563:414::-;7765:2;7747:21;;;7804:2;7784:18;;;7777:30;7843:34;7838:2;7823:18;;7816:62;-1:-1:-1;;;7909:2:1;7894:18;;7887:48;7967:3;7952:19;;7737:240::o;7982:402::-;8184:2;8166:21;;;8223:2;8203:18;;;8196:30;8262:34;8257:2;8242:18;;8235:62;-1:-1:-1;;;8328:2:1;8313:18;;8306:36;8374:3;8359:19;;8156:228::o;8389:352::-;8591:2;8573:21;;;8630:2;8610:18;;;8603:30;8669;8664:2;8649:18;;8642:58;8732:2;8717:18;;8563:178::o;8746:400::-;8948:2;8930:21;;;8987:2;8967:18;;;8960:30;9026:34;9021:2;9006:18;;8999:62;-1:-1:-1;;;9092:2:1;9077:18;;9070:34;9136:3;9121:19;;8920:226::o;9151:349::-;9353:2;9335:21;;;9392:2;9372:18;;;9365:30;9431:27;9426:2;9411:18;;9404:55;9491:2;9476:18;;9325:175::o;9505:344::-;9707:2;9689:21;;;9746:2;9726:18;;;9719:30;-1:-1:-1;;;9780:2:1;9765:18;;9758:50;9840:2;9825:18;;9679:170::o;9854:344::-;10056:2;10038:21;;;10095:2;10075:18;;;10068:30;-1:-1:-1;;;10129:2:1;10114:18;;10107:50;10189:2;10174:18;;10028:170::o;10203:408::-;10405:2;10387:21;;;10444:2;10424:18;;;10417:30;10483:34;10478:2;10463:18;;10456:62;-1:-1:-1;;;10549:2:1;10534:18;;10527:42;10601:3;10586:19;;10377:234::o;10616:400::-;10818:2;10800:21;;;10857:2;10837:18;;;10830:30;10896:34;10891:2;10876:18;;10869:62;-1:-1:-1;;;10962:2:1;10947:18;;10940:34;11006:3;10991:19;;10790:226::o;11021:420::-;11223:2;11205:21;;;11262:2;11242:18;;;11235:30;11301:34;11296:2;11281:18;;11274:62;11372:26;11367:2;11352:18;;11345:54;11431:3;11416:19;;11195:246::o;11446:406::-;11648:2;11630:21;;;11687:2;11667:18;;;11660:30;11726:34;11721:2;11706:18;;11699:62;-1:-1:-1;;;11792:2:1;11777:18;;11770:40;11842:3;11827:19;;11620:232::o;11857:405::-;12059:2;12041:21;;;12098:2;12078:18;;;12071:30;12137:34;12132:2;12117:18;;12110:62;-1:-1:-1;;;12203:2:1;12188:18;;12181:39;12252:3;12237:19;;12031:231::o;12267:356::-;12469:2;12451:21;;;12488:18;;;12481:30;12547:34;12542:2;12527:18;;12520:62;12614:2;12599:18;;12441:182::o;12628:408::-;12830:2;12812:21;;;12869:2;12849:18;;;12842:30;12908:34;12903:2;12888:18;;12881:62;-1:-1:-1;;;12974:2:1;12959:18;;12952:42;13026:3;13011:19;;12802:234::o;13041:341::-;13243:2;13225:21;;;13282:2;13262:18;;;13255:30;-1:-1:-1;;;13316:2:1;13301:18;;13294:47;13373:2;13358:18;;13215:167::o;13387:356::-;13589:2;13571:21;;;13608:18;;;13601:30;13667:34;13662:2;13647:18;;13640:62;13734:2;13719:18;;13561:182::o;13748:405::-;13950:2;13932:21;;;13989:2;13969:18;;;13962:30;14028:34;14023:2;14008:18;;14001:62;-1:-1:-1;;;14094:2:1;14079:18;;14072:39;14143:3;14128:19;;13922:231::o;14158:397::-;14360:2;14342:21;;;14399:2;14379:18;;;14372:30;14438:34;14433:2;14418:18;;14411:62;-1:-1:-1;;;14504:2:1;14489:18;;14482:31;14545:3;14530:19;;14332:223::o;14560:413::-;14762:2;14744:21;;;14801:2;14781:18;;;14774:30;14840:34;14835:2;14820:18;;14813:62;-1:-1:-1;;;14906:2:1;14891:18;;14884:47;14963:3;14948:19;;14734:239::o;14978:337::-;15180:2;15162:21;;;15219:2;15199:18;;;15192:30;-1:-1:-1;;;15253:2:1;15238:18;;15231:43;15306:2;15291:18;;15152:163::o;15320:177::-;15466:25;;;15454:2;15439:18;;15421:76::o;15502:129::-;;15570:17;;;15620:4;15604:21;;;15560:71::o;15636:128::-;;15707:1;15703:6;15700:1;15697:13;15694:2;;;15713:18;;:::i;:::-;-1:-1:-1;15749:9:1;;15684:80::o;15769:120::-;;15835:1;15825:2;;15840:18;;:::i;:::-;-1:-1:-1;15874:9:1;;15815:74::o;15894:168::-;;16000:1;15996;15992:6;15988:14;15985:1;15982:21;15977:1;15970:9;15963:17;15959:45;15956:2;;;16007:18;;:::i;:::-;-1:-1:-1;16047:9:1;;15946:116::o;16067:125::-;;16135:1;16132;16129:8;16126:2;;;16140:18;;:::i;:::-;-1:-1:-1;16177:9:1;;16116:76::o;16197:258::-;16269:1;16279:113;16293:6;16290:1;16287:13;16279:113;;;16369:11;;;16363:18;16350:11;;;16343:39;16315:2;16308:10;16279:113;;;16410:6;16407:1;16404:13;16401:2;;;-1:-1:-1;;16445:1:1;16427:16;;16420:27;16250:205::o;16460:380::-;16545:1;16535:12;;16592:1;16582:12;;;16603:2;;16657:4;16649:6;16645:17;16635:27;;16603:2;16710;16702:6;16699:14;16679:18;16676:38;16673:2;;;16756:10;16751:3;16747:20;16744:1;16737:31;16791:4;16788:1;16781:15;16819:4;16816:1;16809:15;16845:135;;-1:-1:-1;;16905:17:1;;16902:2;;;16925:18;;:::i;:::-;-1:-1:-1;16972:1:1;16961:13;;16892:88::o;16985:112::-;;17043:1;17033:2;;17048:18;;:::i;:::-;-1:-1:-1;17082:9:1;;17023:74::o;17102:127::-;17163:10;17158:3;17154:20;17151:1;17144:31;17194:4;17191:1;17184:15;17218:4;17215:1;17208:15;17234:127;17295:10;17290:3;17286:20;17283:1;17276:31;17326:4;17323:1;17316:15;17350:4;17347:1;17340:15;17366:127;17427:10;17422:3;17418:20;17415:1;17408:31;17458:4;17455:1;17448:15;17482:4;17479:1;17472:15;17498:133;-1:-1:-1;;;;;;17574:32:1;;17564:43;;17554:2;;17621:1;17618;17611:12

Swarm Source

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