ETH Price: $3,445.24 (+1.37%)

Token

X-Punks (XPUNK)
 

Overview

Max Total Supply

0 XPUNK

Holders

523

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
8 XPUNK
0xa91332336a3203a03ee73d65f951238ed9348405
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:
XPunks

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// ooooooo  ooooo         ooooooooo.   ooooo     ooo ooooo      ooo oooo    oooo  .oooooo..o 
//  `8888    d8'          `888   `Y88. `888'     `8' `888b.     `8' `888   .8P'  d8P'    `Y8 
//    Y888..8P             888   .d88'  888       8   8 `88b.    8   888  d8'    Y88bo.      
//     `8888'              888ooo88P'   888       8   8   `88b.  8   88888[       `"Y8888o.  
//    .8PY888.    8888888  888          888       8   8     `88b.8   888`88b.         `"Y88b 
//   d8'  `888b            888          `88.    .8'   8       `888   888  `88b.  oo     .d8P 
// o888o  o88888o         o888o           `YbodP'    o8o        `8  o888o  o888o 8""88888P'  
//                                                                                                                                                                                                                                                                               
//                                                                                             
// https://xpunks.xyz/




// File @openzeppelin/contracts/utils/introspection/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;




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

// File @openzeppelin/contracts/token/ERC721/[email protected]

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/token/ERC721/[email protected]

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

// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

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

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

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

// File @openzeppelin/contracts/utils/[email protected]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/utils/[email protected]

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

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

// File @openzeppelin/contracts/utils/[email protected]

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

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

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

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

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

// File @openzeppelin/contracts/utils/introspection/[email protected]

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

// File @openzeppelin/contracts/token/ERC721/[email protected]

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File @openzeppelin/contracts/access/[email protected]

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/security/[email protected]

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File contracts/XPunk.sol



contract XPunks is ERC721, Ownable, ReentrancyGuard {
    uint256 public PRICE = 0.025 * 1e18;
    uint256 public MAX_SUPPLY = 3333;
    uint256 public constant OWNER_AMOUNT = 30;

    uint256 public minted;
    string public baseURI;

    constructor(
        string memory name_,
        string memory symbol_,
        string memory baseURI_
    ) ERC721(name_, symbol_) {
        baseURI = baseURI_;
        for (uint256 i = 0; i < OWNER_AMOUNT; i++) {
            _safeMint(msg.sender, ++minted);
        }
    }

    function mint(uint8 amount) public payable nonReentrant {
        require(amount > 0, "Amount must be more than 0");
        require(amount <= 10, "Amount must be 10 or less");
        require(msg.value == PRICE * amount, "Ether value sent is not correct");
        require(
            minted + amount <= MAX_SUPPLY,
            "Sold out, check out OpenSea tho! <3"
        );

        for (uint256 i = 0; i < amount; i++) {
            _safeMint(msg.sender, ++minted);
        }
    }

        function mintFREE(uint8 amount) public payable nonReentrant {
        require(amount > 0, "Amount must be more than 0");
        require(amount <= 10, "Amount must be 10 or less");
        require(
            minted + amount <= 2000,
            "No more free mints!"
        );

        for (uint256 i = 0; i < amount; i++) {
            _safeMint(msg.sender, ++minted);
        }
    }

	function setPRICE(uint256 _newPRICE) public onlyOwner {
	    PRICE = _newPRICE;
	}

	function setmaxSupply(uint256 _newMaxSupply) public onlyOwner {
	    MAX_SUPPLY = _newMaxSupply;
    }

    function withdraw(address payable recipient) public onlyOwner {
        require(address(this).balance > 0, "No contract balance");
        recipient.transfer(address(this).balance);
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OWNER_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"uint8","name":"amount","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"mintFREE","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPRICE","type":"uint256"}],"name":"setPRICE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setmaxSupply","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526658d15e17628000600855610d056009553480156200002257600080fd5b50604051620048ee380380620048ee833981810160405281019062000048919062000811565b82828160009080519060200190620000629291906200069a565b5080600190805190602001906200007b9291906200069a565b5050506200009e620000926200011460201b60201c565b6200011c60201b60201c565b600160078190555080600b9080519060200190620000be9291906200069a565b5060005b601e8110156200010a57620000f433600a60008154620000e29062000c51565b919050819055620001e260201b60201c565b8080620001019062000c51565b915050620000c2565b5050505062000e0c565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002048282604051806020016040528060008152506200020860201b60201c565b5050565b6200021a83836200027660201b60201c565b6200022f60008484846200045c60201b60201c565b62000271576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200026890620009f6565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e09062000a3a565b60405180910390fd5b620002fa816200061660201b60201c565b156200033d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003349062000a18565b60405180910390fd5b62000351600083836200068260201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003a3919062000ae8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200048a8473ffffffffffffffffffffffffffffffffffffffff166200068760201b6200173d1760201c565b1562000609578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620004bc6200011460201b60201c565b8786866040518563ffffffff1660e01b8152600401620004e09493929190620009a2565b602060405180830381600087803b158015620004fb57600080fd5b505af19250505080156200052f57506040513d601f19601f820116820180604052508101906200052c9190620007df565b60015b620005b8573d806000811462000562576040519150601f19603f3d011682016040523d82523d6000602084013e62000567565b606091505b50600081511415620005b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005a790620009f6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506200060e565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b828054620006a89062000be5565b90600052602060002090601f016020900481019282620006cc576000855562000718565b82601f10620006e757805160ff191683800117855562000718565b8280016001018555821562000718579182015b8281111562000717578251825591602001919060010190620006fa565b5b5090506200072791906200072b565b5090565b5b80821115620007465760008160009055506001016200072c565b5090565b6000620007616200075b8462000a85565b62000a5c565b90508281526020810184848401111562000780576200077f62000d31565b5b6200078d84828562000baf565b509392505050565b600081519050620007a68162000df2565b92915050565b600082601f830112620007c457620007c362000d2c565b5b8151620007d68482602086016200074a565b91505092915050565b600060208284031215620007f857620007f762000d3b565b5b6000620008088482850162000795565b91505092915050565b6000806000606084860312156200082d576200082c62000d3b565b5b600084015167ffffffffffffffff8111156200084e576200084d62000d36565b5b6200085c86828701620007ac565b935050602084015167ffffffffffffffff81111562000880576200087f62000d36565b5b6200088e86828701620007ac565b925050604084015167ffffffffffffffff811115620008b257620008b162000d36565b5b620008c086828701620007ac565b9150509250925092565b620008d58162000b45565b82525050565b6000620008e88262000abb565b620008f4818562000ac6565b93506200090681856020860162000baf565b620009118162000d40565b840191505092915050565b60006200092b60328362000ad7565b9150620009388262000d51565b604082019050919050565b600062000952601c8362000ad7565b91506200095f8262000da0565b602082019050919050565b60006200097960208362000ad7565b9150620009868262000dc9565b602082019050919050565b6200099c8162000ba5565b82525050565b6000608082019050620009b96000830187620008ca565b620009c86020830186620008ca565b620009d7604083018562000991565b8181036060830152620009eb8184620008db565b905095945050505050565b6000602082019050818103600083015262000a11816200091c565b9050919050565b6000602082019050818103600083015262000a338162000943565b9050919050565b6000602082019050818103600083015262000a55816200096a565b9050919050565b600062000a6862000a7b565b905062000a76828262000c1b565b919050565b6000604051905090565b600067ffffffffffffffff82111562000aa35762000aa262000cfd565b5b62000aae8262000d40565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000af58262000ba5565b915062000b028362000ba5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b3a5762000b3962000c9f565b5b828201905092915050565b600062000b528262000b85565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000bcf57808201518184015260208101905062000bb2565b8381111562000bdf576000848401525b50505050565b6000600282049050600182168062000bfe57607f821691505b6020821081141562000c155762000c1462000cce565b5b50919050565b62000c268262000d40565b810181811067ffffffffffffffff8211171562000c485762000c4762000cfd565b5b80604052505050565b600062000c5e8262000ba5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000c945762000c9362000c9f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b62000dfd8162000b59565b811462000e0957600080fd5b50565b613ad28062000e1c6000396000f3fe60806040526004361061019c5760003560e01c80636c0360eb116100ec578063a22cb4651161008a578063e985e9c511610064578063e985e9c5146105a5578063eea52d38146105e2578063f2fde38b1461060b578063ff31bf9a146106345761019c565b8063a22cb46514610516578063b88d4fde1461053f578063c87b56dd146105685761019c565b8063715018a6116100c6578063715018a61461047e5780638d859f3e146104955780638da5cb5b146104c057806395d89b41146104eb5761019c565b80636c0360eb146103fa5780636ecd23061461042557806370a08231146104415761019c565b806332cb6b0c1161015957806351cff8d91161013357806351cff8d91461034057806355f804b3146103695780636352211e1461039257806368be9822146103cf5761019c565b806332cb6b0c146102c157806342842e0e146102ec5780634f02c420146103155761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b314610246578063228025e81461026f57806323b872dd14610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c3919061271f565b610650565b6040516101d59190612c9c565b60405180910390f35b3480156101ea57600080fd5b506101f3610732565b6040516102009190612cb7565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b91906127c2565b6107c4565b60405161023d9190612c35565b60405180910390f35b34801561025257600080fd5b5061026d600480360381019061026891906126df565b610849565b005b34801561027b57600080fd5b50610296600480360381019061029191906127c2565b610961565b005b3480156102a457600080fd5b506102bf60048036038101906102ba91906125c9565b6109e7565b005b3480156102cd57600080fd5b506102d6610a47565b6040516102e39190612fb9565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e91906125c9565b610a4d565b005b34801561032157600080fd5b5061032a610a6d565b6040516103379190612fb9565b60405180910390f35b34801561034c57600080fd5b506103676004803603810190610362919061255c565b610a73565b005b34801561037557600080fd5b50610390600480360381019061038b9190612779565b610b7c565b005b34801561039e57600080fd5b506103b960048036038101906103b491906127c2565b610c12565b6040516103c69190612c35565b60405180910390f35b3480156103db57600080fd5b506103e4610cc4565b6040516103f19190612fb9565b60405180910390f35b34801561040657600080fd5b5061040f610cc9565b60405161041c9190612cb7565b60405180910390f35b61043f600480360381019061043a91906127ef565b610d57565b005b34801561044d57600080fd5b506104686004803603810190610463919061252f565b610f24565b6040516104759190612fb9565b60405180910390f35b34801561048a57600080fd5b50610493610fdc565b005b3480156104a157600080fd5b506104aa611064565b6040516104b79190612fb9565b60405180910390f35b3480156104cc57600080fd5b506104d561106a565b6040516104e29190612c35565b60405180910390f35b3480156104f757600080fd5b50610500611094565b60405161050d9190612cb7565b60405180910390f35b34801561052257600080fd5b5061053d6004803603810190610538919061269f565b611126565b005b34801561054b57600080fd5b506105666004803603810190610561919061261c565b6112a7565b005b34801561057457600080fd5b5061058f600480360381019061058a91906127c2565b611309565b60405161059c9190612cb7565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c79190612589565b6113b0565b6040516105d99190612c9c565b60405180910390f35b3480156105ee57600080fd5b50610609600480360381019061060491906127c2565b611444565b005b34801561061757600080fd5b50610632600480360381019061062d919061252f565b6114ca565b005b61064e600480360381019061064991906127ef565b6115c2565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061072b575061072a82611750565b5b9050919050565b60606000805461074190613288565b80601f016020809104026020016040519081016040528092919081815260200182805461076d90613288565b80156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b5050505050905090565b60006107cf826117ba565b61080e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080590612e99565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085482610c12565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bc90612f39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108e4611826565b73ffffffffffffffffffffffffffffffffffffffff16148061091357506109128161090d611826565b6113b0565b5b610952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094990612df9565b60405180910390fd5b61095c838361182e565b505050565b610969611826565b73ffffffffffffffffffffffffffffffffffffffff1661098761106a565b73ffffffffffffffffffffffffffffffffffffffff16146109dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d490612eb9565b60405180910390fd5b8060098190555050565b6109f86109f2611826565b826118e7565b610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90612f59565b60405180910390fd5b610a428383836119c5565b505050565b60095481565b610a68838383604051806020016040528060008152506112a7565b505050565b600a5481565b610a7b611826565b73ffffffffffffffffffffffffffffffffffffffff16610a9961106a565b73ffffffffffffffffffffffffffffffffffffffff1614610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690612eb9565b60405180910390fd5b60004711610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990612ed9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b78573d6000803e3d6000fd5b5050565b610b84611826565b73ffffffffffffffffffffffffffffffffffffffff16610ba261106a565b73ffffffffffffffffffffffffffffffffffffffff1614610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90612eb9565b60405180910390fd5b80600b9080519060200190610c0e929190612319565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290612e39565b60405180910390fd5b80915050919050565b601e81565b600b8054610cd690613288565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0290613288565b8015610d4f5780601f10610d2457610100808354040283529160200191610d4f565b820191906000526020600020905b815481529060010190602001808311610d3257829003601f168201915b505050505081565b60026007541415610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9490612f99565b60405180910390fd5b600260078190555060008160ff1611610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290612dd9565b60405180910390fd5b600a8160ff161115610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990612f79565b60405180910390fd5b8060ff16600854610e439190613125565b3414610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b90612d79565b60405180910390fd5b6009548160ff16600a54610e98919061309e565b1115610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090612d99565b60405180910390fd5b60005b8160ff16811015610f1857610f0533600a60008154610efa906132eb565b919050819055611c21565b8080610f10906132eb565b915050610edc565b50600160078190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90612e19565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fe4611826565b73ffffffffffffffffffffffffffffffffffffffff1661100261106a565b73ffffffffffffffffffffffffffffffffffffffff1614611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90612eb9565b60405180910390fd5b6110626000611c3f565b565b60085481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110a390613288565b80601f01602080910402602001604051908101604052809291908181526020018280546110cf90613288565b801561111c5780601f106110f15761010080835404028352916020019161111c565b820191906000526020600020905b8154815290600101906020018083116110ff57829003601f168201915b5050505050905090565b61112e611826565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390612d59565b60405180910390fd5b80600560006111a9611826565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611256611826565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161129b9190612c9c565b60405180910390a35050565b6112b86112b2611826565b836118e7565b6112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90612f59565b60405180910390fd5b61130384848484611d05565b50505050565b6060611314826117ba565b611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90612f19565b60405180910390fd5b600061135d611d61565b9050600081511161137d57604051806020016040528060008152506113a8565b8061138784611df3565b604051602001611398929190612c11565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61144c611826565b73ffffffffffffffffffffffffffffffffffffffff1661146a61106a565b73ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790612eb9565b60405180910390fd5b8060088190555050565b6114d2611826565b73ffffffffffffffffffffffffffffffffffffffff166114f061106a565b73ffffffffffffffffffffffffffffffffffffffff1614611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90612eb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90612cf9565b60405180910390fd5b6115bf81611c3f565b50565b60026007541415611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90612f99565b60405180910390fd5b600260078190555060008160ff1611611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90612dd9565b60405180910390fd5b600a8160ff16111561169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490612f79565b60405180910390fd5b6107d08160ff16600a546116b1919061309e565b11156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e990612e79565b60405180910390fd5b60005b8160ff168110156117315761171e33600a60008154611713906132eb565b919050819055611c21565b8080611729906132eb565b9150506116f5565b50600160078190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118a183610c12565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118f2826117ba565b611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890612db9565b60405180910390fd5b600061193c83610c12565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119ab57508373ffffffffffffffffffffffffffffffffffffffff16611993846107c4565b73ffffffffffffffffffffffffffffffffffffffff16145b806119bc57506119bb81856113b0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119e582610c12565b73ffffffffffffffffffffffffffffffffffffffff1614611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3290612ef9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290612d39565b60405180910390fd5b611ab6838383611f54565b611ac160008261182e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b11919061317f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b68919061309e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611c3b828260405180602001604052806000815250611f59565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d108484846119c5565b611d1c84848484611fb4565b611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5290612cd9565b60405180910390fd5b50505050565b6060600b8054611d7090613288565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9c90613288565b8015611de95780601f10611dbe57610100808354040283529160200191611de9565b820191906000526020600020905b815481529060010190602001808311611dcc57829003601f168201915b5050505050905090565b60606000821415611e3b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f4f565b600082905060005b60008214611e6d578080611e56906132eb565b915050600a82611e6691906130f4565b9150611e43565b60008167ffffffffffffffff811115611e8957611e88613421565b5b6040519080825280601f01601f191660200182016040528015611ebb5781602001600182028036833780820191505090505b5090505b60008514611f4857600182611ed4919061317f565b9150600a85611ee39190613334565b6030611eef919061309e565b60f81b818381518110611f0557611f046133f2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f4191906130f4565b9450611ebf565b8093505050505b919050565b505050565b611f63838361214b565b611f706000848484611fb4565b611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa690612cd9565b60405180910390fd5b505050565b6000611fd58473ffffffffffffffffffffffffffffffffffffffff1661173d565b1561213e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ffe611826565b8786866040518563ffffffff1660e01b81526004016120209493929190612c50565b602060405180830381600087803b15801561203a57600080fd5b505af192505050801561206b57506040513d601f19601f82011682018060405250810190612068919061274c565b60015b6120ee573d806000811461209b576040519150601f19603f3d011682016040523d82523d6000602084013e6120a0565b606091505b506000815114156120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90612cd9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612143565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290612e59565b60405180910390fd5b6121c4816117ba565b15612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90612d19565b60405180910390fd5b61221060008383611f54565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612260919061309e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461232590613288565b90600052602060002090601f016020900481019282612347576000855561238e565b82601f1061236057805160ff191683800117855561238e565b8280016001018555821561238e579182015b8281111561238d578251825591602001919060010190612372565b5b50905061239b919061239f565b5090565b5b808211156123b85760008160009055506001016123a0565b5090565b60006123cf6123ca84612ff9565b612fd4565b9050828152602081018484840111156123eb576123ea613455565b5b6123f6848285613246565b509392505050565b600061241161240c8461302a565b612fd4565b90508281526020810184848401111561242d5761242c613455565b5b612438848285613246565b509392505050565b60008135905061244f81613a12565b92915050565b60008135905061246481613a29565b92915050565b60008135905061247981613a40565b92915050565b60008135905061248e81613a57565b92915050565b6000815190506124a381613a57565b92915050565b600082601f8301126124be576124bd613450565b5b81356124ce8482602086016123bc565b91505092915050565b600082601f8301126124ec576124eb613450565b5b81356124fc8482602086016123fe565b91505092915050565b60008135905061251481613a6e565b92915050565b60008135905061252981613a85565b92915050565b6000602082840312156125455761254461345f565b5b600061255384828501612440565b91505092915050565b6000602082840312156125725761257161345f565b5b600061258084828501612455565b91505092915050565b600080604083850312156125a05761259f61345f565b5b60006125ae85828601612440565b92505060206125bf85828601612440565b9150509250929050565b6000806000606084860312156125e2576125e161345f565b5b60006125f086828701612440565b935050602061260186828701612440565b925050604061261286828701612505565b9150509250925092565b600080600080608085870312156126365761263561345f565b5b600061264487828801612440565b945050602061265587828801612440565b935050604061266687828801612505565b925050606085013567ffffffffffffffff8111156126875761268661345a565b5b612693878288016124a9565b91505092959194509250565b600080604083850312156126b6576126b561345f565b5b60006126c485828601612440565b92505060206126d58582860161246a565b9150509250929050565b600080604083850312156126f6576126f561345f565b5b600061270485828601612440565b925050602061271585828601612505565b9150509250929050565b6000602082840312156127355761273461345f565b5b60006127438482850161247f565b91505092915050565b6000602082840312156127625761276161345f565b5b600061277084828501612494565b91505092915050565b60006020828403121561278f5761278e61345f565b5b600082013567ffffffffffffffff8111156127ad576127ac61345a565b5b6127b9848285016124d7565b91505092915050565b6000602082840312156127d8576127d761345f565b5b60006127e684828501612505565b91505092915050565b6000602082840312156128055761280461345f565b5b60006128138482850161251a565b91505092915050565b612825816131b3565b82525050565b612834816131d7565b82525050565b60006128458261305b565b61284f8185613071565b935061285f818560208601613255565b61286881613464565b840191505092915050565b600061287e82613066565b6128888185613082565b9350612898818560208601613255565b6128a181613464565b840191505092915050565b60006128b782613066565b6128c18185613093565b93506128d1818560208601613255565b80840191505092915050565b60006128ea603283613082565b91506128f582613475565b604082019050919050565b600061290d602683613082565b9150612918826134c4565b604082019050919050565b6000612930601c83613082565b915061293b82613513565b602082019050919050565b6000612953602483613082565b915061295e8261353c565b604082019050919050565b6000612976601983613082565b91506129818261358b565b602082019050919050565b6000612999601f83613082565b91506129a4826135b4565b602082019050919050565b60006129bc602383613082565b91506129c7826135dd565b604082019050919050565b60006129df602c83613082565b91506129ea8261362c565b604082019050919050565b6000612a02601a83613082565b9150612a0d8261367b565b602082019050919050565b6000612a25603883613082565b9150612a30826136a4565b604082019050919050565b6000612a48602a83613082565b9150612a53826136f3565b604082019050919050565b6000612a6b602983613082565b9150612a7682613742565b604082019050919050565b6000612a8e602083613082565b9150612a9982613791565b602082019050919050565b6000612ab1601383613082565b9150612abc826137ba565b602082019050919050565b6000612ad4602c83613082565b9150612adf826137e3565b604082019050919050565b6000612af7602083613082565b9150612b0282613832565b602082019050919050565b6000612b1a601383613082565b9150612b258261385b565b602082019050919050565b6000612b3d602983613082565b9150612b4882613884565b604082019050919050565b6000612b60602f83613082565b9150612b6b826138d3565b604082019050919050565b6000612b83602183613082565b9150612b8e82613922565b604082019050919050565b6000612ba6603183613082565b9150612bb182613971565b604082019050919050565b6000612bc9601983613082565b9150612bd4826139c0565b602082019050919050565b6000612bec601f83613082565b9150612bf7826139e9565b602082019050919050565b612c0b8161322f565b82525050565b6000612c1d82856128ac565b9150612c2982846128ac565b91508190509392505050565b6000602082019050612c4a600083018461281c565b92915050565b6000608082019050612c65600083018761281c565b612c72602083018661281c565b612c7f6040830185612c02565b8181036060830152612c91818461283a565b905095945050505050565b6000602082019050612cb1600083018461282b565b92915050565b60006020820190508181036000830152612cd18184612873565b905092915050565b60006020820190508181036000830152612cf2816128dd565b9050919050565b60006020820190508181036000830152612d1281612900565b9050919050565b60006020820190508181036000830152612d3281612923565b9050919050565b60006020820190508181036000830152612d5281612946565b9050919050565b60006020820190508181036000830152612d7281612969565b9050919050565b60006020820190508181036000830152612d928161298c565b9050919050565b60006020820190508181036000830152612db2816129af565b9050919050565b60006020820190508181036000830152612dd2816129d2565b9050919050565b60006020820190508181036000830152612df2816129f5565b9050919050565b60006020820190508181036000830152612e1281612a18565b9050919050565b60006020820190508181036000830152612e3281612a3b565b9050919050565b60006020820190508181036000830152612e5281612a5e565b9050919050565b60006020820190508181036000830152612e7281612a81565b9050919050565b60006020820190508181036000830152612e9281612aa4565b9050919050565b60006020820190508181036000830152612eb281612ac7565b9050919050565b60006020820190508181036000830152612ed281612aea565b9050919050565b60006020820190508181036000830152612ef281612b0d565b9050919050565b60006020820190508181036000830152612f1281612b30565b9050919050565b60006020820190508181036000830152612f3281612b53565b9050919050565b60006020820190508181036000830152612f5281612b76565b9050919050565b60006020820190508181036000830152612f7281612b99565b9050919050565b60006020820190508181036000830152612f9281612bbc565b9050919050565b60006020820190508181036000830152612fb281612bdf565b9050919050565b6000602082019050612fce6000830184612c02565b92915050565b6000612fde612fef565b9050612fea82826132ba565b919050565b6000604051905090565b600067ffffffffffffffff82111561301457613013613421565b5b61301d82613464565b9050602081019050919050565b600067ffffffffffffffff82111561304557613044613421565b5b61304e82613464565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006130a98261322f565b91506130b48361322f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130e9576130e8613365565b5b828201905092915050565b60006130ff8261322f565b915061310a8361322f565b92508261311a57613119613394565b5b828204905092915050565b60006131308261322f565b915061313b8361322f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561317457613173613365565b5b828202905092915050565b600061318a8261322f565b91506131958361322f565b9250828210156131a8576131a7613365565b5b828203905092915050565b60006131be8261320f565b9050919050565b60006131d08261320f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613273578082015181840152602081019050613258565b83811115613282576000848401525b50505050565b600060028204905060018216806132a057607f821691505b602082108114156132b4576132b36133c3565b5b50919050565b6132c382613464565b810181811067ffffffffffffffff821117156132e2576132e1613421565b5b80604052505050565b60006132f68261322f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561332957613328613365565b5b600182019050919050565b600061333f8261322f565b915061334a8361322f565b92508261335a57613359613394565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f536f6c64206f75742c20636865636b206f7574204f70656e5365612074686f2160008201527f203c330000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206d6f7265207468616e2030000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f206d6f72652066726565206d696e74732100000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f20636f6e74726163742062616c616e636500000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265203130206f72206c65737300000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613a1b816131b3565b8114613a2657600080fd5b50565b613a32816131c5565b8114613a3d57600080fd5b50565b613a49816131d7565b8114613a5457600080fd5b50565b613a60816131e3565b8114613a6b57600080fd5b50565b613a778161322f565b8114613a8257600080fd5b50565b613a8e81613239565b8114613a9957600080fd5b5056fea2646970667358221220e88e513ae6882e1fcf48cdb3d06bec20f9e9ee6386e71478c109595aa46a27b264736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007582d50756e6b730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055850554e4b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061019c5760003560e01c80636c0360eb116100ec578063a22cb4651161008a578063e985e9c511610064578063e985e9c5146105a5578063eea52d38146105e2578063f2fde38b1461060b578063ff31bf9a146106345761019c565b8063a22cb46514610516578063b88d4fde1461053f578063c87b56dd146105685761019c565b8063715018a6116100c6578063715018a61461047e5780638d859f3e146104955780638da5cb5b146104c057806395d89b41146104eb5761019c565b80636c0360eb146103fa5780636ecd23061461042557806370a08231146104415761019c565b806332cb6b0c1161015957806351cff8d91161013357806351cff8d91461034057806355f804b3146103695780636352211e1461039257806368be9822146103cf5761019c565b806332cb6b0c146102c157806342842e0e146102ec5780634f02c420146103155761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b314610246578063228025e81461026f57806323b872dd14610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c3919061271f565b610650565b6040516101d59190612c9c565b60405180910390f35b3480156101ea57600080fd5b506101f3610732565b6040516102009190612cb7565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b91906127c2565b6107c4565b60405161023d9190612c35565b60405180910390f35b34801561025257600080fd5b5061026d600480360381019061026891906126df565b610849565b005b34801561027b57600080fd5b50610296600480360381019061029191906127c2565b610961565b005b3480156102a457600080fd5b506102bf60048036038101906102ba91906125c9565b6109e7565b005b3480156102cd57600080fd5b506102d6610a47565b6040516102e39190612fb9565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e91906125c9565b610a4d565b005b34801561032157600080fd5b5061032a610a6d565b6040516103379190612fb9565b60405180910390f35b34801561034c57600080fd5b506103676004803603810190610362919061255c565b610a73565b005b34801561037557600080fd5b50610390600480360381019061038b9190612779565b610b7c565b005b34801561039e57600080fd5b506103b960048036038101906103b491906127c2565b610c12565b6040516103c69190612c35565b60405180910390f35b3480156103db57600080fd5b506103e4610cc4565b6040516103f19190612fb9565b60405180910390f35b34801561040657600080fd5b5061040f610cc9565b60405161041c9190612cb7565b60405180910390f35b61043f600480360381019061043a91906127ef565b610d57565b005b34801561044d57600080fd5b506104686004803603810190610463919061252f565b610f24565b6040516104759190612fb9565b60405180910390f35b34801561048a57600080fd5b50610493610fdc565b005b3480156104a157600080fd5b506104aa611064565b6040516104b79190612fb9565b60405180910390f35b3480156104cc57600080fd5b506104d561106a565b6040516104e29190612c35565b60405180910390f35b3480156104f757600080fd5b50610500611094565b60405161050d9190612cb7565b60405180910390f35b34801561052257600080fd5b5061053d6004803603810190610538919061269f565b611126565b005b34801561054b57600080fd5b506105666004803603810190610561919061261c565b6112a7565b005b34801561057457600080fd5b5061058f600480360381019061058a91906127c2565b611309565b60405161059c9190612cb7565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c79190612589565b6113b0565b6040516105d99190612c9c565b60405180910390f35b3480156105ee57600080fd5b50610609600480360381019061060491906127c2565b611444565b005b34801561061757600080fd5b50610632600480360381019061062d919061252f565b6114ca565b005b61064e600480360381019061064991906127ef565b6115c2565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061072b575061072a82611750565b5b9050919050565b60606000805461074190613288565b80601f016020809104026020016040519081016040528092919081815260200182805461076d90613288565b80156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b5050505050905090565b60006107cf826117ba565b61080e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080590612e99565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085482610c12565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bc90612f39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108e4611826565b73ffffffffffffffffffffffffffffffffffffffff16148061091357506109128161090d611826565b6113b0565b5b610952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094990612df9565b60405180910390fd5b61095c838361182e565b505050565b610969611826565b73ffffffffffffffffffffffffffffffffffffffff1661098761106a565b73ffffffffffffffffffffffffffffffffffffffff16146109dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d490612eb9565b60405180910390fd5b8060098190555050565b6109f86109f2611826565b826118e7565b610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90612f59565b60405180910390fd5b610a428383836119c5565b505050565b60095481565b610a68838383604051806020016040528060008152506112a7565b505050565b600a5481565b610a7b611826565b73ffffffffffffffffffffffffffffffffffffffff16610a9961106a565b73ffffffffffffffffffffffffffffffffffffffff1614610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690612eb9565b60405180910390fd5b60004711610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990612ed9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b78573d6000803e3d6000fd5b5050565b610b84611826565b73ffffffffffffffffffffffffffffffffffffffff16610ba261106a565b73ffffffffffffffffffffffffffffffffffffffff1614610bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bef90612eb9565b60405180910390fd5b80600b9080519060200190610c0e929190612319565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290612e39565b60405180910390fd5b80915050919050565b601e81565b600b8054610cd690613288565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0290613288565b8015610d4f5780601f10610d2457610100808354040283529160200191610d4f565b820191906000526020600020905b815481529060010190602001808311610d3257829003601f168201915b505050505081565b60026007541415610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9490612f99565b60405180910390fd5b600260078190555060008160ff1611610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290612dd9565b60405180910390fd5b600a8160ff161115610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990612f79565b60405180910390fd5b8060ff16600854610e439190613125565b3414610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b90612d79565b60405180910390fd5b6009548160ff16600a54610e98919061309e565b1115610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090612d99565b60405180910390fd5b60005b8160ff16811015610f1857610f0533600a60008154610efa906132eb565b919050819055611c21565b8080610f10906132eb565b915050610edc565b50600160078190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90612e19565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fe4611826565b73ffffffffffffffffffffffffffffffffffffffff1661100261106a565b73ffffffffffffffffffffffffffffffffffffffff1614611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90612eb9565b60405180910390fd5b6110626000611c3f565b565b60085481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110a390613288565b80601f01602080910402602001604051908101604052809291908181526020018280546110cf90613288565b801561111c5780601f106110f15761010080835404028352916020019161111c565b820191906000526020600020905b8154815290600101906020018083116110ff57829003601f168201915b5050505050905090565b61112e611826565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390612d59565b60405180910390fd5b80600560006111a9611826565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611256611826565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161129b9190612c9c565b60405180910390a35050565b6112b86112b2611826565b836118e7565b6112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90612f59565b60405180910390fd5b61130384848484611d05565b50505050565b6060611314826117ba565b611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90612f19565b60405180910390fd5b600061135d611d61565b9050600081511161137d57604051806020016040528060008152506113a8565b8061138784611df3565b604051602001611398929190612c11565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61144c611826565b73ffffffffffffffffffffffffffffffffffffffff1661146a61106a565b73ffffffffffffffffffffffffffffffffffffffff16146114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790612eb9565b60405180910390fd5b8060088190555050565b6114d2611826565b73ffffffffffffffffffffffffffffffffffffffff166114f061106a565b73ffffffffffffffffffffffffffffffffffffffff1614611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90612eb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90612cf9565b60405180910390fd5b6115bf81611c3f565b50565b60026007541415611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90612f99565b60405180910390fd5b600260078190555060008160ff1611611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90612dd9565b60405180910390fd5b600a8160ff16111561169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490612f79565b60405180910390fd5b6107d08160ff16600a546116b1919061309e565b11156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e990612e79565b60405180910390fd5b60005b8160ff168110156117315761171e33600a60008154611713906132eb565b919050819055611c21565b8080611729906132eb565b9150506116f5565b50600160078190555050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118a183610c12565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118f2826117ba565b611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890612db9565b60405180910390fd5b600061193c83610c12565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119ab57508373ffffffffffffffffffffffffffffffffffffffff16611993846107c4565b73ffffffffffffffffffffffffffffffffffffffff16145b806119bc57506119bb81856113b0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119e582610c12565b73ffffffffffffffffffffffffffffffffffffffff1614611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3290612ef9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290612d39565b60405180910390fd5b611ab6838383611f54565b611ac160008261182e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b11919061317f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b68919061309e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611c3b828260405180602001604052806000815250611f59565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d108484846119c5565b611d1c84848484611fb4565b611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5290612cd9565b60405180910390fd5b50505050565b6060600b8054611d7090613288565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9c90613288565b8015611de95780601f10611dbe57610100808354040283529160200191611de9565b820191906000526020600020905b815481529060010190602001808311611dcc57829003601f168201915b5050505050905090565b60606000821415611e3b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f4f565b600082905060005b60008214611e6d578080611e56906132eb565b915050600a82611e6691906130f4565b9150611e43565b60008167ffffffffffffffff811115611e8957611e88613421565b5b6040519080825280601f01601f191660200182016040528015611ebb5781602001600182028036833780820191505090505b5090505b60008514611f4857600182611ed4919061317f565b9150600a85611ee39190613334565b6030611eef919061309e565b60f81b818381518110611f0557611f046133f2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f4191906130f4565b9450611ebf565b8093505050505b919050565b505050565b611f63838361214b565b611f706000848484611fb4565b611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa690612cd9565b60405180910390fd5b505050565b6000611fd58473ffffffffffffffffffffffffffffffffffffffff1661173d565b1561213e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ffe611826565b8786866040518563ffffffff1660e01b81526004016120209493929190612c50565b602060405180830381600087803b15801561203a57600080fd5b505af192505050801561206b57506040513d601f19601f82011682018060405250810190612068919061274c565b60015b6120ee573d806000811461209b576040519150601f19603f3d011682016040523d82523d6000602084013e6120a0565b606091505b506000815114156120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90612cd9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612143565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290612e59565b60405180910390fd5b6121c4816117ba565b15612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb90612d19565b60405180910390fd5b61221060008383611f54565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612260919061309e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461232590613288565b90600052602060002090601f016020900481019282612347576000855561238e565b82601f1061236057805160ff191683800117855561238e565b8280016001018555821561238e579182015b8281111561238d578251825591602001919060010190612372565b5b50905061239b919061239f565b5090565b5b808211156123b85760008160009055506001016123a0565b5090565b60006123cf6123ca84612ff9565b612fd4565b9050828152602081018484840111156123eb576123ea613455565b5b6123f6848285613246565b509392505050565b600061241161240c8461302a565b612fd4565b90508281526020810184848401111561242d5761242c613455565b5b612438848285613246565b509392505050565b60008135905061244f81613a12565b92915050565b60008135905061246481613a29565b92915050565b60008135905061247981613a40565b92915050565b60008135905061248e81613a57565b92915050565b6000815190506124a381613a57565b92915050565b600082601f8301126124be576124bd613450565b5b81356124ce8482602086016123bc565b91505092915050565b600082601f8301126124ec576124eb613450565b5b81356124fc8482602086016123fe565b91505092915050565b60008135905061251481613a6e565b92915050565b60008135905061252981613a85565b92915050565b6000602082840312156125455761254461345f565b5b600061255384828501612440565b91505092915050565b6000602082840312156125725761257161345f565b5b600061258084828501612455565b91505092915050565b600080604083850312156125a05761259f61345f565b5b60006125ae85828601612440565b92505060206125bf85828601612440565b9150509250929050565b6000806000606084860312156125e2576125e161345f565b5b60006125f086828701612440565b935050602061260186828701612440565b925050604061261286828701612505565b9150509250925092565b600080600080608085870312156126365761263561345f565b5b600061264487828801612440565b945050602061265587828801612440565b935050604061266687828801612505565b925050606085013567ffffffffffffffff8111156126875761268661345a565b5b612693878288016124a9565b91505092959194509250565b600080604083850312156126b6576126b561345f565b5b60006126c485828601612440565b92505060206126d58582860161246a565b9150509250929050565b600080604083850312156126f6576126f561345f565b5b600061270485828601612440565b925050602061271585828601612505565b9150509250929050565b6000602082840312156127355761273461345f565b5b60006127438482850161247f565b91505092915050565b6000602082840312156127625761276161345f565b5b600061277084828501612494565b91505092915050565b60006020828403121561278f5761278e61345f565b5b600082013567ffffffffffffffff8111156127ad576127ac61345a565b5b6127b9848285016124d7565b91505092915050565b6000602082840312156127d8576127d761345f565b5b60006127e684828501612505565b91505092915050565b6000602082840312156128055761280461345f565b5b60006128138482850161251a565b91505092915050565b612825816131b3565b82525050565b612834816131d7565b82525050565b60006128458261305b565b61284f8185613071565b935061285f818560208601613255565b61286881613464565b840191505092915050565b600061287e82613066565b6128888185613082565b9350612898818560208601613255565b6128a181613464565b840191505092915050565b60006128b782613066565b6128c18185613093565b93506128d1818560208601613255565b80840191505092915050565b60006128ea603283613082565b91506128f582613475565b604082019050919050565b600061290d602683613082565b9150612918826134c4565b604082019050919050565b6000612930601c83613082565b915061293b82613513565b602082019050919050565b6000612953602483613082565b915061295e8261353c565b604082019050919050565b6000612976601983613082565b91506129818261358b565b602082019050919050565b6000612999601f83613082565b91506129a4826135b4565b602082019050919050565b60006129bc602383613082565b91506129c7826135dd565b604082019050919050565b60006129df602c83613082565b91506129ea8261362c565b604082019050919050565b6000612a02601a83613082565b9150612a0d8261367b565b602082019050919050565b6000612a25603883613082565b9150612a30826136a4565b604082019050919050565b6000612a48602a83613082565b9150612a53826136f3565b604082019050919050565b6000612a6b602983613082565b9150612a7682613742565b604082019050919050565b6000612a8e602083613082565b9150612a9982613791565b602082019050919050565b6000612ab1601383613082565b9150612abc826137ba565b602082019050919050565b6000612ad4602c83613082565b9150612adf826137e3565b604082019050919050565b6000612af7602083613082565b9150612b0282613832565b602082019050919050565b6000612b1a601383613082565b9150612b258261385b565b602082019050919050565b6000612b3d602983613082565b9150612b4882613884565b604082019050919050565b6000612b60602f83613082565b9150612b6b826138d3565b604082019050919050565b6000612b83602183613082565b9150612b8e82613922565b604082019050919050565b6000612ba6603183613082565b9150612bb182613971565b604082019050919050565b6000612bc9601983613082565b9150612bd4826139c0565b602082019050919050565b6000612bec601f83613082565b9150612bf7826139e9565b602082019050919050565b612c0b8161322f565b82525050565b6000612c1d82856128ac565b9150612c2982846128ac565b91508190509392505050565b6000602082019050612c4a600083018461281c565b92915050565b6000608082019050612c65600083018761281c565b612c72602083018661281c565b612c7f6040830185612c02565b8181036060830152612c91818461283a565b905095945050505050565b6000602082019050612cb1600083018461282b565b92915050565b60006020820190508181036000830152612cd18184612873565b905092915050565b60006020820190508181036000830152612cf2816128dd565b9050919050565b60006020820190508181036000830152612d1281612900565b9050919050565b60006020820190508181036000830152612d3281612923565b9050919050565b60006020820190508181036000830152612d5281612946565b9050919050565b60006020820190508181036000830152612d7281612969565b9050919050565b60006020820190508181036000830152612d928161298c565b9050919050565b60006020820190508181036000830152612db2816129af565b9050919050565b60006020820190508181036000830152612dd2816129d2565b9050919050565b60006020820190508181036000830152612df2816129f5565b9050919050565b60006020820190508181036000830152612e1281612a18565b9050919050565b60006020820190508181036000830152612e3281612a3b565b9050919050565b60006020820190508181036000830152612e5281612a5e565b9050919050565b60006020820190508181036000830152612e7281612a81565b9050919050565b60006020820190508181036000830152612e9281612aa4565b9050919050565b60006020820190508181036000830152612eb281612ac7565b9050919050565b60006020820190508181036000830152612ed281612aea565b9050919050565b60006020820190508181036000830152612ef281612b0d565b9050919050565b60006020820190508181036000830152612f1281612b30565b9050919050565b60006020820190508181036000830152612f3281612b53565b9050919050565b60006020820190508181036000830152612f5281612b76565b9050919050565b60006020820190508181036000830152612f7281612b99565b9050919050565b60006020820190508181036000830152612f9281612bbc565b9050919050565b60006020820190508181036000830152612fb281612bdf565b9050919050565b6000602082019050612fce6000830184612c02565b92915050565b6000612fde612fef565b9050612fea82826132ba565b919050565b6000604051905090565b600067ffffffffffffffff82111561301457613013613421565b5b61301d82613464565b9050602081019050919050565b600067ffffffffffffffff82111561304557613044613421565b5b61304e82613464565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006130a98261322f565b91506130b48361322f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130e9576130e8613365565b5b828201905092915050565b60006130ff8261322f565b915061310a8361322f565b92508261311a57613119613394565b5b828204905092915050565b60006131308261322f565b915061313b8361322f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561317457613173613365565b5b828202905092915050565b600061318a8261322f565b91506131958361322f565b9250828210156131a8576131a7613365565b5b828203905092915050565b60006131be8261320f565b9050919050565b60006131d08261320f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613273578082015181840152602081019050613258565b83811115613282576000848401525b50505050565b600060028204905060018216806132a057607f821691505b602082108114156132b4576132b36133c3565b5b50919050565b6132c382613464565b810181811067ffffffffffffffff821117156132e2576132e1613421565b5b80604052505050565b60006132f68261322f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561332957613328613365565b5b600182019050919050565b600061333f8261322f565b915061334a8361322f565b92508261335a57613359613394565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f536f6c64206f75742c20636865636b206f7574204f70656e5365612074686f2160008201527f203c330000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206d6f7265207468616e2030000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f206d6f72652066726565206d696e74732100000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f20636f6e74726163742062616c616e636500000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265203130206f72206c65737300000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613a1b816131b3565b8114613a2657600080fd5b50565b613a32816131c5565b8114613a3d57600080fd5b50565b613a49816131d7565b8114613a5457600080fd5b50565b613a60816131e3565b8114613a6b57600080fd5b50565b613a778161322f565b8114613a8257600080fd5b50565b613a8e81613239565b8114613a9957600080fd5b5056fea2646970667358221220e88e513ae6882e1fcf48cdb3d06bec20f9e9ee6386e71478c109595aa46a27b264736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007582d50756e6b730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055850554e4b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): X-Punks
Arg [1] : symbol_ (string): XPUNK
Arg [2] : baseURI_ (string):

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 582d50756e6b7300000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 5850554e4b000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

40340:2072:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22242:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23411:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25104:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24627:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41885:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26163:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40441:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26610:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40530:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41997:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42195:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23018:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40480:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40558:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40881:499;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22661:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36972:94;;;;;;;;;;;;;:::i;:::-;;40399:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36321:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23580:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25484:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26866:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23755:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25882:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41796:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37221:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41392:399;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22242:355;22389:4;22446:25;22431:40;;;:11;:40;;;;:105;;;;22503:33;22488:48;;;:11;:48;;;;22431:105;:158;;;;22553:36;22577:11;22553:23;:36::i;:::-;22431:158;22411:178;;22242:355;;;:::o;23411:100::-;23465:13;23498:5;23491:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23411:100;:::o;25104:308::-;25225:7;25272:16;25280:7;25272;:16::i;:::-;25250:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25380:15;:24;25396:7;25380:24;;;;;;;;;;;;;;;;;;;;;25373:31;;25104:308;;;:::o;24627:411::-;24708:13;24724:23;24739:7;24724:14;:23::i;:::-;24708:39;;24772:5;24766:11;;:2;:11;;;;24758:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24866:5;24850:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24875:37;24892:5;24899:12;:10;:12::i;:::-;24875:16;:37::i;:::-;24850:62;24828:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25009:21;25018:2;25022:7;25009:8;:21::i;:::-;24697:341;24627:411;;:::o;41885:104::-;36552:12;:10;:12::i;:::-;36541:23;;:7;:5;:7::i;:::-;:23;;;36533:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41968:13:::1;41955:10;:26;;;;41885:104:::0;:::o;26163:376::-;26372:41;26391:12;:10;:12::i;:::-;26405:7;26372:18;:41::i;:::-;26350:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26503:28;26513:4;26519:2;26523:7;26503:9;:28::i;:::-;26163:376;;;:::o;40441:32::-;;;;:::o;26610:185::-;26748:39;26765:4;26771:2;26775:7;26748:39;;;;;;;;;;;;:16;:39::i;:::-;26610:185;;;:::o;40530:21::-;;;;:::o;41997:190::-;36552:12;:10;:12::i;:::-;36541:23;;:7;:5;:7::i;:::-;:23;;;36533:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42102:1:::1;42078:21;:25;42070:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;42138:9;:18;;:41;42157:21;42138:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41997:190:::0;:::o;42195:98::-;36552:12;:10;:12::i;:::-;36541:23;;:7;:5;:7::i;:::-;:23;;;36533:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42277:8:::1;42267:7;:18;;;;;;;;;;;;:::i;:::-;;42195:98:::0;:::o;23018:326::-;23135:7;23160:13;23176:7;:16;23184:7;23176:16;;;;;;;;;;;;;;;;;;;;;23160:32;;23242:1;23225:19;;:5;:19;;;;23203:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;23331:5;23324:12;;;23018:326;;;:::o;40480:41::-;40519:2;40480:41;:::o;40558:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40881:499::-;39360:1;39956:7;;:19;;39948:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39360:1;40089:7;:18;;;;40965:1:::1;40956:6;:10;;;40948:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;41026:2;41016:6;:12;;;;41008:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;41098:6;41090:14;;:5;;:14;;;;:::i;:::-;41077:9;:27;41069:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41192:10;;41182:6;41173:15;;:6;;:15;;;;:::i;:::-;:29;;41151:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;41283:9;41278:95;41302:6;41298:10;;:1;:10;41278:95;;;41330:31;41340:10;41354:6;;41352:8;;;;;:::i;:::-;;;;;;;41330:9;:31::i;:::-;41310:3;;;;;:::i;:::-;;;;41278:95;;;;39316:1:::0;40268:7;:22;;;;40881:499;:::o;22661:295::-;22778:7;22842:1;22825:19;;:5;:19;;;;22803:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;22932:9;:16;22942:5;22932:16;;;;;;;;;;;;;;;;22925:23;;22661:295;;;:::o;36972:94::-;36552:12;:10;:12::i;:::-;36541:23;;:7;:5;:7::i;:::-;:23;;;36533:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37037:21:::1;37055:1;37037:9;:21::i;:::-;36972:94::o:0;40399:35::-;;;;:::o;36321:87::-;36367:7;36394:6;;;;;;;;;;;36387:13;;36321:87;:::o;23580:104::-;23636:13;23669:7;23662:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23580:104;:::o;25484:327::-;25631:12;:10;:12::i;:::-;25619:24;;:8;:24;;;;25611:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25731:8;25686:18;:32;25705:12;:10;:12::i;:::-;25686:32;;;;;;;;;;;;;;;:42;25719:8;25686:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25784:8;25755:48;;25770:12;:10;:12::i;:::-;25755:48;;;25794:8;25755:48;;;;;;:::i;:::-;;;;;;;;25484:327;;:::o;26866:365::-;27055:41;27074:12;:10;:12::i;:::-;27088:7;27055:18;:41::i;:::-;27033:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27184:39;27198:4;27204:2;27208:7;27217:5;27184:13;:39::i;:::-;26866:365;;;;:::o;23755:468::-;23873:13;23926:16;23934:7;23926;:16::i;:::-;23904:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;24030:21;24054:10;:8;:10::i;:::-;24030:34;;24119:1;24101:7;24095:21;:25;:120;;;;;;;;;;;;;;;;;24164:7;24173:18;:7;:16;:18::i;:::-;24147:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24095:120;24075:140;;;23755:468;;;:::o;25882:214::-;26024:4;26053:18;:25;26072:5;26053:25;;;;;;;;;;;;;;;:35;26079:8;26053:35;;;;;;;;;;;;;;;;;;;;;;;;;26046:42;;25882:214;;;;:::o;41796:84::-;36552:12;:10;:12::i;:::-;36541:23;;:7;:5;:7::i;:::-;:23;;;36533:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41866:9:::1;41858:5;:17;;;;41796:84:::0;:::o;37221:229::-;36552:12;:10;:12::i;:::-;36541:23;;:7;:5;:7::i;:::-;:23;;;36533:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37344:1:::1;37324:22;;:8;:22;;;;37302:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;37423:19;37433:8;37423:9;:19::i;:::-;37221:229:::0;:::o;41392:399::-;39360:1;39956:7;;:19;;39948:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39360:1;40089:7;:18;;;;41480:1:::1;41471:6;:10;;;41463:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;41541:2;41531:6;:12;;;;41523:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;41625:4;41615:6;41606:15;;:6;;:15;;;;:::i;:::-;:23;;41584:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;41694:9;41689:95;41713:6;41709:10;;:1;:10;41689:95;;;41741:31;41751:10;41765:6;;41763:8;;;;;:::i;:::-;;;;;;;41741:9;:31::i;:::-;41721:3;;;;;:::i;:::-;;;;41689:95;;;;39316:1:::0;40268:7;:22;;;;41392:399;:::o;9275:387::-;9335:4;9543:12;9610:7;9598:20;9590:28;;9653:1;9646:4;:8;9639:15;;;9275:387;;;:::o;20735:207::-;20865:4;20909:25;20894:40;;;:11;:40;;;;20887:47;;20735:207;;;:::o;28778:127::-;28843:4;28895:1;28867:30;;:7;:16;28875:7;28867:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28860:37;;28778:127;;;:::o;17673:98::-;17726:7;17753:10;17746:17;;17673:98;:::o;32901:174::-;33003:2;32976:15;:24;32992:7;32976:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33059:7;33055:2;33021:46;;33030:23;33045:7;33030:14;:23::i;:::-;33021:46;;;;;;;;;;;;32901:174;;:::o;29072:452::-;29201:4;29245:16;29253:7;29245;:16::i;:::-;29223:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29344:13;29360:23;29375:7;29360:14;:23::i;:::-;29344:39;;29413:5;29402:16;;:7;:16;;;:64;;;;29459:7;29435:31;;:20;29447:7;29435:11;:20::i;:::-;:31;;;29402:64;:113;;;;29483:32;29500:5;29507:7;29483:16;:32::i;:::-;29402:113;29394:122;;;29072:452;;;;:::o;32168:615::-;32341:4;32314:31;;:23;32329:7;32314:14;:23::i;:::-;:31;;;32292:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;32447:1;32433:16;;:2;:16;;;;32425:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32503:39;32524:4;32530:2;32534:7;32503:20;:39::i;:::-;32607:29;32624:1;32628:7;32607:8;:29::i;:::-;32668:1;32649:9;:15;32659:4;32649:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32697:1;32680:9;:13;32690:2;32680:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32728:2;32709:7;:16;32717:7;32709:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32767:7;32763:2;32748:27;;32757:4;32748:27;;;;;;;;;;;;32168:615;;;:::o;29866:110::-;29942:26;29952:2;29956:7;29942:26;;;;;;;;;;;;:9;:26::i;:::-;29866:110;;:::o;37458:173::-;37514:16;37533:6;;;;;;;;;;;37514:25;;37559:8;37550:6;;:17;;;;;;;;;;;;;;;;;;37614:8;37583:40;;37604:8;37583:40;;;;;;;;;;;;37503:128;37458:173;:::o;28113:352::-;28270:28;28280:4;28286:2;28290:7;28270:9;:28::i;:::-;28331:48;28354:4;28360:2;28364:7;28373:5;28331:22;:48::i;:::-;28309:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;28113:352;;;;:::o;42301:108::-;42361:13;42394:7;42387:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42301:108;:::o;18173:723::-;18229:13;18459:1;18450:5;:10;18446:53;;;18477:10;;;;;;;;;;;;;;;;;;;;;18446:53;18509:12;18524:5;18509:20;;18540:14;18565:78;18580:1;18572:4;:9;18565:78;;18598:8;;;;;:::i;:::-;;;;18629:2;18621:10;;;;;:::i;:::-;;;18565:78;;;18653:19;18685:6;18675:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18653:39;;18703:154;18719:1;18710:5;:10;18703:154;;18747:1;18737:11;;;;;:::i;:::-;;;18814:2;18806:5;:10;;;;:::i;:::-;18793:2;:24;;;;:::i;:::-;18780:39;;18763:6;18770;18763:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18843:2;18834:11;;;;;:::i;:::-;;;18703:154;;;18881:6;18867:21;;;;;18173:723;;;;:::o;35192:126::-;;;;:::o;30203:321::-;30333:18;30339:2;30343:7;30333:5;:18::i;:::-;30384:54;30415:1;30419:2;30423:7;30432:5;30384:22;:54::i;:::-;30362:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30203:321;;;:::o;33640:980::-;33795:4;33816:15;:2;:13;;;:15::i;:::-;33812:801;;;33885:2;33869:36;;;33928:12;:10;:12::i;:::-;33963:4;33990:7;34020:5;33869:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33848:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34244:1;34227:6;:13;:18;34223:320;;;34270:108;;;;;;;;;;:::i;:::-;;;;;;;;34223:320;34493:6;34487:13;34478:6;34474:2;34470:15;34463:38;33848:710;34118:41;;;34108:51;;;:6;:51;;;;34101:58;;;;;33812:801;34597:4;34590:11;;33640:980;;;;;;;:::o;30860:382::-;30954:1;30940:16;;:2;:16;;;;30932:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31013:16;31021:7;31013;:16::i;:::-;31012:17;31004:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31075:45;31104:1;31108:2;31112:7;31075:20;:45::i;:::-;31150:1;31133:9;:13;31143:2;31133:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31181:2;31162:7;:16;31170:7;31162:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31226:7;31222:2;31201:33;;31218:1;31201:33;;;;;;;;;;;;30860:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:155::-;1040:5;1078:6;1065:20;1056:29;;1094:41;1129:5;1094:41;:::i;:::-;986:155;;;;:::o;1147:133::-;1190:5;1228:6;1215:20;1206:29;;1244:30;1268:5;1244:30;:::i;:::-;1147:133;;;;:::o;1286:137::-;1331:5;1369:6;1356:20;1347:29;;1385:32;1411:5;1385:32;:::i;:::-;1286:137;;;;:::o;1429:141::-;1485:5;1516:6;1510:13;1501:22;;1532:32;1558:5;1532:32;:::i;:::-;1429:141;;;;:::o;1589:338::-;1644:5;1693:3;1686:4;1678:6;1674:17;1670:27;1660:122;;1701:79;;:::i;:::-;1660:122;1818:6;1805:20;1843:78;1917:3;1909:6;1902:4;1894:6;1890:17;1843:78;:::i;:::-;1834:87;;1650:277;1589:338;;;;:::o;1947:340::-;2003:5;2052:3;2045:4;2037:6;2033:17;2029:27;2019:122;;2060:79;;:::i;:::-;2019:122;2177:6;2164:20;2202:79;2277:3;2269:6;2262:4;2254:6;2250:17;2202:79;:::i;:::-;2193:88;;2009:278;1947:340;;;;:::o;2293:139::-;2339:5;2377:6;2364:20;2355:29;;2393:33;2420:5;2393:33;:::i;:::-;2293:139;;;;:::o;2438:135::-;2482:5;2520:6;2507:20;2498:29;;2536:31;2561:5;2536:31;:::i;:::-;2438:135;;;;:::o;2579:329::-;2638:6;2687:2;2675:9;2666:7;2662:23;2658:32;2655:119;;;2693:79;;:::i;:::-;2655:119;2813:1;2838:53;2883:7;2874:6;2863:9;2859:22;2838:53;:::i;:::-;2828:63;;2784:117;2579:329;;;;:::o;2914:345::-;2981:6;3030:2;3018:9;3009:7;3005:23;3001:32;2998:119;;;3036:79;;:::i;:::-;2998:119;3156:1;3181:61;3234:7;3225:6;3214:9;3210:22;3181:61;:::i;:::-;3171:71;;3127:125;2914:345;;;;:::o;3265:474::-;3333:6;3341;3390:2;3378:9;3369:7;3365:23;3361:32;3358:119;;;3396:79;;:::i;:::-;3358:119;3516:1;3541:53;3586:7;3577:6;3566:9;3562:22;3541:53;:::i;:::-;3531:63;;3487:117;3643:2;3669:53;3714:7;3705:6;3694:9;3690:22;3669:53;:::i;:::-;3659:63;;3614:118;3265:474;;;;;:::o;3745:619::-;3822:6;3830;3838;3887:2;3875:9;3866:7;3862:23;3858:32;3855:119;;;3893:79;;:::i;:::-;3855:119;4013:1;4038:53;4083:7;4074:6;4063:9;4059:22;4038:53;:::i;:::-;4028:63;;3984:117;4140:2;4166:53;4211:7;4202:6;4191:9;4187:22;4166:53;:::i;:::-;4156:63;;4111:118;4268:2;4294:53;4339:7;4330:6;4319:9;4315:22;4294:53;:::i;:::-;4284:63;;4239:118;3745:619;;;;;:::o;4370:943::-;4465:6;4473;4481;4489;4538:3;4526:9;4517:7;4513:23;4509:33;4506:120;;;4545:79;;:::i;:::-;4506:120;4665:1;4690:53;4735:7;4726:6;4715:9;4711:22;4690:53;:::i;:::-;4680:63;;4636:117;4792:2;4818:53;4863:7;4854:6;4843:9;4839:22;4818:53;:::i;:::-;4808:63;;4763:118;4920:2;4946:53;4991:7;4982:6;4971:9;4967:22;4946:53;:::i;:::-;4936:63;;4891:118;5076:2;5065:9;5061:18;5048:32;5107:18;5099:6;5096:30;5093:117;;;5129:79;;:::i;:::-;5093:117;5234:62;5288:7;5279:6;5268:9;5264:22;5234:62;:::i;:::-;5224:72;;5019:287;4370:943;;;;;;;:::o;5319:468::-;5384:6;5392;5441:2;5429:9;5420:7;5416:23;5412:32;5409:119;;;5447:79;;:::i;:::-;5409:119;5567:1;5592:53;5637:7;5628:6;5617:9;5613:22;5592:53;:::i;:::-;5582:63;;5538:117;5694:2;5720:50;5762:7;5753:6;5742:9;5738:22;5720:50;:::i;:::-;5710:60;;5665:115;5319:468;;;;;:::o;5793:474::-;5861:6;5869;5918:2;5906:9;5897:7;5893:23;5889:32;5886:119;;;5924:79;;:::i;:::-;5886:119;6044:1;6069:53;6114:7;6105:6;6094:9;6090:22;6069:53;:::i;:::-;6059:63;;6015:117;6171:2;6197:53;6242:7;6233:6;6222:9;6218:22;6197:53;:::i;:::-;6187:63;;6142:118;5793:474;;;;;:::o;6273:327::-;6331:6;6380:2;6368:9;6359:7;6355:23;6351:32;6348:119;;;6386:79;;:::i;:::-;6348:119;6506:1;6531:52;6575:7;6566:6;6555:9;6551:22;6531:52;:::i;:::-;6521:62;;6477:116;6273:327;;;;:::o;6606:349::-;6675:6;6724:2;6712:9;6703:7;6699:23;6695:32;6692:119;;;6730:79;;:::i;:::-;6692:119;6850:1;6875:63;6930:7;6921:6;6910:9;6906:22;6875:63;:::i;:::-;6865:73;;6821:127;6606:349;;;;:::o;6961:509::-;7030:6;7079:2;7067:9;7058:7;7054:23;7050:32;7047:119;;;7085:79;;:::i;:::-;7047:119;7233:1;7222:9;7218:17;7205:31;7263:18;7255:6;7252:30;7249:117;;;7285:79;;:::i;:::-;7249:117;7390:63;7445:7;7436:6;7425:9;7421:22;7390:63;:::i;:::-;7380:73;;7176:287;6961:509;;;;:::o;7476:329::-;7535:6;7584:2;7572:9;7563:7;7559:23;7555:32;7552:119;;;7590:79;;:::i;:::-;7552:119;7710:1;7735:53;7780:7;7771:6;7760:9;7756:22;7735:53;:::i;:::-;7725:63;;7681:117;7476:329;;;;:::o;7811:325::-;7868:6;7917:2;7905:9;7896:7;7892:23;7888:32;7885:119;;;7923:79;;:::i;:::-;7885:119;8043:1;8068:51;8111:7;8102:6;8091:9;8087:22;8068:51;:::i;:::-;8058:61;;8014:115;7811:325;;;;:::o;8142:118::-;8229:24;8247:5;8229:24;:::i;:::-;8224:3;8217:37;8142:118;;:::o;8266:109::-;8347:21;8362:5;8347:21;:::i;:::-;8342:3;8335:34;8266:109;;:::o;8381:360::-;8467:3;8495:38;8527:5;8495:38;:::i;:::-;8549:70;8612:6;8607:3;8549:70;:::i;:::-;8542:77;;8628:52;8673:6;8668:3;8661:4;8654:5;8650:16;8628:52;:::i;:::-;8705:29;8727:6;8705:29;:::i;:::-;8700:3;8696:39;8689:46;;8471:270;8381:360;;;;:::o;8747:364::-;8835:3;8863:39;8896:5;8863:39;:::i;:::-;8918:71;8982:6;8977:3;8918:71;:::i;:::-;8911:78;;8998:52;9043:6;9038:3;9031:4;9024:5;9020:16;8998:52;:::i;:::-;9075:29;9097:6;9075:29;:::i;:::-;9070:3;9066:39;9059:46;;8839:272;8747:364;;;;:::o;9117:377::-;9223:3;9251:39;9284:5;9251:39;:::i;:::-;9306:89;9388:6;9383:3;9306:89;:::i;:::-;9299:96;;9404:52;9449:6;9444:3;9437:4;9430:5;9426:16;9404:52;:::i;:::-;9481:6;9476:3;9472:16;9465:23;;9227:267;9117:377;;;;:::o;9500:366::-;9642:3;9663:67;9727:2;9722:3;9663:67;:::i;:::-;9656:74;;9739:93;9828:3;9739:93;:::i;:::-;9857:2;9852:3;9848:12;9841:19;;9500:366;;;:::o;9872:::-;10014:3;10035:67;10099:2;10094:3;10035:67;:::i;:::-;10028:74;;10111:93;10200:3;10111:93;:::i;:::-;10229:2;10224:3;10220:12;10213:19;;9872:366;;;:::o;10244:::-;10386:3;10407:67;10471:2;10466:3;10407:67;:::i;:::-;10400:74;;10483:93;10572:3;10483:93;:::i;:::-;10601:2;10596:3;10592:12;10585:19;;10244:366;;;:::o;10616:::-;10758:3;10779:67;10843:2;10838:3;10779:67;:::i;:::-;10772:74;;10855:93;10944:3;10855:93;:::i;:::-;10973:2;10968:3;10964:12;10957:19;;10616:366;;;:::o;10988:::-;11130:3;11151:67;11215:2;11210:3;11151:67;:::i;:::-;11144:74;;11227:93;11316:3;11227:93;:::i;:::-;11345:2;11340:3;11336:12;11329:19;;10988:366;;;:::o;11360:::-;11502:3;11523:67;11587:2;11582:3;11523:67;:::i;:::-;11516:74;;11599:93;11688:3;11599:93;:::i;:::-;11717:2;11712:3;11708:12;11701:19;;11360:366;;;:::o;11732:::-;11874:3;11895:67;11959:2;11954:3;11895:67;:::i;:::-;11888:74;;11971:93;12060:3;11971:93;:::i;:::-;12089:2;12084:3;12080:12;12073:19;;11732:366;;;:::o;12104:::-;12246:3;12267:67;12331:2;12326:3;12267:67;:::i;:::-;12260:74;;12343:93;12432:3;12343:93;:::i;:::-;12461:2;12456:3;12452:12;12445:19;;12104:366;;;:::o;12476:::-;12618:3;12639:67;12703:2;12698:3;12639:67;:::i;:::-;12632:74;;12715:93;12804:3;12715:93;:::i;:::-;12833:2;12828:3;12824:12;12817:19;;12476:366;;;:::o;12848:::-;12990:3;13011:67;13075:2;13070:3;13011:67;:::i;:::-;13004:74;;13087:93;13176:3;13087:93;:::i;:::-;13205:2;13200:3;13196:12;13189:19;;12848:366;;;:::o;13220:::-;13362:3;13383:67;13447:2;13442:3;13383:67;:::i;:::-;13376:74;;13459:93;13548:3;13459:93;:::i;:::-;13577:2;13572:3;13568:12;13561:19;;13220:366;;;:::o;13592:::-;13734:3;13755:67;13819:2;13814:3;13755:67;:::i;:::-;13748:74;;13831:93;13920:3;13831:93;:::i;:::-;13949:2;13944:3;13940:12;13933:19;;13592:366;;;:::o;13964:::-;14106:3;14127:67;14191:2;14186:3;14127:67;:::i;:::-;14120:74;;14203:93;14292:3;14203:93;:::i;:::-;14321:2;14316:3;14312:12;14305:19;;13964:366;;;:::o;14336:::-;14478:3;14499:67;14563:2;14558:3;14499:67;:::i;:::-;14492:74;;14575:93;14664:3;14575:93;:::i;:::-;14693:2;14688:3;14684:12;14677:19;;14336:366;;;:::o;14708:::-;14850:3;14871:67;14935:2;14930:3;14871:67;:::i;:::-;14864:74;;14947:93;15036:3;14947:93;:::i;:::-;15065:2;15060:3;15056:12;15049:19;;14708:366;;;:::o;15080:::-;15222:3;15243:67;15307:2;15302:3;15243:67;:::i;:::-;15236:74;;15319:93;15408:3;15319:93;:::i;:::-;15437:2;15432:3;15428:12;15421:19;;15080:366;;;:::o;15452:::-;15594:3;15615:67;15679:2;15674:3;15615:67;:::i;:::-;15608:74;;15691:93;15780:3;15691:93;:::i;:::-;15809:2;15804:3;15800:12;15793:19;;15452:366;;;:::o;15824:::-;15966:3;15987:67;16051:2;16046:3;15987:67;:::i;:::-;15980:74;;16063:93;16152:3;16063:93;:::i;:::-;16181:2;16176:3;16172:12;16165:19;;15824:366;;;:::o;16196:::-;16338:3;16359:67;16423:2;16418:3;16359:67;:::i;:::-;16352:74;;16435:93;16524:3;16435:93;:::i;:::-;16553:2;16548:3;16544:12;16537:19;;16196:366;;;:::o;16568:::-;16710:3;16731:67;16795:2;16790:3;16731:67;:::i;:::-;16724:74;;16807:93;16896:3;16807:93;:::i;:::-;16925:2;16920:3;16916:12;16909:19;;16568:366;;;:::o;16940:::-;17082:3;17103:67;17167:2;17162:3;17103:67;:::i;:::-;17096:74;;17179:93;17268:3;17179:93;:::i;:::-;17297:2;17292:3;17288:12;17281:19;;16940:366;;;:::o;17312:::-;17454:3;17475:67;17539:2;17534:3;17475:67;:::i;:::-;17468:74;;17551:93;17640:3;17551:93;:::i;:::-;17669:2;17664:3;17660:12;17653:19;;17312:366;;;:::o;17684:::-;17826:3;17847:67;17911:2;17906:3;17847:67;:::i;:::-;17840:74;;17923:93;18012:3;17923:93;:::i;:::-;18041:2;18036:3;18032:12;18025:19;;17684:366;;;:::o;18056:118::-;18143:24;18161:5;18143:24;:::i;:::-;18138:3;18131:37;18056:118;;:::o;18180:435::-;18360:3;18382:95;18473:3;18464:6;18382:95;:::i;:::-;18375:102;;18494:95;18585:3;18576:6;18494:95;:::i;:::-;18487:102;;18606:3;18599:10;;18180:435;;;;;:::o;18621:222::-;18714:4;18752:2;18741:9;18737:18;18729:26;;18765:71;18833:1;18822:9;18818:17;18809:6;18765:71;:::i;:::-;18621:222;;;;:::o;18849:640::-;19044:4;19082:3;19071:9;19067:19;19059:27;;19096:71;19164:1;19153:9;19149:17;19140:6;19096:71;:::i;:::-;19177:72;19245:2;19234:9;19230:18;19221:6;19177:72;:::i;:::-;19259;19327:2;19316:9;19312:18;19303:6;19259:72;:::i;:::-;19378:9;19372:4;19368:20;19363:2;19352:9;19348:18;19341:48;19406:76;19477:4;19468:6;19406:76;:::i;:::-;19398:84;;18849:640;;;;;;;:::o;19495:210::-;19582:4;19620:2;19609:9;19605:18;19597:26;;19633:65;19695:1;19684:9;19680:17;19671:6;19633:65;:::i;:::-;19495:210;;;;:::o;19711:313::-;19824:4;19862:2;19851:9;19847:18;19839:26;;19911:9;19905:4;19901:20;19897:1;19886:9;19882:17;19875:47;19939:78;20012:4;20003:6;19939:78;:::i;:::-;19931:86;;19711:313;;;;:::o;20030:419::-;20196:4;20234:2;20223:9;20219:18;20211:26;;20283:9;20277:4;20273:20;20269:1;20258:9;20254:17;20247:47;20311:131;20437:4;20311:131;:::i;:::-;20303:139;;20030:419;;;:::o;20455:::-;20621:4;20659:2;20648:9;20644:18;20636:26;;20708:9;20702:4;20698:20;20694:1;20683:9;20679:17;20672:47;20736:131;20862:4;20736:131;:::i;:::-;20728:139;;20455:419;;;:::o;20880:::-;21046:4;21084:2;21073:9;21069:18;21061:26;;21133:9;21127:4;21123:20;21119:1;21108:9;21104:17;21097:47;21161:131;21287:4;21161:131;:::i;:::-;21153:139;;20880:419;;;:::o;21305:::-;21471:4;21509:2;21498:9;21494:18;21486:26;;21558:9;21552:4;21548:20;21544:1;21533:9;21529:17;21522:47;21586:131;21712:4;21586:131;:::i;:::-;21578:139;;21305:419;;;:::o;21730:::-;21896:4;21934:2;21923:9;21919:18;21911:26;;21983:9;21977:4;21973:20;21969:1;21958:9;21954:17;21947:47;22011:131;22137:4;22011:131;:::i;:::-;22003:139;;21730:419;;;:::o;22155:::-;22321:4;22359:2;22348:9;22344:18;22336:26;;22408:9;22402:4;22398:20;22394:1;22383:9;22379:17;22372:47;22436:131;22562:4;22436:131;:::i;:::-;22428:139;;22155:419;;;:::o;22580:::-;22746:4;22784:2;22773:9;22769:18;22761:26;;22833:9;22827:4;22823:20;22819:1;22808:9;22804:17;22797:47;22861:131;22987:4;22861:131;:::i;:::-;22853:139;;22580:419;;;:::o;23005:::-;23171:4;23209:2;23198:9;23194:18;23186:26;;23258:9;23252:4;23248:20;23244:1;23233:9;23229:17;23222:47;23286:131;23412:4;23286:131;:::i;:::-;23278:139;;23005:419;;;:::o;23430:::-;23596:4;23634:2;23623:9;23619:18;23611:26;;23683:9;23677:4;23673:20;23669:1;23658:9;23654:17;23647:47;23711:131;23837:4;23711:131;:::i;:::-;23703:139;;23430:419;;;:::o;23855:::-;24021:4;24059:2;24048:9;24044:18;24036:26;;24108:9;24102:4;24098:20;24094:1;24083:9;24079:17;24072:47;24136:131;24262:4;24136:131;:::i;:::-;24128:139;;23855:419;;;:::o;24280:::-;24446:4;24484:2;24473:9;24469:18;24461:26;;24533:9;24527:4;24523:20;24519:1;24508:9;24504:17;24497:47;24561:131;24687:4;24561:131;:::i;:::-;24553:139;;24280:419;;;:::o;24705:::-;24871:4;24909:2;24898:9;24894:18;24886:26;;24958:9;24952:4;24948:20;24944:1;24933:9;24929:17;24922:47;24986:131;25112:4;24986:131;:::i;:::-;24978:139;;24705:419;;;:::o;25130:::-;25296:4;25334:2;25323:9;25319:18;25311:26;;25383:9;25377:4;25373:20;25369:1;25358:9;25354:17;25347:47;25411:131;25537:4;25411:131;:::i;:::-;25403:139;;25130:419;;;:::o;25555:::-;25721:4;25759:2;25748:9;25744:18;25736:26;;25808:9;25802:4;25798:20;25794:1;25783:9;25779:17;25772:47;25836:131;25962:4;25836:131;:::i;:::-;25828:139;;25555:419;;;:::o;25980:::-;26146:4;26184:2;26173:9;26169:18;26161:26;;26233:9;26227:4;26223:20;26219:1;26208:9;26204:17;26197:47;26261:131;26387:4;26261:131;:::i;:::-;26253:139;;25980:419;;;:::o;26405:::-;26571:4;26609:2;26598:9;26594:18;26586:26;;26658:9;26652:4;26648:20;26644:1;26633:9;26629:17;26622:47;26686:131;26812:4;26686:131;:::i;:::-;26678:139;;26405:419;;;:::o;26830:::-;26996:4;27034:2;27023:9;27019:18;27011:26;;27083:9;27077:4;27073:20;27069:1;27058:9;27054:17;27047:47;27111:131;27237:4;27111:131;:::i;:::-;27103:139;;26830:419;;;:::o;27255:::-;27421:4;27459:2;27448:9;27444:18;27436:26;;27508:9;27502:4;27498:20;27494:1;27483:9;27479:17;27472:47;27536:131;27662:4;27536:131;:::i;:::-;27528:139;;27255:419;;;:::o;27680:::-;27846:4;27884:2;27873:9;27869:18;27861:26;;27933:9;27927:4;27923:20;27919:1;27908:9;27904:17;27897:47;27961:131;28087:4;27961:131;:::i;:::-;27953:139;;27680:419;;;:::o;28105:::-;28271:4;28309:2;28298:9;28294:18;28286:26;;28358:9;28352:4;28348:20;28344:1;28333:9;28329:17;28322:47;28386:131;28512:4;28386:131;:::i;:::-;28378:139;;28105:419;;;:::o;28530:::-;28696:4;28734:2;28723:9;28719:18;28711:26;;28783:9;28777:4;28773:20;28769:1;28758:9;28754:17;28747:47;28811:131;28937:4;28811:131;:::i;:::-;28803:139;;28530:419;;;:::o;28955:::-;29121:4;29159:2;29148:9;29144:18;29136:26;;29208:9;29202:4;29198:20;29194:1;29183:9;29179:17;29172:47;29236:131;29362:4;29236:131;:::i;:::-;29228:139;;28955:419;;;:::o;29380:::-;29546:4;29584:2;29573:9;29569:18;29561:26;;29633:9;29627:4;29623:20;29619:1;29608:9;29604:17;29597:47;29661:131;29787:4;29661:131;:::i;:::-;29653:139;;29380:419;;;:::o;29805:222::-;29898:4;29936:2;29925:9;29921:18;29913:26;;29949:71;30017:1;30006:9;30002:17;29993:6;29949:71;:::i;:::-;29805:222;;;;:::o;30033:129::-;30067:6;30094:20;;:::i;:::-;30084:30;;30123:33;30151:4;30143:6;30123:33;:::i;:::-;30033:129;;;:::o;30168:75::-;30201:6;30234:2;30228:9;30218:19;;30168:75;:::o;30249:307::-;30310:4;30400:18;30392:6;30389:30;30386:56;;;30422:18;;:::i;:::-;30386:56;30460:29;30482:6;30460:29;:::i;:::-;30452:37;;30544:4;30538;30534:15;30526:23;;30249:307;;;:::o;30562:308::-;30624:4;30714:18;30706:6;30703:30;30700:56;;;30736:18;;:::i;:::-;30700:56;30774:29;30796:6;30774:29;:::i;:::-;30766:37;;30858:4;30852;30848:15;30840:23;;30562:308;;;:::o;30876:98::-;30927:6;30961:5;30955:12;30945:22;;30876:98;;;:::o;30980:99::-;31032:6;31066:5;31060:12;31050:22;;30980:99;;;:::o;31085:168::-;31168:11;31202:6;31197:3;31190:19;31242:4;31237:3;31233:14;31218:29;;31085:168;;;;:::o;31259:169::-;31343:11;31377:6;31372:3;31365:19;31417:4;31412:3;31408:14;31393:29;;31259:169;;;;:::o;31434:148::-;31536:11;31573:3;31558:18;;31434:148;;;;:::o;31588:305::-;31628:3;31647:20;31665:1;31647:20;:::i;:::-;31642:25;;31681:20;31699:1;31681:20;:::i;:::-;31676:25;;31835:1;31767:66;31763:74;31760:1;31757:81;31754:107;;;31841:18;;:::i;:::-;31754:107;31885:1;31882;31878:9;31871:16;;31588:305;;;;:::o;31899:185::-;31939:1;31956:20;31974:1;31956:20;:::i;:::-;31951:25;;31990:20;32008:1;31990:20;:::i;:::-;31985:25;;32029:1;32019:35;;32034:18;;:::i;:::-;32019:35;32076:1;32073;32069:9;32064:14;;31899:185;;;;:::o;32090:348::-;32130:7;32153:20;32171:1;32153:20;:::i;:::-;32148:25;;32187:20;32205:1;32187:20;:::i;:::-;32182:25;;32375:1;32307:66;32303:74;32300:1;32297:81;32292:1;32285:9;32278:17;32274:105;32271:131;;;32382:18;;:::i;:::-;32271:131;32430:1;32427;32423:9;32412:20;;32090:348;;;;:::o;32444:191::-;32484:4;32504:20;32522:1;32504:20;:::i;:::-;32499:25;;32538:20;32556:1;32538:20;:::i;:::-;32533:25;;32577:1;32574;32571:8;32568:34;;;32582:18;;:::i;:::-;32568:34;32627:1;32624;32620:9;32612:17;;32444:191;;;;:::o;32641:96::-;32678:7;32707:24;32725:5;32707:24;:::i;:::-;32696:35;;32641:96;;;:::o;32743:104::-;32788:7;32817:24;32835:5;32817:24;:::i;:::-;32806:35;;32743:104;;;:::o;32853:90::-;32887:7;32930:5;32923:13;32916:21;32905:32;;32853:90;;;:::o;32949:149::-;32985:7;33025:66;33018:5;33014:78;33003:89;;32949:149;;;:::o;33104:126::-;33141:7;33181:42;33174:5;33170:54;33159:65;;33104:126;;;:::o;33236:77::-;33273:7;33302:5;33291:16;;33236:77;;;:::o;33319:86::-;33354:7;33394:4;33387:5;33383:16;33372:27;;33319:86;;;:::o;33411:154::-;33495:6;33490:3;33485;33472:30;33557:1;33548:6;33543:3;33539:16;33532:27;33411:154;;;:::o;33571:307::-;33639:1;33649:113;33663:6;33660:1;33657:13;33649:113;;;33748:1;33743:3;33739:11;33733:18;33729:1;33724:3;33720:11;33713:39;33685:2;33682:1;33678:10;33673:15;;33649:113;;;33780:6;33777:1;33774:13;33771:101;;;33860:1;33851:6;33846:3;33842:16;33835:27;33771:101;33620:258;33571:307;;;:::o;33884:320::-;33928:6;33965:1;33959:4;33955:12;33945:22;;34012:1;34006:4;34002:12;34033:18;34023:81;;34089:4;34081:6;34077:17;34067:27;;34023:81;34151:2;34143:6;34140:14;34120:18;34117:38;34114:84;;;34170:18;;:::i;:::-;34114:84;33935:269;33884:320;;;:::o;34210:281::-;34293:27;34315:4;34293:27;:::i;:::-;34285:6;34281:40;34423:6;34411:10;34408:22;34387:18;34375:10;34372:34;34369:62;34366:88;;;34434:18;;:::i;:::-;34366:88;34474:10;34470:2;34463:22;34253:238;34210:281;;:::o;34497:233::-;34536:3;34559:24;34577:5;34559:24;:::i;:::-;34550:33;;34605:66;34598:5;34595:77;34592:103;;;34675:18;;:::i;:::-;34592:103;34722:1;34715:5;34711:13;34704:20;;34497:233;;;:::o;34736:176::-;34768:1;34785:20;34803:1;34785:20;:::i;:::-;34780:25;;34819:20;34837:1;34819:20;:::i;:::-;34814:25;;34858:1;34848:35;;34863:18;;:::i;:::-;34848:35;34904:1;34901;34897:9;34892:14;;34736:176;;;;:::o;34918:180::-;34966:77;34963:1;34956:88;35063:4;35060:1;35053:15;35087:4;35084:1;35077:15;35104:180;35152:77;35149:1;35142:88;35249:4;35246:1;35239:15;35273:4;35270:1;35263:15;35290:180;35338:77;35335:1;35328:88;35435:4;35432:1;35425:15;35459:4;35456:1;35449:15;35476:180;35524:77;35521:1;35514:88;35621:4;35618:1;35611:15;35645:4;35642:1;35635:15;35662:180;35710:77;35707:1;35700:88;35807:4;35804:1;35797:15;35831:4;35828:1;35821:15;35848:117;35957:1;35954;35947:12;35971:117;36080:1;36077;36070:12;36094:117;36203:1;36200;36193:12;36217:117;36326:1;36323;36316:12;36340:102;36381:6;36432:2;36428:7;36423:2;36416:5;36412:14;36408:28;36398:38;;36340:102;;;:::o;36448:237::-;36588:34;36584:1;36576:6;36572:14;36565:58;36657:20;36652:2;36644:6;36640:15;36633:45;36448:237;:::o;36691:225::-;36831:34;36827:1;36819:6;36815:14;36808:58;36900:8;36895:2;36887:6;36883:15;36876:33;36691:225;:::o;36922:178::-;37062:30;37058:1;37050:6;37046:14;37039:54;36922:178;:::o;37106:223::-;37246:34;37242:1;37234:6;37230:14;37223:58;37315:6;37310:2;37302:6;37298:15;37291:31;37106:223;:::o;37335:175::-;37475:27;37471:1;37463:6;37459:14;37452:51;37335:175;:::o;37516:181::-;37656:33;37652:1;37644:6;37640:14;37633:57;37516:181;:::o;37703:222::-;37843:34;37839:1;37831:6;37827:14;37820:58;37912:5;37907:2;37899:6;37895:15;37888:30;37703:222;:::o;37931:231::-;38071:34;38067:1;38059:6;38055:14;38048:58;38140:14;38135:2;38127:6;38123:15;38116:39;37931:231;:::o;38168:176::-;38308:28;38304:1;38296:6;38292:14;38285:52;38168:176;:::o;38350:243::-;38490:34;38486:1;38478:6;38474:14;38467:58;38559:26;38554:2;38546:6;38542:15;38535:51;38350:243;:::o;38599:229::-;38739:34;38735:1;38727:6;38723:14;38716:58;38808:12;38803:2;38795:6;38791:15;38784:37;38599:229;:::o;38834:228::-;38974:34;38970:1;38962:6;38958:14;38951:58;39043:11;39038:2;39030:6;39026:15;39019:36;38834:228;:::o;39068:182::-;39208:34;39204:1;39196:6;39192:14;39185:58;39068:182;:::o;39256:169::-;39396:21;39392:1;39384:6;39380:14;39373:45;39256:169;:::o;39431:231::-;39571:34;39567:1;39559:6;39555:14;39548:58;39640:14;39635:2;39627:6;39623:15;39616:39;39431:231;:::o;39668:182::-;39808:34;39804:1;39796:6;39792:14;39785:58;39668:182;:::o;39856:169::-;39996:21;39992:1;39984:6;39980:14;39973:45;39856:169;:::o;40031:228::-;40171:34;40167:1;40159:6;40155:14;40148:58;40240:11;40235:2;40227:6;40223:15;40216:36;40031:228;:::o;40265:234::-;40405:34;40401:1;40393:6;40389:14;40382:58;40474:17;40469:2;40461:6;40457:15;40450:42;40265:234;:::o;40505:220::-;40645:34;40641:1;40633:6;40629:14;40622:58;40714:3;40709:2;40701:6;40697:15;40690:28;40505:220;:::o;40731:236::-;40871:34;40867:1;40859:6;40855:14;40848:58;40940:19;40935:2;40927:6;40923:15;40916:44;40731:236;:::o;40973:175::-;41113:27;41109:1;41101:6;41097:14;41090:51;40973:175;:::o;41154:181::-;41294:33;41290:1;41282:6;41278:14;41271:57;41154:181;:::o;41341:122::-;41414:24;41432:5;41414:24;:::i;:::-;41407:5;41404:35;41394:63;;41453:1;41450;41443:12;41394:63;41341:122;:::o;41469:138::-;41550:32;41576:5;41550:32;:::i;:::-;41543:5;41540:43;41530:71;;41597:1;41594;41587:12;41530:71;41469:138;:::o;41613:116::-;41683:21;41698:5;41683:21;:::i;:::-;41676:5;41673:32;41663:60;;41719:1;41716;41709:12;41663:60;41613:116;:::o;41735:120::-;41807:23;41824:5;41807:23;:::i;:::-;41800:5;41797:34;41787:62;;41845:1;41842;41835:12;41787:62;41735:120;:::o;41861:122::-;41934:24;41952:5;41934:24;:::i;:::-;41927:5;41924:35;41914:63;;41973:1;41970;41963:12;41914:63;41861:122;:::o;41989:118::-;42060:22;42076:5;42060:22;:::i;:::-;42053:5;42050:33;42040:61;;42097:1;42094;42087:12;42040:61;41989:118;:::o

Swarm Source

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