ETH Price: $3,478.36 (+5.07%)

Token

Hamsta World NFT (HAMSTA)
 

Overview

Max Total Supply

526 HAMSTA

Holders

43

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
isittoolate.eth
Balance
4 HAMSTA
0x0a9c52dcce024dd72aafeb43c1c253b93ab6ee2c
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:
HAMSTA

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-10
*/

// SPDX-License-Identifier: UNLICENSED
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);
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

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

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

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

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

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

/**
 * @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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract HAMSTA is ERC721Enumerable, Ownable {
    using Strings for uint256;
    using SafeMath for uint256;
    uint public MAX = 6000;
    uint public initialCount = 0;
    uint public count = 0;
    uint public INITIALMAX = 12000;
	string _baseTokenURI;
	bool _didWeGetTheReserves = false;
	uint _saleTime = 1631257200;
	uint day = 86400;
	uint _price = 40000000000000000;
	mapping (uint256 => string) public _tokenURI;
	mapping (uint256 => string) public onchainTokenURI;
	mapping (uint256 => bool) public isonchainTokenURI;
	mapping (uint256 => uint) public parent0;
	mapping (uint256 => uint) public parent1;
	mapping (uint256 => uint) public generation;
	mapping (uint256 => bool) public generated;
	mapping (uint256 => uint) public phaseDates;
	
	uint public currentGeneration = 0;
	

	
    constructor(string memory baseURI) ERC721("Hamsta World NFT", "HAMSTA")  {
        setBaseURI(baseURI);
        phaseDates[0] = 1631257200;
	    phaseDates[1] = 1631862000;
	    phaseDates[2] = 1632726000;
	    phaseDates[3] = 1633503600;
	    phaseDates[4] = 1634194800;
	    phaseDates[5] = 1634799600;
	    phaseDates[6] = 1635318000;
	    phaseDates[7] = 1635750000;
	    phaseDates[8] = 1636095600;
	    phaseDates[9] = 1636354800;
	    phaseDates[10] = 1636527600;
	    phaseDates[11] = 1636614000;
	    phaseDates[12] = 1636700400;
	    phaseDates[13] = 1636743600;
    }

    modifier saleIsOpen{
        require(totalSupply() < INITIALMAX, "Hamsta: Sale ended");
        _;
    }

    function mint(address _to, uint _count) public payable saleIsOpen {
        require(initialCount + _count <= INITIALMAX, "Hamsta: Not enough left to mint");
        require(initialCount < INITIALMAX, "Hamsta: Not enough left to mint");
        require(_count <= 10, "Hamsta: Exceeds the max you can mint");
        require(msg.value >= price(_count), "Hamsta: Value below price");
        require(block.timestamp >= _saleTime, "Hamsta: Sale opens on the 10th of September");
        
        for(uint x = 0; x < _count; x++){
            generation[initialCount] = 0;
            generated[initialCount] = false;
            isonchainTokenURI[initialCount] = false;
            _safeMint(_to, initialCount);
            
            initialCount = initialCount.add(1);
            
            generation[initialCount] = 0;
            generated[initialCount] = false;
            isonchainTokenURI[initialCount] = false;
            _safeMint(_to, initialCount);
            
            initialCount = initialCount.add(1);
        }
    }

    function offspring(address _to, uint _a, uint _b) public {
        generationCheck();
        require(currentGeneration > 0, "Hamsta: Wait until the next generation to generate an offspring");
        require(ownerOf(_a) == _to, "Hamsta: You don't own parent A");
        require(ownerOf(_b) == _to, "Hamsta: You don't own parent B");
        require(generated[_a] == false, "Hamsta: Parent A is not able to generate");
        require(generated[_b] == false, "Hamsta: Parent B is not able to generate");
        require(generation[_a] == generation[_b], "Hamsta: Parents are not from the same generation");
        
        generation[INITIALMAX.add(count)] = generation[_b].add(1);
        generated[INITIALMAX.add(count)] = false;
        generated[_a] = true;
        generated[_b] = true;
        isonchainTokenURI[INITIALMAX.add(count)] = false;
        parent0[INITIALMAX.add(count)] = _a;
        parent1[INITIALMAX.add(count)] = _b;
        _safeMint(_to, INITIALMAX.add(count));
        count = count.add(1);
    }
    
    function generationCheck() public {
        uint currentTimestamp = block.timestamp;
        if (currentTimestamp >= phaseDates[1] && currentTimestamp < phaseDates[2]) {
            currentGeneration = 1;
        } else if (currentTimestamp >= phaseDates[1] && currentTimestamp < phaseDates[2]) {
            currentGeneration = 2;
        } else if (currentTimestamp >= phaseDates[2] && currentTimestamp < phaseDates[3]) {
            currentGeneration = 3;
        } else if (currentTimestamp >= phaseDates[3] && currentTimestamp < phaseDates[4]) {
            currentGeneration = 4;
        } else if (currentTimestamp >= phaseDates[4] && currentTimestamp < phaseDates[5]) {
            currentGeneration = 5;
        } else if (currentTimestamp >= phaseDates[5] && currentTimestamp < phaseDates[6]) {
            currentGeneration = 6;
        } else if (currentTimestamp >= phaseDates[6] && currentTimestamp < phaseDates[7]) {
            currentGeneration = 7;
        } else if (currentTimestamp >= phaseDates[7] && currentTimestamp < phaseDates[8]) {
            currentGeneration = 8;
        } else if (currentTimestamp >= phaseDates[8] && currentTimestamp < phaseDates[9]) {
            currentGeneration = 9;
        } else if (currentTimestamp >= phaseDates[9] && currentTimestamp < phaseDates[10]) {
            currentGeneration = 10;
        } else if (currentTimestamp >= phaseDates[10] && currentTimestamp < phaseDates[11]) {
            currentGeneration = 11;
        } else if (currentTimestamp >= phaseDates[11] && currentTimestamp < phaseDates[12]) {
            currentGeneration = 12;
        } else if (currentTimestamp >= phaseDates[12] && currentTimestamp < phaseDates[13]) {
            currentGeneration = 13;
        }
    }

    function price(uint _count) public view returns (uint256) {
        return _price.mul(_count);
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }
    
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }
    
    function changeSaleTime(uint time) public onlyOwner {
        _saleTime = time;
    }
    
    function changePrice(uint newPrice) public onlyOwner {
        _price = newPrice;
    }
    
    function changePhase(uint newPhase) public onlyOwner {
        currentGeneration = newPhase;
    }
    
    function changeOnChain(uint tokenId, bool newOption, string memory newMetadata) public onlyOwner {
        isonchainTokenURI[tokenId] = newOption;
        onchainTokenURI[tokenId] = newMetadata;
    }
    
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        if (isonchainTokenURI[tokenId] == true) {
            return onchainTokenURI[tokenId];
        } else {
            string memory baseURI = _baseURI();
            return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
        }
    }
    
    function currentGen() public view virtual returns (uint) {
        return currentGeneration;
    }
    
    function getReserves() public onlyOwner {
        require(_didWeGetTheReserves == false, "Hamsta: Reserves taken already!");
        for(uint x = initialCount; x < 720; x++){
            generation[initialCount] = 0;
            generated[initialCount] = false;
            isonchainTokenURI[initialCount] = false;
            _safeMint(msg.sender, initialCount);
            initialCount = initialCount.add(1);
        }
        _didWeGetTheReserves = true;
    }
    
    function getReservesOf30() public onlyOwner {
        require(_didWeGetTheReserves == false, "Hamsta: Reserves taken already!");
        for(uint x = 0; x < 30; x++){
            generation[initialCount] = 0;
            generated[initialCount] = false;
            isonchainTokenURI[initialCount] = false;
            _safeMint(msg.sender, initialCount);
            initialCount = initialCount.add(1);
        }
        if (initialCount >= 719) {
            _didWeGetTheReserves = true;
        }
    }

    function walletOfOwner(address _owner) external view returns(uint256[] memory) {
        uint tokenCount = balanceOf(_owner);
        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint i = 0; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

    function withdrawAll() public payable onlyOwner {
        require(payable(_msgSender()).send(address(this).balance));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"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":"INITIALMAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bool","name":"newOption","type":"bool"},{"internalType":"string","name":"newMetadata","type":"string"}],"name":"changeOnChain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPhase","type":"uint256"}],"name":"changePhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"changeSaleTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentGen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentGeneration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"generated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"generation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generationCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReservesOf30","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"","type":"uint256"}],"name":"isonchainTokenURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_a","type":"uint256"},{"internalType":"uint256","name":"_b","type":"uint256"}],"name":"offspring","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"onchainTokenURI","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"parent0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"parent1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"phaseDates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052611770600b556000600c819055600d819055612ee0600e556010805460ff1916905563613b027060115562015180601255668e1bc9bf040000601355601c553480156200005057600080fd5b5060405162003c2a38038062003c2a8339810160408190526200007391620004ad565b604080518082018252601081526f12185b5cdd184815dbdc9b190813919560821b60208083019182528351808501909452600684526548414d53544160d01b908401528151919291620000c99160009162000407565b508051620000df90600190602084019062000407565b505050620000fc620000f66200033a60201b60201c565b6200033e565b620001078162000390565b50601b60205263613b02707f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ea556361443cf07f9fafca4c9c0d5c2cbf85f49fd8ab8212430ce78c2a0cb75b51e0f9c4f9ace003556361516bf07f1dd2f4b94a51cfb409e6e317a497f7cfd9013960a1c723f830c49c05a25f08a55563615d49707f804a3d0621e73505f5f0c57c922f3e57d6b48e175551184eb12f80d7b4a9c78355636167d5707fa952f8c0f40734b22d2328e0f7ff57eeffee78885b9cf2147ff941cc37e1c86e556361710ff07fb48400cb19cf39e58355a7c9fd856f9b5b7298c53856a6766c6b39755ccafa7955636178f8f07ff5ddd0b8f160eab91dc4f82b50a485a96cf6ab0bfb38460d73171763afb6d5cf5563617f90707f6fa0adbc19babfec7e85ff6417830cdb284ababb3de438515569d7f3d9b3493155636184d6707f90dc0d05fc750d51b3e484087edb4e9beb1a58b38bc8386c0e048690482d89ed55636188caf07fd39da6ede46e21e407297cf3ef5dc00c802e94eec4797dd3572940f5a025af205563618b6df07f982dbf30ed444b538a358f088254f617250b1fe62040b333c0dc2be6831044eb5563618cbf707ff43a10f0aa6226c889f802d7d55f046c903914aec84c6c8d4ade4b85dc81c93e5563618e10f07f898d1b75db41852f2039c2dd69276817993fb3c009277c562eb8110b7825738e55600d60005263618eb9b07fc8a5e3393ed52b8e3bc01e521a740d26f0cd67aef3448e4c67e906625ec25f585562000604565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200039a6200033a565b6001600160a01b0316620003ad620003f8565b6001600160a01b031614620003df5760405162461bcd60e51b8152600401620003d6906200057c565b60405180910390fd5b8051620003f490600f90602084019062000407565b5050565b600a546001600160a01b031690565b8280546200041590620005b1565b90600052602060002090601f01602090048101928262000439576000855562000484565b82601f106200045457805160ff191683800117855562000484565b8280016001018555821562000484579182015b828111156200048457825182559160200191906001019062000467565b506200049292915062000496565b5090565b5b8082111562000492576000815560010162000497565b60006020808385031215620004c0578182fd5b82516001600160401b0380821115620004d7578384fd5b818501915085601f830112620004eb578384fd5b815181811115620005005762000500620005ee565b604051601f8201601f1916810185018381118282101715620005265762000526620005ee565b60405281815283820185018810156200053d578586fd5b8592505b8183101562000560578383018501518184018601529184019162000541565b818311156200057157858583830101525b979650505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600281046001821680620005c657607f821691505b60208210811415620005e857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61361680620006146000396000f3fe60806040526004361061027d5760003560e01c806362557de31161014f578063a22cb465116100c1578063d5ae7ad61161007a578063d5ae7ad61461070f578063e04023c71461072f578063e3ccff271461074f578063e985e9c51461076f578063eda2fcf91461078f578063f2fde38b146107af5761027d565b8063a22cb46514610665578063a2b40d1914610685578063b753485f146106a5578063b88d4fde146106ba578063c87b56dd146106da578063d49d5181146106fa5761027d565b8063853828b611610113578063853828b6146105e95780638d17e712146105f15780638da5cb5b146106115780638ddb428a1461062657806395d89b411461063b5780639c8450a1146106505761027d565b806362557de3146105545780636352211e1461057457806370a0823114610594578063715018a6146105b45780637d71dc35146105c95761027d565b80632713a06a116101f357806342842e0e116101ac57806342842e0e14610487578063438b6300146104a75780634d2a518c146104d45780634f6ccce7146104f457806351b317011461051457806355f804b3146105345761027d565b80632713a06a146103ea5780632f745c591461040a5780632fe512f01461042a57806333763b2a1461044a57806340179e6b1461045f57806340c10f19146104745761027d565b80630902f1ac116102455780630902f1ac1461033e578063095ea7b31461035557806315c161ea1461037557806318160ddd1461039557806323b872dd146103aa57806326a49e37146103ca5761027d565b806301ffc9a7146102825780630306d1f3146102b857806306661abd146102da57806306fdde03146102ef578063081812fc14610311575b600080fd5b34801561028e57600080fd5b506102a261029d366004612a99565b6107cf565b6040516102af9190612c61565b60405180910390f35b3480156102c457600080fd5b506102cd6107fc565b6040516102af9190613487565b3480156102e657600080fd5b506102cd610802565b3480156102fb57600080fd5b50610304610808565b6040516102af9190612c6c565b34801561031d57600080fd5b5061033161032c366004612b04565b61089a565b6040516102af9190612bcc565b34801561034a57600080fd5b506103536108e6565b005b34801561036157600080fd5b50610353610370366004612a3e565b6109d6565b34801561038157600080fd5b506102cd610390366004612b04565b610a6e565b3480156103a157600080fd5b506102cd610a80565b3480156103b657600080fd5b506103536103c5366004612961565b610a86565b3480156103d657600080fd5b506102cd6103e5366004612b04565b610abe565b3480156103f657600080fd5b50610353610405366004612b1c565b610ace565b34801561041657600080fd5b506102cd610425366004612a3e565b610b45565b34801561043657600080fd5b506102cd610445366004612b04565b610b97565b34801561045657600080fd5b50610353610ba9565b34801561046b57600080fd5b506102cd610ca3565b610353610482366004612a3e565b610ca9565b34801561049357600080fd5b506103536104a2366004612961565b610e66565b3480156104b357600080fd5b506104c76104c2366004612915565b610e81565b6040516102af9190612c1d565b3480156104e057600080fd5b506102cd6104ef366004612b04565b610f3f565b34801561050057600080fd5b506102cd61050f366004612b04565b610f51565b34801561052057600080fd5b5061030461052f366004612b04565b610fac565b34801561054057600080fd5b5061035361054f366004612ad1565b611046565b34801561056057600080fd5b5061035361056f366004612b04565b61109c565b34801561058057600080fd5b5061033161058f366004612b04565b6110e0565b3480156105a057600080fd5b506102cd6105af366004612915565b611115565b3480156105c057600080fd5b50610353611159565b3480156105d557600080fd5b506102cd6105e4366004612b04565b6111a2565b6103536111b4565b3480156105fd57600080fd5b5061030461060c366004612b04565b61122b565b34801561061d57600080fd5b50610331611244565b34801561063257600080fd5b506102cd611253565b34801561064757600080fd5b50610304611259565b34801561065c57600080fd5b50610353611268565b34801561067157600080fd5b50610353610680366004612a15565b61184d565b34801561069157600080fd5b506103536106a0366004612b04565b61191b565b3480156106b157600080fd5b506102cd61195f565b3480156106c657600080fd5b506103536106d536600461299c565b611965565b3480156106e657600080fd5b506103046106f5366004612b04565b61199e565b34801561070657600080fd5b506102cd611adc565b34801561071b57600080fd5b5061035361072a366004612b04565b611ae2565b34801561073b57600080fd5b506102a261074a366004612b04565b611b26565b34801561075b57600080fd5b5061035361076a366004612a67565b611b3b565b34801561077b57600080fd5b506102a261078a36600461292f565b611dd9565b34801561079b57600080fd5b506102a26107aa366004612b04565b611e07565b3480156107bb57600080fd5b506103536107ca366004612915565b611e1c565b60006001600160e01b0319821663780e9d6360e01b14806107f457506107f482611e8a565b90505b919050565b600c5481565b600d5481565b6060600080546108179061351e565b80601f01602080910402602001604051908101604052809291908181526020018280546108439061351e565b80156108905780601f1061086557610100808354040283529160200191610890565b820191906000526020600020905b81548152906001019060200180831161087357829003601f168201915b5050505050905090565b60006108a582611eca565b6108ca5760405162461bcd60e51b81526004016108c190613106565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6108ee611ee7565b6001600160a01b03166108ff611244565b6001600160a01b0316146109255760405162461bcd60e51b81526004016108c190613152565b60105460ff16156109485760405162461bcd60e51b81526004016108c1906130cf565b600c545b6102d08110156109c657600c8054600090815260196020908152604080832083905583548352601a8252808320805460ff1990811690915584548452601690925290912080549091169055546109a3903390611eeb565b600c546109b1906001611f05565b600c55806109be81613559565b91505061094c565b506010805460ff19166001179055565b60006109e1826110e0565b9050806001600160a01b0316836001600160a01b03161415610a155760405162461bcd60e51b81526004016108c190613267565b806001600160a01b0316610a27611ee7565b6001600160a01b03161480610a435750610a438161078a611ee7565b610a5f5760405162461bcd60e51b81526004016108c190612f2b565b610a698383611f18565b505050565b60176020526000908152604090205481565b60085490565b610a97610a91611ee7565b82611f86565b610ab35760405162461bcd60e51b81526004016108c19061332f565b610a6983838361200b565b6013546000906107f49083612138565b610ad6611ee7565b6001600160a01b0316610ae7611244565b6001600160a01b031614610b0d5760405162461bcd60e51b81526004016108c190613152565b6000838152601660209081526040808320805460ff1916861515179055601582529091208251610b3f928401906127c6565b50505050565b6000610b5083611115565b8210610b6e5760405162461bcd60e51b81526004016108c190612d13565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b60186020526000908152604090205481565b610bb1611ee7565b6001600160a01b0316610bc2611244565b6001600160a01b031614610be85760405162461bcd60e51b81526004016108c190613152565b60105460ff1615610c0b5760405162461bcd60e51b81526004016108c1906130cf565b60005b601e811015610c8757600c8054600090815260196020908152604080832083905583548352601a8252808320805460ff199081169091558454845260169092529091208054909116905554610c64903390611eeb565b600c54610c72906001611f05565b600c5580610c7f81613559565b915050610c0e565b506102cf600c5410610ca1576010805460ff191660011790555b565b600e5481565b600e54610cb4610a80565b10610cd15760405162461bcd60e51b81526004016108c190613410565b600e5481600c54610ce29190613490565b1115610d005760405162461bcd60e51b81526004016108c190613063565b600e54600c5410610d235760405162461bcd60e51b81526004016108c190613063565b600a811115610d445760405162461bcd60e51b81526004016108c190613380565b610d4d81610abe565b341015610d6c5760405162461bcd60e51b81526004016108c1906132f8565b601154421015610d8e5760405162461bcd60e51b81526004016108c19061343c565b60005b81811015610a6957600c8054600090815260196020908152604080832083905583548352601a8252808320805460ff199081169091558454845260169092529091208054909116905554610de6908490611eeb565b600c54610df4906001611f05565b600c818155600091825260196020908152604080842084905582548452601a8252808420805460ff19908116909155835485526016909252909220805490921690915554610e43908490611eeb565b600c54610e51906001611f05565b600c5580610e5e81613559565b915050610d91565b610a6983838360405180602001604052806000815250611965565b60606000610e8e83611115565b905060008167ffffffffffffffff811115610eb957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610ee2578160200160208202803683370190505b50905060005b82811015610f3757610efa8582610b45565b828281518110610f1a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610f2f81613559565b915050610ee8565b509392505050565b601b6020526000908152604090205481565b6000610f5b610a80565b8210610f795760405162461bcd60e51b81526004016108c1906133c4565b60088281548110610f9a57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b60156020526000908152604090208054610fc59061351e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff19061351e565b801561103e5780601f106110135761010080835404028352916020019161103e565b820191906000526020600020905b81548152906001019060200180831161102157829003601f168201915b505050505081565b61104e611ee7565b6001600160a01b031661105f611244565b6001600160a01b0316146110855760405162461bcd60e51b81526004016108c190613152565b805161109890600f9060208401906127c6565b5050565b6110a4611ee7565b6001600160a01b03166110b5611244565b6001600160a01b0316146110db5760405162461bcd60e51b81526004016108c190613152565b601c55565b6000818152600260205260408120546001600160a01b0316806107f45760405162461bcd60e51b81526004016108c19061301a565b60006001600160a01b03821661113d5760405162461bcd60e51b81526004016108c190612fd0565b506001600160a01b031660009081526003602052604090205490565b611161611ee7565b6001600160a01b0316611172611244565b6001600160a01b0316146111985760405162461bcd60e51b81526004016108c190613152565b610ca16000612144565b60196020526000908152604090205481565b6111bc611ee7565b6001600160a01b03166111cd611244565b6001600160a01b0316146111f35760405162461bcd60e51b81526004016108c190613152565b6111fb611ee7565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050610ca157600080fd5b60146020526000908152604090208054610fc59061351e565b600a546001600160a01b031690565b601c5481565b6060600180546108179061351e565b6001600052601b6020527f9fafca4c9c0d5c2cbf85f49fd8ab8212430ce78c2a0cb75b51e0f9c4f9ace00354429081108015906112cf57506002600052601b6020527f1dd2f4b94a51cfb409e6e317a497f7cfd9013960a1c723f830c49c05a25f08a55481105b156112de576001601c5561184a565b6001600052601b6020527f9fafca4c9c0d5c2cbf85f49fd8ab8212430ce78c2a0cb75b51e0f9c4f9ace00354811080159061134357506002600052601b6020527f1dd2f4b94a51cfb409e6e317a497f7cfd9013960a1c723f830c49c05a25f08a55481105b15611352576002601c5561184a565b6002600052601b6020527f1dd2f4b94a51cfb409e6e317a497f7cfd9013960a1c723f830c49c05a25f08a55481108015906113b757506003600052601b6020527f804a3d0621e73505f5f0c57c922f3e57d6b48e175551184eb12f80d7b4a9c7835481105b156113c6576003601c5561184a565b6003600052601b6020527f804a3d0621e73505f5f0c57c922f3e57d6b48e175551184eb12f80d7b4a9c78354811080159061142b57506004600052601b6020527fa952f8c0f40734b22d2328e0f7ff57eeffee78885b9cf2147ff941cc37e1c86e5481105b1561143a576004601c5561184a565b6004600052601b6020527fa952f8c0f40734b22d2328e0f7ff57eeffee78885b9cf2147ff941cc37e1c86e54811080159061149f57506005600052601b6020527fb48400cb19cf39e58355a7c9fd856f9b5b7298c53856a6766c6b39755ccafa795481105b156114ae576005601c5561184a565b6005600052601b6020527fb48400cb19cf39e58355a7c9fd856f9b5b7298c53856a6766c6b39755ccafa7954811080159061151357506006600052601b6020527ff5ddd0b8f160eab91dc4f82b50a485a96cf6ab0bfb38460d73171763afb6d5cf5481105b15611522576006601c5561184a565b6006600052601b6020527ff5ddd0b8f160eab91dc4f82b50a485a96cf6ab0bfb38460d73171763afb6d5cf54811080159061158757506007600052601b6020527f6fa0adbc19babfec7e85ff6417830cdb284ababb3de438515569d7f3d9b349315481105b15611596576007601c5561184a565b6007600052601b6020527f6fa0adbc19babfec7e85ff6417830cdb284ababb3de438515569d7f3d9b349315481108015906115fb57506008600052601b6020527f90dc0d05fc750d51b3e484087edb4e9beb1a58b38bc8386c0e048690482d89ed5481105b1561160a576008601c5561184a565b6008600052601b6020527f90dc0d05fc750d51b3e484087edb4e9beb1a58b38bc8386c0e048690482d89ed54811080159061166f57506009600052601b6020527fd39da6ede46e21e407297cf3ef5dc00c802e94eec4797dd3572940f5a025af205481105b1561167e576009601c5561184a565b6009600052601b6020527fd39da6ede46e21e407297cf3ef5dc00c802e94eec4797dd3572940f5a025af205481108015906116e35750600a600052601b6020527f982dbf30ed444b538a358f088254f617250b1fe62040b333c0dc2be6831044eb5481105b156116f257600a601c5561184a565b600a600052601b6020527f982dbf30ed444b538a358f088254f617250b1fe62040b333c0dc2be6831044eb5481108015906117575750600b600052601b6020527ff43a10f0aa6226c889f802d7d55f046c903914aec84c6c8d4ade4b85dc81c93e5481105b1561176657600b601c5561184a565b600b600052601b6020527ff43a10f0aa6226c889f802d7d55f046c903914aec84c6c8d4ade4b85dc81c93e5481108015906117cb5750600c600052601b6020527f898d1b75db41852f2039c2dd69276817993fb3c009277c562eb8110b7825738e5481105b156117da57600c601c5561184a565b600c600052601b6020527f898d1b75db41852f2039c2dd69276817993fb3c009277c562eb8110b7825738e54811080159061183f5750600d600052601b6020527fc8a5e3393ed52b8e3bc01e521a740d26f0cd67aef3448e4c67e906625ec25f585481105b1561184a57600d601c555b50565b611855611ee7565b6001600160a01b0316826001600160a01b031614156118865760405162461bcd60e51b81526004016108c190612e71565b8060056000611893611ee7565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556118d7611ee7565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161190f9190612c61565b60405180910390a35050565b611923611ee7565b6001600160a01b0316611934611244565b6001600160a01b03161461195a5760405162461bcd60e51b81526004016108c190613152565b601355565b601c5490565b611976611970611ee7565b83611f86565b6119925760405162461bcd60e51b81526004016108c19061332f565b610b3f84848484612196565b60606119a982611eca565b6119c55760405162461bcd60e51b81526004016108c190613218565b60008281526016602052604090205460ff16151560011415611a7f57600082815260156020526040902080546119fa9061351e565b80601f0160208091040260200160405190810160405280929190818152602001828054611a269061351e565b8015611a735780601f10611a4857610100808354040283529160200191611a73565b820191906000526020600020905b815481529060010190602001808311611a5657829003601f168201915b505050505090506107f7565b6000611a896121c9565b90506000815111611aa95760405180602001604052806000815250611ad4565b80611ab3846121d8565b604051602001611ac4929190612b9d565b6040516020818303038152906040525b9150506107f7565b600b5481565b611aea611ee7565b6001600160a01b0316611afb611244565b6001600160a01b031614611b215760405162461bcd60e51b81526004016108c190613152565b601155565b601a6020526000908152604090205460ff1681565b611b43611268565b6000601c5411611b655760405162461bcd60e51b81526004016108c190612cb6565b826001600160a01b0316611b78836110e0565b6001600160a01b031614611b9e5760405162461bcd60e51b81526004016108c190612c7f565b826001600160a01b0316611bb1826110e0565b6001600160a01b031614611bd75760405162461bcd60e51b81526004016108c190612ef4565b6000828152601a602052604090205460ff1615611c065760405162461bcd60e51b81526004016108c1906131d0565b6000818152601a602052604090205460ff1615611c355760405162461bcd60e51b81526004016108c190612f88565b6000818152601960205260408082205484835291205414611c685760405162461bcd60e51b81526004016108c1906132a8565b600081815260196020526040902054611c82906001611f05565b60196000611c9d600d54600e54611f0590919063ffffffff16565b8152602001908152602001600020819055506000601a6000611ccc600d54600e54611f0590919063ffffffff16565b815260208082019290925260409081016000908120805494151560ff19958616179055858152601a909252808220805484166001908117909155848352908220805490931617909155600d54600e546016918391611d2991611f05565b815260200190815260200160002060006101000a81548160ff0219169083151502179055508160176000611d6a600d54600e54611f0590919063ffffffff16565b8152602001908152602001600020819055508060186000611d98600d54600e54611f0590919063ffffffff16565b8152602081019190915260400160002055600d54600e54611dc3918591611dbe91611f05565b611eeb565b600d54611dd1906001611f05565b600d55505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60166020526000908152604090205460ff1681565b611e24611ee7565b6001600160a01b0316611e35611244565b6001600160a01b031614611e5b5760405162461bcd60e51b81526004016108c190613152565b6001600160a01b038116611e815760405162461bcd60e51b81526004016108c190612db0565b61184a81612144565b60006001600160e01b031982166380ac58cd60e01b1480611ebb57506001600160e01b03198216635b5e139f60e01b145b806107f457506107f4826122f3565b6000908152600260205260409020546001600160a01b0316151590565b3390565b61109882826040518060200160405280600081525061230c565b6000611f118284613490565b9392505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f4d826110e0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f9182611eca565b611fad5760405162461bcd60e51b81526004016108c190612ea8565b6000611fb8836110e0565b9050806001600160a01b0316846001600160a01b03161480611ff35750836001600160a01b0316611fe88461089a565b6001600160a01b0316145b8061200357506120038185611dd9565b949350505050565b826001600160a01b031661201e826110e0565b6001600160a01b0316146120445760405162461bcd60e51b81526004016108c190613187565b6001600160a01b03821661206a5760405162461bcd60e51b81526004016108c190612e2d565b61207583838361233f565b612080600082611f18565b6001600160a01b03831660009081526003602052604081208054600192906120a99084906134db565b90915550506001600160a01b03821660009081526003602052604081208054600192906120d7908490613490565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000611f1182846134bc565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6121a184848461200b565b6121ad848484846123c8565b610b3f5760405162461bcd60e51b81526004016108c190612d5e565b6060600f80546108179061351e565b6060816121fd57506040805180820190915260018152600360fc1b60208201526107f7565b8160005b8115612227578061221181613559565b91506122209050600a836134a8565b9150612201565b60008167ffffffffffffffff81111561225057634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561227a576020820181803683370190505b5090505b84156120035761228f6001836134db565b915061229c600a86613574565b6122a7906030613490565b60f81b8183815181106122ca57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506122ec600a866134a8565b945061227e565b6001600160e01b031981166301ffc9a760e01b14919050565b61231683836124e3565b61232360008484846123c8565b610a695760405162461bcd60e51b81526004016108c190612d5e565b61234a838383610a69565b6001600160a01b03831661236657612361816125c2565b612389565b816001600160a01b0316836001600160a01b031614612389576123898382612606565b6001600160a01b0382166123a5576123a0816126a3565b610a69565b826001600160a01b0316826001600160a01b031614610a6957610a69828261277c565b60006123dc846001600160a01b03166127c0565b156124d857836001600160a01b031663150b7a026123f8611ee7565b8786866040518563ffffffff1660e01b815260040161241a9493929190612be0565b602060405180830381600087803b15801561243457600080fd5b505af1925050508015612464575060408051601f3d908101601f1916820190925261246191810190612ab5565b60015b6124be573d808015612492576040519150601f19603f3d011682016040523d82523d6000602084013e612497565b606091505b5080516124b65760405162461bcd60e51b81526004016108c190612d5e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612003565b506001949350505050565b6001600160a01b0382166125095760405162461bcd60e51b81526004016108c19061309a565b61251281611eca565b1561252f5760405162461bcd60e51b81526004016108c190612df6565b61253b6000838361233f565b6001600160a01b0382166000908152600360205260408120805460019290612564908490613490565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161261384611115565b61261d91906134db565b600083815260076020526040902054909150808214612670576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906126b5906001906134db565b600083815260096020526040812054600880549394509092849081106126eb57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061271a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061276057634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061278783611115565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b3b151590565b8280546127d29061351e565b90600052602060002090601f0160209004810192826127f4576000855561283a565b82601f1061280d57805160ff191683800117855561283a565b8280016001018555821561283a579182015b8281111561283a57825182559160200191906001019061281f565b5061284692915061284a565b5090565b5b80821115612846576000815560010161284b565b600067ffffffffffffffff8084111561287a5761287a6135b4565b604051601f8501601f19168101602001828111828210171561289e5761289e6135b4565b6040528481529150818385018610156128b657600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146107f757600080fd5b803580151581146107f757600080fd5b600082601f830112612906578081fd5b611f118383356020850161285f565b600060208284031215612926578081fd5b611f11826128cf565b60008060408385031215612941578081fd5b61294a836128cf565b9150612958602084016128cf565b90509250929050565b600080600060608486031215612975578081fd5b61297e846128cf565b925061298c602085016128cf565b9150604084013590509250925092565b600080600080608085870312156129b1578081fd5b6129ba856128cf565b93506129c8602086016128cf565b925060408501359150606085013567ffffffffffffffff8111156129ea578182fd5b8501601f810187136129fa578182fd5b612a098782356020840161285f565b91505092959194509250565b60008060408385031215612a27578182fd5b612a30836128cf565b9150612958602084016128e6565b60008060408385031215612a50578182fd5b612a59836128cf565b946020939093013593505050565b600080600060608486031215612a7b578283fd5b612a84846128cf565b95602085013595506040909401359392505050565b600060208284031215612aaa578081fd5b8135611f11816135ca565b600060208284031215612ac6578081fd5b8151611f11816135ca565b600060208284031215612ae2578081fd5b813567ffffffffffffffff811115612af8578182fd5b612003848285016128f6565b600060208284031215612b15578081fd5b5035919050565b600080600060608486031215612b30578283fd5b83359250612b40602085016128e6565b9150604084013567ffffffffffffffff811115612b5b578182fd5b612b67868287016128f6565b9150509250925092565b60008151808452612b898160208601602086016134f2565b601f01601f19169290920160200192915050565b60008351612baf8184602088016134f2565b835190830190612bc38183602088016134f2565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c1390830184612b71565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612c5557835183529284019291840191600101612c39565b50909695505050505050565b901515815260200190565b600060208252611f116020830184612b71565b6020808252601e908201527f48616d7374613a20596f7520646f6e2774206f776e20706172656e7420410000604082015260600190565b6020808252603f908201527f48616d7374613a205761697420756e74696c20746865206e6578742067656e6560408201527f726174696f6e20746f2067656e657261746520616e206f6666737072696e6700606082015260800190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601e908201527f48616d7374613a20596f7520646f6e2774206f776e20706172656e7420420000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b60208082526028908201527f48616d7374613a20506172656e742042206973206e6f742061626c6520746f2060408201526767656e657261746560c01b606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252601f908201527f48616d7374613a204e6f7420656e6f756768206c65667420746f206d696e7400604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252601f908201527f48616d7374613a2052657365727665732074616b656e20616c72656164792100604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526028908201527f48616d7374613a20506172656e742041206973206e6f742061626c6520746f2060408201526767656e657261746560c01b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526030908201527f48616d7374613a20506172656e747320617265206e6f742066726f6d2074686560408201526f1039b0b6b29033b2b732b930ba34b7b760811b606082015260800190565b60208082526019908201527f48616d7374613a2056616c75652062656c6f7720707269636500000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526024908201527f48616d7374613a204578636565647320746865206d617820796f752063616e206040820152631b5a5b9d60e21b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b60208082526012908201527112185b5cdd184e8814d85b1948195b99195960721b604082015260600190565b6020808252602b908201527f48616d7374613a2053616c65206f70656e73206f6e207468652031307468206f60408201526a331029b2b83a32b6b132b960a91b606082015260800190565b90815260200190565b600082198211156134a3576134a3613588565b500190565b6000826134b7576134b761359e565b500490565b60008160001904831182151516156134d6576134d6613588565b500290565b6000828210156134ed576134ed613588565b500390565b60005b8381101561350d5781810151838201526020016134f5565b83811115610b3f5750506000910152565b60028104600182168061353257607f821691505b6020821081141561355357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561356d5761356d613588565b5060010190565b6000826135835761358361359e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461184a57600080fdfea264697066735822122011b5492c48e34edd63221de29fcb6cc677a8561b661b5b23da832e31b0e1e94b64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b68747470733a2f2f68616d7374616e66742e636f6d2f6d6574612f0000000000

Deployed Bytecode

0x60806040526004361061027d5760003560e01c806362557de31161014f578063a22cb465116100c1578063d5ae7ad61161007a578063d5ae7ad61461070f578063e04023c71461072f578063e3ccff271461074f578063e985e9c51461076f578063eda2fcf91461078f578063f2fde38b146107af5761027d565b8063a22cb46514610665578063a2b40d1914610685578063b753485f146106a5578063b88d4fde146106ba578063c87b56dd146106da578063d49d5181146106fa5761027d565b8063853828b611610113578063853828b6146105e95780638d17e712146105f15780638da5cb5b146106115780638ddb428a1461062657806395d89b411461063b5780639c8450a1146106505761027d565b806362557de3146105545780636352211e1461057457806370a0823114610594578063715018a6146105b45780637d71dc35146105c95761027d565b80632713a06a116101f357806342842e0e116101ac57806342842e0e14610487578063438b6300146104a75780634d2a518c146104d45780634f6ccce7146104f457806351b317011461051457806355f804b3146105345761027d565b80632713a06a146103ea5780632f745c591461040a5780632fe512f01461042a57806333763b2a1461044a57806340179e6b1461045f57806340c10f19146104745761027d565b80630902f1ac116102455780630902f1ac1461033e578063095ea7b31461035557806315c161ea1461037557806318160ddd1461039557806323b872dd146103aa57806326a49e37146103ca5761027d565b806301ffc9a7146102825780630306d1f3146102b857806306661abd146102da57806306fdde03146102ef578063081812fc14610311575b600080fd5b34801561028e57600080fd5b506102a261029d366004612a99565b6107cf565b6040516102af9190612c61565b60405180910390f35b3480156102c457600080fd5b506102cd6107fc565b6040516102af9190613487565b3480156102e657600080fd5b506102cd610802565b3480156102fb57600080fd5b50610304610808565b6040516102af9190612c6c565b34801561031d57600080fd5b5061033161032c366004612b04565b61089a565b6040516102af9190612bcc565b34801561034a57600080fd5b506103536108e6565b005b34801561036157600080fd5b50610353610370366004612a3e565b6109d6565b34801561038157600080fd5b506102cd610390366004612b04565b610a6e565b3480156103a157600080fd5b506102cd610a80565b3480156103b657600080fd5b506103536103c5366004612961565b610a86565b3480156103d657600080fd5b506102cd6103e5366004612b04565b610abe565b3480156103f657600080fd5b50610353610405366004612b1c565b610ace565b34801561041657600080fd5b506102cd610425366004612a3e565b610b45565b34801561043657600080fd5b506102cd610445366004612b04565b610b97565b34801561045657600080fd5b50610353610ba9565b34801561046b57600080fd5b506102cd610ca3565b610353610482366004612a3e565b610ca9565b34801561049357600080fd5b506103536104a2366004612961565b610e66565b3480156104b357600080fd5b506104c76104c2366004612915565b610e81565b6040516102af9190612c1d565b3480156104e057600080fd5b506102cd6104ef366004612b04565b610f3f565b34801561050057600080fd5b506102cd61050f366004612b04565b610f51565b34801561052057600080fd5b5061030461052f366004612b04565b610fac565b34801561054057600080fd5b5061035361054f366004612ad1565b611046565b34801561056057600080fd5b5061035361056f366004612b04565b61109c565b34801561058057600080fd5b5061033161058f366004612b04565b6110e0565b3480156105a057600080fd5b506102cd6105af366004612915565b611115565b3480156105c057600080fd5b50610353611159565b3480156105d557600080fd5b506102cd6105e4366004612b04565b6111a2565b6103536111b4565b3480156105fd57600080fd5b5061030461060c366004612b04565b61122b565b34801561061d57600080fd5b50610331611244565b34801561063257600080fd5b506102cd611253565b34801561064757600080fd5b50610304611259565b34801561065c57600080fd5b50610353611268565b34801561067157600080fd5b50610353610680366004612a15565b61184d565b34801561069157600080fd5b506103536106a0366004612b04565b61191b565b3480156106b157600080fd5b506102cd61195f565b3480156106c657600080fd5b506103536106d536600461299c565b611965565b3480156106e657600080fd5b506103046106f5366004612b04565b61199e565b34801561070657600080fd5b506102cd611adc565b34801561071b57600080fd5b5061035361072a366004612b04565b611ae2565b34801561073b57600080fd5b506102a261074a366004612b04565b611b26565b34801561075b57600080fd5b5061035361076a366004612a67565b611b3b565b34801561077b57600080fd5b506102a261078a36600461292f565b611dd9565b34801561079b57600080fd5b506102a26107aa366004612b04565b611e07565b3480156107bb57600080fd5b506103536107ca366004612915565b611e1c565b60006001600160e01b0319821663780e9d6360e01b14806107f457506107f482611e8a565b90505b919050565b600c5481565b600d5481565b6060600080546108179061351e565b80601f01602080910402602001604051908101604052809291908181526020018280546108439061351e565b80156108905780601f1061086557610100808354040283529160200191610890565b820191906000526020600020905b81548152906001019060200180831161087357829003601f168201915b5050505050905090565b60006108a582611eca565b6108ca5760405162461bcd60e51b81526004016108c190613106565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6108ee611ee7565b6001600160a01b03166108ff611244565b6001600160a01b0316146109255760405162461bcd60e51b81526004016108c190613152565b60105460ff16156109485760405162461bcd60e51b81526004016108c1906130cf565b600c545b6102d08110156109c657600c8054600090815260196020908152604080832083905583548352601a8252808320805460ff1990811690915584548452601690925290912080549091169055546109a3903390611eeb565b600c546109b1906001611f05565b600c55806109be81613559565b91505061094c565b506010805460ff19166001179055565b60006109e1826110e0565b9050806001600160a01b0316836001600160a01b03161415610a155760405162461bcd60e51b81526004016108c190613267565b806001600160a01b0316610a27611ee7565b6001600160a01b03161480610a435750610a438161078a611ee7565b610a5f5760405162461bcd60e51b81526004016108c190612f2b565b610a698383611f18565b505050565b60176020526000908152604090205481565b60085490565b610a97610a91611ee7565b82611f86565b610ab35760405162461bcd60e51b81526004016108c19061332f565b610a6983838361200b565b6013546000906107f49083612138565b610ad6611ee7565b6001600160a01b0316610ae7611244565b6001600160a01b031614610b0d5760405162461bcd60e51b81526004016108c190613152565b6000838152601660209081526040808320805460ff1916861515179055601582529091208251610b3f928401906127c6565b50505050565b6000610b5083611115565b8210610b6e5760405162461bcd60e51b81526004016108c190612d13565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b60186020526000908152604090205481565b610bb1611ee7565b6001600160a01b0316610bc2611244565b6001600160a01b031614610be85760405162461bcd60e51b81526004016108c190613152565b60105460ff1615610c0b5760405162461bcd60e51b81526004016108c1906130cf565b60005b601e811015610c8757600c8054600090815260196020908152604080832083905583548352601a8252808320805460ff199081169091558454845260169092529091208054909116905554610c64903390611eeb565b600c54610c72906001611f05565b600c5580610c7f81613559565b915050610c0e565b506102cf600c5410610ca1576010805460ff191660011790555b565b600e5481565b600e54610cb4610a80565b10610cd15760405162461bcd60e51b81526004016108c190613410565b600e5481600c54610ce29190613490565b1115610d005760405162461bcd60e51b81526004016108c190613063565b600e54600c5410610d235760405162461bcd60e51b81526004016108c190613063565b600a811115610d445760405162461bcd60e51b81526004016108c190613380565b610d4d81610abe565b341015610d6c5760405162461bcd60e51b81526004016108c1906132f8565b601154421015610d8e5760405162461bcd60e51b81526004016108c19061343c565b60005b81811015610a6957600c8054600090815260196020908152604080832083905583548352601a8252808320805460ff199081169091558454845260169092529091208054909116905554610de6908490611eeb565b600c54610df4906001611f05565b600c818155600091825260196020908152604080842084905582548452601a8252808420805460ff19908116909155835485526016909252909220805490921690915554610e43908490611eeb565b600c54610e51906001611f05565b600c5580610e5e81613559565b915050610d91565b610a6983838360405180602001604052806000815250611965565b60606000610e8e83611115565b905060008167ffffffffffffffff811115610eb957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610ee2578160200160208202803683370190505b50905060005b82811015610f3757610efa8582610b45565b828281518110610f1a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610f2f81613559565b915050610ee8565b509392505050565b601b6020526000908152604090205481565b6000610f5b610a80565b8210610f795760405162461bcd60e51b81526004016108c1906133c4565b60088281548110610f9a57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b60156020526000908152604090208054610fc59061351e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff19061351e565b801561103e5780601f106110135761010080835404028352916020019161103e565b820191906000526020600020905b81548152906001019060200180831161102157829003601f168201915b505050505081565b61104e611ee7565b6001600160a01b031661105f611244565b6001600160a01b0316146110855760405162461bcd60e51b81526004016108c190613152565b805161109890600f9060208401906127c6565b5050565b6110a4611ee7565b6001600160a01b03166110b5611244565b6001600160a01b0316146110db5760405162461bcd60e51b81526004016108c190613152565b601c55565b6000818152600260205260408120546001600160a01b0316806107f45760405162461bcd60e51b81526004016108c19061301a565b60006001600160a01b03821661113d5760405162461bcd60e51b81526004016108c190612fd0565b506001600160a01b031660009081526003602052604090205490565b611161611ee7565b6001600160a01b0316611172611244565b6001600160a01b0316146111985760405162461bcd60e51b81526004016108c190613152565b610ca16000612144565b60196020526000908152604090205481565b6111bc611ee7565b6001600160a01b03166111cd611244565b6001600160a01b0316146111f35760405162461bcd60e51b81526004016108c190613152565b6111fb611ee7565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050610ca157600080fd5b60146020526000908152604090208054610fc59061351e565b600a546001600160a01b031690565b601c5481565b6060600180546108179061351e565b6001600052601b6020527f9fafca4c9c0d5c2cbf85f49fd8ab8212430ce78c2a0cb75b51e0f9c4f9ace00354429081108015906112cf57506002600052601b6020527f1dd2f4b94a51cfb409e6e317a497f7cfd9013960a1c723f830c49c05a25f08a55481105b156112de576001601c5561184a565b6001600052601b6020527f9fafca4c9c0d5c2cbf85f49fd8ab8212430ce78c2a0cb75b51e0f9c4f9ace00354811080159061134357506002600052601b6020527f1dd2f4b94a51cfb409e6e317a497f7cfd9013960a1c723f830c49c05a25f08a55481105b15611352576002601c5561184a565b6002600052601b6020527f1dd2f4b94a51cfb409e6e317a497f7cfd9013960a1c723f830c49c05a25f08a55481108015906113b757506003600052601b6020527f804a3d0621e73505f5f0c57c922f3e57d6b48e175551184eb12f80d7b4a9c7835481105b156113c6576003601c5561184a565b6003600052601b6020527f804a3d0621e73505f5f0c57c922f3e57d6b48e175551184eb12f80d7b4a9c78354811080159061142b57506004600052601b6020527fa952f8c0f40734b22d2328e0f7ff57eeffee78885b9cf2147ff941cc37e1c86e5481105b1561143a576004601c5561184a565b6004600052601b6020527fa952f8c0f40734b22d2328e0f7ff57eeffee78885b9cf2147ff941cc37e1c86e54811080159061149f57506005600052601b6020527fb48400cb19cf39e58355a7c9fd856f9b5b7298c53856a6766c6b39755ccafa795481105b156114ae576005601c5561184a565b6005600052601b6020527fb48400cb19cf39e58355a7c9fd856f9b5b7298c53856a6766c6b39755ccafa7954811080159061151357506006600052601b6020527ff5ddd0b8f160eab91dc4f82b50a485a96cf6ab0bfb38460d73171763afb6d5cf5481105b15611522576006601c5561184a565b6006600052601b6020527ff5ddd0b8f160eab91dc4f82b50a485a96cf6ab0bfb38460d73171763afb6d5cf54811080159061158757506007600052601b6020527f6fa0adbc19babfec7e85ff6417830cdb284ababb3de438515569d7f3d9b349315481105b15611596576007601c5561184a565b6007600052601b6020527f6fa0adbc19babfec7e85ff6417830cdb284ababb3de438515569d7f3d9b349315481108015906115fb57506008600052601b6020527f90dc0d05fc750d51b3e484087edb4e9beb1a58b38bc8386c0e048690482d89ed5481105b1561160a576008601c5561184a565b6008600052601b6020527f90dc0d05fc750d51b3e484087edb4e9beb1a58b38bc8386c0e048690482d89ed54811080159061166f57506009600052601b6020527fd39da6ede46e21e407297cf3ef5dc00c802e94eec4797dd3572940f5a025af205481105b1561167e576009601c5561184a565b6009600052601b6020527fd39da6ede46e21e407297cf3ef5dc00c802e94eec4797dd3572940f5a025af205481108015906116e35750600a600052601b6020527f982dbf30ed444b538a358f088254f617250b1fe62040b333c0dc2be6831044eb5481105b156116f257600a601c5561184a565b600a600052601b6020527f982dbf30ed444b538a358f088254f617250b1fe62040b333c0dc2be6831044eb5481108015906117575750600b600052601b6020527ff43a10f0aa6226c889f802d7d55f046c903914aec84c6c8d4ade4b85dc81c93e5481105b1561176657600b601c5561184a565b600b600052601b6020527ff43a10f0aa6226c889f802d7d55f046c903914aec84c6c8d4ade4b85dc81c93e5481108015906117cb5750600c600052601b6020527f898d1b75db41852f2039c2dd69276817993fb3c009277c562eb8110b7825738e5481105b156117da57600c601c5561184a565b600c600052601b6020527f898d1b75db41852f2039c2dd69276817993fb3c009277c562eb8110b7825738e54811080159061183f5750600d600052601b6020527fc8a5e3393ed52b8e3bc01e521a740d26f0cd67aef3448e4c67e906625ec25f585481105b1561184a57600d601c555b50565b611855611ee7565b6001600160a01b0316826001600160a01b031614156118865760405162461bcd60e51b81526004016108c190612e71565b8060056000611893611ee7565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556118d7611ee7565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161190f9190612c61565b60405180910390a35050565b611923611ee7565b6001600160a01b0316611934611244565b6001600160a01b03161461195a5760405162461bcd60e51b81526004016108c190613152565b601355565b601c5490565b611976611970611ee7565b83611f86565b6119925760405162461bcd60e51b81526004016108c19061332f565b610b3f84848484612196565b60606119a982611eca565b6119c55760405162461bcd60e51b81526004016108c190613218565b60008281526016602052604090205460ff16151560011415611a7f57600082815260156020526040902080546119fa9061351e565b80601f0160208091040260200160405190810160405280929190818152602001828054611a269061351e565b8015611a735780601f10611a4857610100808354040283529160200191611a73565b820191906000526020600020905b815481529060010190602001808311611a5657829003601f168201915b505050505090506107f7565b6000611a896121c9565b90506000815111611aa95760405180602001604052806000815250611ad4565b80611ab3846121d8565b604051602001611ac4929190612b9d565b6040516020818303038152906040525b9150506107f7565b600b5481565b611aea611ee7565b6001600160a01b0316611afb611244565b6001600160a01b031614611b215760405162461bcd60e51b81526004016108c190613152565b601155565b601a6020526000908152604090205460ff1681565b611b43611268565b6000601c5411611b655760405162461bcd60e51b81526004016108c190612cb6565b826001600160a01b0316611b78836110e0565b6001600160a01b031614611b9e5760405162461bcd60e51b81526004016108c190612c7f565b826001600160a01b0316611bb1826110e0565b6001600160a01b031614611bd75760405162461bcd60e51b81526004016108c190612ef4565b6000828152601a602052604090205460ff1615611c065760405162461bcd60e51b81526004016108c1906131d0565b6000818152601a602052604090205460ff1615611c355760405162461bcd60e51b81526004016108c190612f88565b6000818152601960205260408082205484835291205414611c685760405162461bcd60e51b81526004016108c1906132a8565b600081815260196020526040902054611c82906001611f05565b60196000611c9d600d54600e54611f0590919063ffffffff16565b8152602001908152602001600020819055506000601a6000611ccc600d54600e54611f0590919063ffffffff16565b815260208082019290925260409081016000908120805494151560ff19958616179055858152601a909252808220805484166001908117909155848352908220805490931617909155600d54600e546016918391611d2991611f05565b815260200190815260200160002060006101000a81548160ff0219169083151502179055508160176000611d6a600d54600e54611f0590919063ffffffff16565b8152602001908152602001600020819055508060186000611d98600d54600e54611f0590919063ffffffff16565b8152602081019190915260400160002055600d54600e54611dc3918591611dbe91611f05565b611eeb565b600d54611dd1906001611f05565b600d55505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60166020526000908152604090205460ff1681565b611e24611ee7565b6001600160a01b0316611e35611244565b6001600160a01b031614611e5b5760405162461bcd60e51b81526004016108c190613152565b6001600160a01b038116611e815760405162461bcd60e51b81526004016108c190612db0565b61184a81612144565b60006001600160e01b031982166380ac58cd60e01b1480611ebb57506001600160e01b03198216635b5e139f60e01b145b806107f457506107f4826122f3565b6000908152600260205260409020546001600160a01b0316151590565b3390565b61109882826040518060200160405280600081525061230c565b6000611f118284613490565b9392505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f4d826110e0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f9182611eca565b611fad5760405162461bcd60e51b81526004016108c190612ea8565b6000611fb8836110e0565b9050806001600160a01b0316846001600160a01b03161480611ff35750836001600160a01b0316611fe88461089a565b6001600160a01b0316145b8061200357506120038185611dd9565b949350505050565b826001600160a01b031661201e826110e0565b6001600160a01b0316146120445760405162461bcd60e51b81526004016108c190613187565b6001600160a01b03821661206a5760405162461bcd60e51b81526004016108c190612e2d565b61207583838361233f565b612080600082611f18565b6001600160a01b03831660009081526003602052604081208054600192906120a99084906134db565b90915550506001600160a01b03821660009081526003602052604081208054600192906120d7908490613490565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000611f1182846134bc565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6121a184848461200b565b6121ad848484846123c8565b610b3f5760405162461bcd60e51b81526004016108c190612d5e565b6060600f80546108179061351e565b6060816121fd57506040805180820190915260018152600360fc1b60208201526107f7565b8160005b8115612227578061221181613559565b91506122209050600a836134a8565b9150612201565b60008167ffffffffffffffff81111561225057634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561227a576020820181803683370190505b5090505b84156120035761228f6001836134db565b915061229c600a86613574565b6122a7906030613490565b60f81b8183815181106122ca57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506122ec600a866134a8565b945061227e565b6001600160e01b031981166301ffc9a760e01b14919050565b61231683836124e3565b61232360008484846123c8565b610a695760405162461bcd60e51b81526004016108c190612d5e565b61234a838383610a69565b6001600160a01b03831661236657612361816125c2565b612389565b816001600160a01b0316836001600160a01b031614612389576123898382612606565b6001600160a01b0382166123a5576123a0816126a3565b610a69565b826001600160a01b0316826001600160a01b031614610a6957610a69828261277c565b60006123dc846001600160a01b03166127c0565b156124d857836001600160a01b031663150b7a026123f8611ee7565b8786866040518563ffffffff1660e01b815260040161241a9493929190612be0565b602060405180830381600087803b15801561243457600080fd5b505af1925050508015612464575060408051601f3d908101601f1916820190925261246191810190612ab5565b60015b6124be573d808015612492576040519150601f19603f3d011682016040523d82523d6000602084013e612497565b606091505b5080516124b65760405162461bcd60e51b81526004016108c190612d5e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612003565b506001949350505050565b6001600160a01b0382166125095760405162461bcd60e51b81526004016108c19061309a565b61251281611eca565b1561252f5760405162461bcd60e51b81526004016108c190612df6565b61253b6000838361233f565b6001600160a01b0382166000908152600360205260408120805460019290612564908490613490565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600161261384611115565b61261d91906134db565b600083815260076020526040902054909150808214612670576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906126b5906001906134db565b600083815260096020526040812054600880549394509092849081106126eb57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061271a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061276057634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061278783611115565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b3b151590565b8280546127d29061351e565b90600052602060002090601f0160209004810192826127f4576000855561283a565b82601f1061280d57805160ff191683800117855561283a565b8280016001018555821561283a579182015b8281111561283a57825182559160200191906001019061281f565b5061284692915061284a565b5090565b5b80821115612846576000815560010161284b565b600067ffffffffffffffff8084111561287a5761287a6135b4565b604051601f8501601f19168101602001828111828210171561289e5761289e6135b4565b6040528481529150818385018610156128b657600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146107f757600080fd5b803580151581146107f757600080fd5b600082601f830112612906578081fd5b611f118383356020850161285f565b600060208284031215612926578081fd5b611f11826128cf565b60008060408385031215612941578081fd5b61294a836128cf565b9150612958602084016128cf565b90509250929050565b600080600060608486031215612975578081fd5b61297e846128cf565b925061298c602085016128cf565b9150604084013590509250925092565b600080600080608085870312156129b1578081fd5b6129ba856128cf565b93506129c8602086016128cf565b925060408501359150606085013567ffffffffffffffff8111156129ea578182fd5b8501601f810187136129fa578182fd5b612a098782356020840161285f565b91505092959194509250565b60008060408385031215612a27578182fd5b612a30836128cf565b9150612958602084016128e6565b60008060408385031215612a50578182fd5b612a59836128cf565b946020939093013593505050565b600080600060608486031215612a7b578283fd5b612a84846128cf565b95602085013595506040909401359392505050565b600060208284031215612aaa578081fd5b8135611f11816135ca565b600060208284031215612ac6578081fd5b8151611f11816135ca565b600060208284031215612ae2578081fd5b813567ffffffffffffffff811115612af8578182fd5b612003848285016128f6565b600060208284031215612b15578081fd5b5035919050565b600080600060608486031215612b30578283fd5b83359250612b40602085016128e6565b9150604084013567ffffffffffffffff811115612b5b578182fd5b612b67868287016128f6565b9150509250925092565b60008151808452612b898160208601602086016134f2565b601f01601f19169290920160200192915050565b60008351612baf8184602088016134f2565b835190830190612bc38183602088016134f2565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c1390830184612b71565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612c5557835183529284019291840191600101612c39565b50909695505050505050565b901515815260200190565b600060208252611f116020830184612b71565b6020808252601e908201527f48616d7374613a20596f7520646f6e2774206f776e20706172656e7420410000604082015260600190565b6020808252603f908201527f48616d7374613a205761697420756e74696c20746865206e6578742067656e6560408201527f726174696f6e20746f2067656e657261746520616e206f6666737072696e6700606082015260800190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252601e908201527f48616d7374613a20596f7520646f6e2774206f776e20706172656e7420420000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b60208082526028908201527f48616d7374613a20506172656e742042206973206e6f742061626c6520746f2060408201526767656e657261746560c01b606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252601f908201527f48616d7374613a204e6f7420656e6f756768206c65667420746f206d696e7400604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252601f908201527f48616d7374613a2052657365727665732074616b656e20616c72656164792100604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b60208082526028908201527f48616d7374613a20506172656e742041206973206e6f742061626c6520746f2060408201526767656e657261746560c01b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526030908201527f48616d7374613a20506172656e747320617265206e6f742066726f6d2074686560408201526f1039b0b6b29033b2b732b930ba34b7b760811b606082015260800190565b60208082526019908201527f48616d7374613a2056616c75652062656c6f7720707269636500000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526024908201527f48616d7374613a204578636565647320746865206d617820796f752063616e206040820152631b5a5b9d60e21b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b60208082526012908201527112185b5cdd184e8814d85b1948195b99195960721b604082015260600190565b6020808252602b908201527f48616d7374613a2053616c65206f70656e73206f6e207468652031307468206f60408201526a331029b2b83a32b6b132b960a91b606082015260800190565b90815260200190565b600082198211156134a3576134a3613588565b500190565b6000826134b7576134b761359e565b500490565b60008160001904831182151516156134d6576134d6613588565b500290565b6000828210156134ed576134ed613588565b500390565b60005b8381101561350d5781810151838201526020016134f5565b83811115610b3f5750506000910152565b60028104600182168061353257607f821691505b6020821081141561355357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561356d5761356d613588565b5060010190565b6000826135835761358361359e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461184a57600080fdfea264697066735822122011b5492c48e34edd63221de29fcb6cc677a8561b661b5b23da832e31b0e1e94b64736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b68747470733a2f2f68616d7374616e66742e636f6d2f6d6574612f0000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://hamstanft.com/meta/

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [2] : 68747470733a2f2f68616d7374616e66742e636f6d2f6d6574612f0000000000


Deployed Bytecode Sourcemap

43607:8414:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37459:224;;;;;;;;;;-1:-1:-1;37459:224:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43753:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;43788:21::-;;;;;;;;;;;;;:::i;23639:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25198:221::-;;;;;;;;;;-1:-1:-1;25198:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;50534:474::-;;;;;;;;;;;;;:::i;:::-;;24721:411;;;;;;;;;;-1:-1:-1;24721:411:0;;;;;:::i;:::-;;:::i;44153:40::-;;;;;;;;;;-1:-1:-1;44153:40:0;;;;;:::i;:::-;;:::i;38099:113::-;;;;;;;;;;;;;:::i;26088:339::-;;;;;;;;;;-1:-1:-1;26088:339:0;;;;;:::i;:::-;;:::i;49065:102::-;;;;;;;;;;-1:-1:-1;49065:102:0;;;;;:::i;:::-;;:::i;49727:203::-;;;;;;;;;;-1:-1:-1;49727:203:0;;;;;:::i;:::-;;:::i;37767:256::-;;;;;;;;;;-1:-1:-1;37767:256:0;;;;;:::i;:::-;;:::i;44197:40::-;;;;;;;;;;-1:-1:-1;44197:40:0;;;;;:::i;:::-;;:::i;51020:517::-;;;;;;;;;;;;;:::i;43816:30::-;;;;;;;;;;;;;:::i;45149:1062::-;;;;;;:::i;:::-;;:::i;26498:185::-;;;;;;;;;;-1:-1:-1;26498:185:0;;;;;:::i;:::-;;:::i;51545:340::-;;;;;;;;;;-1:-1:-1;51545:340:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44334:43::-;;;;;;;;;;-1:-1:-1;44334:43:0;;;;;:::i;:::-;;:::i;38289:233::-;;;;;;;;;;-1:-1:-1;38289:233:0;;;;;:::i;:::-;;:::i;44045:50::-;;;;;;;;;;-1:-1:-1;44045:50:0;;;;;:::i;:::-;;:::i;49301:102::-;;;;;;;;;;-1:-1:-1;49301:102:0;;;;;:::i;:::-;;:::i;49615:100::-;;;;;;;;;;-1:-1:-1;49615:100:0;;;;;:::i;:::-;;:::i;23333:239::-;;;;;;;;;;-1:-1:-1;23333:239:0;;;;;:::i;:::-;;:::i;23063:208::-;;;;;;;;;;-1:-1:-1;23063:208:0;;;;;:::i;:::-;;:::i;20838:94::-;;;;;;;;;;;;;:::i;44241:43::-;;;;;;;;;;-1:-1:-1;44241:43:0;;;;;:::i;:::-;;:::i;51893:125::-;;;:::i;43997:44::-;;;;;;;;;;-1:-1:-1;43997:44:0;;;;;:::i;:::-;;:::i;20187:87::-;;;;;;;;;;;;;:::i;44384:33::-;;;;;;;;;;;;;:::i;23808:104::-;;;;;;;;;;;;;:::i;47273:1784::-;;;;;;;;;;;;;:::i;25491:295::-;;;;;;;;;;-1:-1:-1;25491:295:0;;;;;:::i;:::-;;:::i;49514:89::-;;;;;;;;;;-1:-1:-1;49514:89:0;;;;;:::i;:::-;;:::i;50422:100::-;;;;;;;;;;;;;:::i;26754:328::-;;;;;;;;;;-1:-1:-1;26754:328:0;;;;;:::i;:::-;;:::i;49942:468::-;;;;;;;;;;-1:-1:-1;49942:468:0;;;;;:::i;:::-;;:::i;43724:22::-;;;;;;;;;;;;;:::i;49415:87::-;;;;;;;;;;-1:-1:-1;49415:87:0;;;;;:::i;:::-;;:::i;44288:42::-;;;;;;;;;;-1:-1:-1;44288:42:0;;;;;:::i;:::-;;:::i;46219:1042::-;;;;;;;;;;-1:-1:-1;46219:1042:0;;;;;:::i;:::-;;:::i;25857:164::-;;;;;;;;;;-1:-1:-1;25857:164:0;;;;;:::i;:::-;;:::i;44099:50::-;;;;;;;;;;-1:-1:-1;44099:50:0;;;;;:::i;:::-;;:::i;21087:192::-;;;;;;;;;;-1:-1:-1;21087:192:0;;;;;:::i;:::-;;:::i;37459:224::-;37561:4;-1:-1:-1;;;;;;37585:50:0;;-1:-1:-1;;;37585:50:0;;:90;;;37639:36;37663:11;37639:23;:36::i;:::-;37578:97;;37459:224;;;;:::o;43753:28::-;;;;:::o;43788:21::-;;;;:::o;23639:100::-;23693:13;23726:5;23719:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23639:100;:::o;25198:221::-;25274:7;25302:16;25310:7;25302;:16::i;:::-;25294:73;;;;-1:-1:-1;;;25294:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;25387:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;25387:24:0;;25198:221::o;50534:474::-;20418:12;:10;:12::i;:::-;-1:-1:-1;;;;;20407:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20407:23:0;;20399:68;;;;-1:-1:-1;;;20399:68:0;;;;;;;:::i;:::-;50593:20:::1;::::0;::::1;;:29;50585:73;;;;-1:-1:-1::0;;;50585:73:0::1;;;;;;;:::i;:::-;50682:12;::::0;50669:294:::1;50700:3;50696:1;:7;50669:294;;;50735:12;::::0;;50751:1:::1;50724:24:::0;;;:10:::1;:24;::::0;;;;;;;:28;;;50777:12;;50767:23;;:9:::1;:23:::0;;;;;:31;;-1:-1:-1;;50767:31:0;;::::1;::::0;;;50831:12;;50813:31;;:17:::1;:31:::0;;;;;;:39;;;;::::1;::::0;;50889:12;50867:35:::1;::::0;50877:10:::1;::::0;50867:9:::1;:35::i;:::-;50932:12;::::0;:19:::1;::::0;50949:1:::1;50932:16;:19::i;:::-;50917:12;:34:::0;50705:3;::::1;::::0;::::1;:::i;:::-;;;;50669:294;;;-1:-1:-1::0;50973:20:0::1;:27:::0;;-1:-1:-1;;50973:27:0::1;50996:4;50973:27;::::0;;50534:474::o;24721:411::-;24802:13;24818:23;24833:7;24818:14;:23::i;:::-;24802:39;;24866:5;-1:-1:-1;;;;;24860:11:0;:2;-1:-1:-1;;;;;24860:11:0;;;24852:57;;;;-1:-1:-1;;;24852:57:0;;;;;;;:::i;:::-;24960:5;-1:-1:-1;;;;;24944:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;24944:21:0;;:62;;;;24969:37;24986:5;24993:12;:10;:12::i;24969:37::-;24922:168;;;;-1:-1:-1;;;24922:168:0;;;;;;;:::i;:::-;25103:21;25112:2;25116:7;25103:8;:21::i;:::-;24721:411;;;:::o;44153:40::-;;;;;;;;;;;;;:::o;38099:113::-;38187:10;:17;38099:113;:::o;26088:339::-;26283:41;26302:12;:10;:12::i;:::-;26316:7;26283:18;:41::i;:::-;26275:103;;;;-1:-1:-1;;;26275:103:0;;;;;;;:::i;:::-;26391:28;26401:4;26407:2;26411:7;26391:9;:28::i;49065:102::-;49141:6;;49114:7;;49141:18;;49152:6;49141:10;:18::i;49727:203::-;20418:12;:10;:12::i;:::-;-1:-1:-1;;;;;20407:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20407:23:0;;20399:68;;;;-1:-1:-1;;;20399:68:0;;;;;;;:::i;:::-;49835:26:::1;::::0;;;:17:::1;:26;::::0;;;;;;;:38;;-1:-1:-1;;49835:38:0::1;::::0;::::1;;;::::0;;49884:15:::1;:24:::0;;;;;:38;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;49727:203:::0;;;:::o;37767:256::-;37864:7;37900:23;37917:5;37900:16;:23::i;:::-;37892:5;:31;37884:87;;;;-1:-1:-1;;;37884:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;37989:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;37767:256::o;44197:40::-;;;;;;;;;;;;;:::o;51020:517::-;20418:12;:10;:12::i;:::-;-1:-1:-1;;;;;20407:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20407:23:0;;20399:68;;;;-1:-1:-1;;;20399:68:0;;;;;;;:::i;:::-;51083:20:::1;::::0;::::1;;:29;51075:73;;;;-1:-1:-1::0;;;51075:73:0::1;;;;;;;:::i;:::-;51163:6;51159:282;51179:2;51175:1;:6;51159:282;;;51213:12;::::0;;51229:1:::1;51202:24:::0;;;:10:::1;:24;::::0;;;;;;;:28;;;51255:12;;51245:23;;:9:::1;:23:::0;;;;;:31;;-1:-1:-1;;51245:31:0;;::::1;::::0;;;51309:12;;51291:31;;:17:::1;:31:::0;;;;;;:39;;;;::::1;::::0;;51367:12;51345:35:::1;::::0;51355:10:::1;::::0;51345:9:::1;:35::i;:::-;51410:12;::::0;:19:::1;::::0;51427:1:::1;51410:16;:19::i;:::-;51395:12;:34:::0;51183:3;::::1;::::0;::::1;:::i;:::-;;;;51159:282;;;;51471:3;51455:12;;:19;51451:79;;51491:20;:27:::0;;-1:-1:-1;;51491:27:0::1;51514:4;51491:27;::::0;;51451:79:::1;51020:517::o:0;43816:30::-;;;;:::o;45149:1062::-;45088:10;;45072:13;:11;:13::i;:::-;:26;45064:57;;;;-1:-1:-1;;;45064:57:0;;;;;;;:::i;:::-;45259:10:::1;;45249:6;45234:12;;:21;;;;:::i;:::-;:35;;45226:79;;;;-1:-1:-1::0;;;45226:79:0::1;;;;;;;:::i;:::-;45339:10;;45324:12;;:25;45316:69;;;;-1:-1:-1::0;;;45316:69:0::1;;;;;;;:::i;:::-;45414:2;45404:6;:12;;45396:61;;;;-1:-1:-1::0;;;45396:61:0::1;;;;;;;:::i;:::-;45489:13;45495:6;45489:5;:13::i;:::-;45476:9;:26;;45468:64;;;;-1:-1:-1::0;;;45468:64:0::1;;;;;;;:::i;:::-;45570:9;;45551:15;:28;;45543:84;;;;-1:-1:-1::0;;;45543:84:0::1;;;;;;;:::i;:::-;45652:6;45648:556;45668:6;45664:1;:10;45648:556;;;45706:12;::::0;;45722:1:::1;45695:24:::0;;;:10:::1;:24;::::0;;;;;;;:28;;;45748:12;;45738:23;;:9:::1;:23:::0;;;;;:31;;-1:-1:-1;;45738:31:0;;::::1;::::0;;;45802:12;;45784:31;;:17:::1;:31:::0;;;;;;:39;;;;::::1;::::0;;45853:12;45838:28:::1;::::0;45848:3;;45838:9:::1;:28::i;:::-;45910:12;::::0;:19:::1;::::0;45927:1:::1;45910:16;:19::i;:::-;45895:12;:34:::0;;;45985:1:::1;45958:24:::0;;;:10:::1;:24;::::0;;;;;;;:28;;;46011:12;;46001:23;;:9:::1;:23:::0;;;;;:31;;-1:-1:-1;;46001:31:0;;::::1;::::0;;;46065:12;;46047:31;;:17:::1;:31:::0;;;;;;:39;;;;::::1;::::0;;;46116:12;46101:28:::1;::::0;46111:3;;46101:9:::1;:28::i;:::-;46173:12;::::0;:19:::1;::::0;46190:1:::1;46173:16;:19::i;:::-;46158:12;:34:::0;45676:3;::::1;::::0;::::1;:::i;:::-;;;;45648:556;;26498:185:::0;26636:39;26653:4;26659:2;26663:7;26636:39;;;;;;;;;;;;:16;:39::i;51545:340::-;51606:16;51635:15;51653:17;51663:6;51653:9;:17::i;:::-;51635:35;;51681:25;51723:10;51709:25;;;;;;-1:-1:-1;;;51709:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51709:25:0;;51681:53;;51749:6;51745:107;51765:10;51761:1;:14;51745:107;;;51810:30;51830:6;51838:1;51810:19;:30::i;:::-;51796:8;51805:1;51796:11;;;;;;-1:-1:-1;;;51796:11:0;;;;;;;;;;;;;;;;;;:44;51777:3;;;;:::i;:::-;;;;51745:107;;;-1:-1:-1;51869:8:0;51545:340;-1:-1:-1;;;51545:340:0:o;44334:43::-;;;;;;;;;;;;;:::o;38289:233::-;38364:7;38400:30;:28;:30::i;:::-;38392:5;:38;38384:95;;;;-1:-1:-1;;;38384:95:0;;;;;;;:::i;:::-;38497:10;38508:5;38497:17;;;;;;-1:-1:-1;;;38497:17:0;;;;;;;;;;;;;;;;;38490:24;;38289:233;;;:::o;44045:50::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49301:102::-;20418:12;:10;:12::i;:::-;-1:-1:-1;;;;;20407:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20407:23:0;;20399:68;;;;-1:-1:-1;;;20399:68:0;;;;;;;:::i;:::-;49372:23;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;49301:102:::0;:::o;49615:100::-;20418:12;:10;:12::i;:::-;-1:-1:-1;;;;;20407:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20407:23:0;;20399:68;;;;-1:-1:-1;;;20399:68:0;;;;;;;:::i;:::-;49679:17:::1;:28:::0;49615:100::o;23333:239::-;23405:7;23441:16;;;:7;:16;;;;;;-1:-1:-1;;;;;23441:16:0;23476:19;23468:73;;;;-1:-1:-1;;;23468:73:0;;;;;;;:::i;23063:208::-;23135:7;-1:-1:-1;;;;;23163:19:0;;23155:74;;;;-1:-1:-1;;;23155:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23247:16:0;;;;;:9;:16;;;;;;;23063:208::o;20838:94::-;20418:12;:10;:12::i;:::-;-1:-1:-1;;;;;20407:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20407:23:0;;20399:68;;;;-1:-1:-1;;;20399:68:0;;;;;;;:::i;:::-;20903:21:::1;20921:1;20903:9;:21::i;44241:43::-:0;;;;;;;;;;;;;:::o;51893:125::-;20418:12;:10;:12::i;:::-;-1:-1:-1;;;;;20407:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20407:23:0;;20399:68;;;;-1:-1:-1;;;20399:68:0;;;;;;;:::i;:::-;51968:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;51960:26:0::1;:49;51987:21;51960:49;;;;;;;;;;;;;;;;;;;;;;;51952:58;;;::::0;::::1;43997:44:::0;;;;;;;;;;;;;;;;:::i;20187:87::-;20260:6;;-1:-1:-1;;;;;20260:6:0;20187:87;:::o;44384:33::-;;;;:::o;23808:104::-;23864:13;23897:7;23890:14;;;;;:::i;47273:1784::-;47403:1;47318:21;47392:13;:10;:13;;;;47342:15;;47372:33;;;;;:69;;-1:-1:-1;47439:1:0;47428:13;;:10;:13;;;;47409:32;;47372:69;47368:1682;;;47478:1;47458:17;:21;47368:1682;;;47532:1;47521:13;;:10;:13;;;;47501:33;;;;;:69;;-1:-1:-1;47568:1:0;47557:13;;:10;:13;;;;47538:32;;47501:69;47497:1553;;;47607:1;47587:17;:21;47497:1553;;;47661:1;47650:13;;:10;:13;;;;47630:33;;;;;:69;;-1:-1:-1;47697:1:0;47686:13;;:10;:13;;;;47667:32;;47630:69;47626:1424;;;47736:1;47716:17;:21;47626:1424;;;47790:1;47779:13;;:10;:13;;;;47759:33;;;;;:69;;-1:-1:-1;47826:1:0;47815:13;;:10;:13;;;;47796:32;;47759:69;47755:1295;;;47865:1;47845:17;:21;47755:1295;;;47919:1;47908:13;;:10;:13;;;;47888:33;;;;;:69;;-1:-1:-1;47955:1:0;47944:13;;:10;:13;;;;47925:32;;47888:69;47884:1166;;;47994:1;47974:17;:21;47884:1166;;;48048:1;48037:13;;:10;:13;;;;48017:33;;;;;:69;;-1:-1:-1;48084:1:0;48073:13;;:10;:13;;;;48054:32;;48017:69;48013:1037;;;48123:1;48103:17;:21;48013:1037;;;48177:1;48166:13;;:10;:13;;;;48146:33;;;;;:69;;-1:-1:-1;48213:1:0;48202:13;;:10;:13;;;;48183:32;;48146:69;48142:908;;;48252:1;48232:17;:21;48142:908;;;48306:1;48295:13;;:10;:13;;;;48275:33;;;;;:69;;-1:-1:-1;48342:1:0;48331:13;;:10;:13;;;;48312:32;;48275:69;48271:779;;;48381:1;48361:17;:21;48271:779;;;48435:1;48424:13;;:10;:13;;;;48404:33;;;;;:69;;-1:-1:-1;48471:1:0;48460:13;;:10;:13;;;;48441:32;;48404:69;48400:650;;;48510:1;48490:17;:21;48400:650;;;48564:1;48553:13;;:10;:13;;;;48533:33;;;;;:70;;-1:-1:-1;48600:2:0;48589:14;;:10;:14;;;;48570:33;;48533:70;48529:521;;;48640:2;48620:17;:22;48529:521;;;48695:2;48684:14;;:10;:14;;;;48664:34;;;;;:71;;-1:-1:-1;48732:2:0;48721:14;;:10;:14;;;;48702:33;;48664:71;48660:390;;;48772:2;48752:17;:22;48660:390;;;48827:2;48816:14;;:10;:14;;;;48796:34;;;;;:71;;-1:-1:-1;48864:2:0;48853:14;;:10;:14;;;;48834:33;;48796:71;48792:258;;;48904:2;48884:17;:22;48792:258;;;48959:2;48948:14;;:10;:14;;;;48928:34;;;;;:71;;-1:-1:-1;48996:2:0;48985:14;;:10;:14;;;;48966:33;;48928:71;48924:126;;;49036:2;49016:17;:22;48924:126;47273:1784;:::o;25491:295::-;25606:12;:10;:12::i;:::-;-1:-1:-1;;;;;25594:24:0;:8;-1:-1:-1;;;;;25594:24:0;;;25586:62;;;;-1:-1:-1;;;25586:62:0;;;;;;;:::i;:::-;25706:8;25661:18;:32;25680:12;:10;:12::i;:::-;-1:-1:-1;;;;;25661:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;25661:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;25661:53:0;;;;;;;;;;;25745:12;:10;:12::i;:::-;-1:-1:-1;;;;;25730:48:0;;25769:8;25730:48;;;;;;:::i;:::-;;;;;;;;25491:295;;:::o;49514:89::-;20418:12;:10;:12::i;:::-;-1:-1:-1;;;;;20407:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20407:23:0;;20399:68;;;;-1:-1:-1;;;20399:68:0;;;;;;;:::i;:::-;49578:6:::1;:17:::0;49514:89::o;50422:100::-;50497:17;;50422:100;:::o;26754:328::-;26929:41;26948:12;:10;:12::i;:::-;26962:7;26929:18;:41::i;:::-;26921:103;;;;-1:-1:-1;;;26921:103:0;;;;;;;:::i;:::-;27035:39;27049:4;27055:2;27059:7;27068:5;27035:13;:39::i;49942:468::-;50015:13;50049:16;50057:7;50049;:16::i;:::-;50041:76;;;;-1:-1:-1;;;50041:76:0;;;;;;;:::i;:::-;50134:26;;;;:17;:26;;;;;;;;:34;;:26;:34;50130:273;;;50192:24;;;;:15;:24;;;;;50185:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50130:273;50249:21;50273:10;:8;:10::i;:::-;50249:34;;50329:1;50311:7;50305:21;:25;:86;;;;;;;;;;;;;;;;;50357:7;50366:18;:7;:16;:18::i;:::-;50340:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50305:86;50298:93;;;;;43724:22;;;;:::o;49415:87::-;20418:12;:10;:12::i;:::-;-1:-1:-1;;;;;20407:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20407:23:0;;20399:68;;;;-1:-1:-1;;;20399:68:0;;;;;;;:::i;:::-;49478:9:::1;:16:::0;49415:87::o;44288:42::-;;;;;;;;;;;;;;;:::o;46219:1042::-;46287:17;:15;:17::i;:::-;46343:1;46323:17;;:21;46315:97;;;;-1:-1:-1;;;46315:97:0;;;;;;;:::i;:::-;46446:3;-1:-1:-1;;;;;46431:18:0;:11;46439:2;46431:7;:11::i;:::-;-1:-1:-1;;;;;46431:18:0;;46423:61;;;;-1:-1:-1;;;46423:61:0;;;;;;;:::i;:::-;46518:3;-1:-1:-1;;;;;46503:18:0;:11;46511:2;46503:7;:11::i;:::-;-1:-1:-1;;;;;46503:18:0;;46495:61;;;;-1:-1:-1;;;46495:61:0;;;;;;;:::i;:::-;46575:13;;;;:9;:13;;;;;;;;:22;46567:75;;;;-1:-1:-1;;;46567:75:0;;;;;;;:::i;:::-;46661:13;;;;:9;:13;;;;;;;;:22;46653:75;;;;-1:-1:-1;;;46653:75:0;;;;;;;:::i;:::-;46765:14;;;;:10;:14;;;;;;;46747;;;;;;:32;46739:93;;;;-1:-1:-1;;;46739:93:0;;;;;;;:::i;:::-;46889:14;;;;:10;:14;;;;;;:21;;46908:1;46889:18;:21::i;:::-;46853:10;:33;46864:21;46879:5;;46864:10;;:14;;:21;;;;:::i;:::-;46853:33;;;;;;;;;;;:57;;;;46956:5;46921:9;:32;46931:21;46946:5;;46931:10;;:14;;:21;;;;:::i;:::-;46921:32;;;;;;;;;;;;;;-1:-1:-1;46921:32:0;;;:40;;;;;-1:-1:-1;;46921:40:0;;;;;;46972:13;;;:9;:13;;;;;;:20;;;;46921:40;46972:20;;;;;;47003:13;;;;;;:20;;;;;;;;;47067:5;;47052:10;;47034:17;;-1:-1:-1;;47052:21:0;;:14;:21::i;:::-;47034:40;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;47126:2;47093:7;:30;47101:21;47116:5;;47101:10;;:14;;:21;;;;:::i;:::-;47093:30;;;;;;;;;;;:35;;;;47172:2;47139:7;:30;47147:21;47162:5;;47147:10;;:14;;:21;;;;:::i;:::-;47139:30;;;;;;;;;;;-1:-1:-1;47139:30:0;:35;47215:5;;47200:10;;47185:37;;47195:3;;47200:21;;:14;:21::i;:::-;47185:9;:37::i;:::-;47241:5;;:12;;47251:1;47241:9;:12::i;:::-;47233:5;:20;-1:-1:-1;;;46219:1042:0:o;25857:164::-;-1:-1:-1;;;;;25978:25:0;;;25954:4;25978:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;25857:164::o;44099:50::-;;;;;;;;;;;;;;;:::o;21087:192::-;20418:12;:10;:12::i;:::-;-1:-1:-1;;;;;20407:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;20407:23:0;;20399:68;;;;-1:-1:-1;;;20399:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21176:22:0;::::1;21168:73;;;;-1:-1:-1::0;;;21168:73:0::1;;;;;;;:::i;:::-;21252:19;21262:8;21252:9;:19::i;22694:305::-:0;22796:4;-1:-1:-1;;;;;;22833:40:0;;-1:-1:-1;;;22833:40:0;;:105;;-1:-1:-1;;;;;;;22890:48:0;;-1:-1:-1;;;22890:48:0;22833:105;:158;;;;22955:36;22979:11;22955:23;:36::i;28592:127::-;28657:4;28681:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28681:16:0;:30;;;28592:127::o;16202:98::-;16282:10;16202:98;:::o;29576:110::-;29652:26;29662:2;29666:7;29652:26;;;;;;;;;;;;:9;:26::i;35279:98::-;35337:7;35364:5;35368:1;35364;:5;:::i;:::-;35357:12;35279:98;-1:-1:-1;;;35279:98:0:o;32574:174::-;32649:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;32649:29:0;-1:-1:-1;;;;;32649:29:0;;;;;;;;:24;;32703:23;32649:24;32703:14;:23::i;:::-;-1:-1:-1;;;;;32694:46:0;;;;;;;;;;;32574:174;;:::o;28886:348::-;28979:4;29004:16;29012:7;29004;:16::i;:::-;28996:73;;;;-1:-1:-1;;;28996:73:0;;;;;;;:::i;:::-;29080:13;29096:23;29111:7;29096:14;:23::i;:::-;29080:39;;29149:5;-1:-1:-1;;;;;29138:16:0;:7;-1:-1:-1;;;;;29138:16:0;;:51;;;;29182:7;-1:-1:-1;;;;;29158:31:0;:20;29170:7;29158:11;:20::i;:::-;-1:-1:-1;;;;;29158:31:0;;29138:51;:87;;;;29193:32;29210:5;29217:7;29193:16;:32::i;:::-;29130:96;28886:348;-1:-1:-1;;;;28886:348:0:o;31878:578::-;32037:4;-1:-1:-1;;;;;32010:31:0;:23;32025:7;32010:14;:23::i;:::-;-1:-1:-1;;;;;32010:31:0;;32002:85;;;;-1:-1:-1;;;32002:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32106:16:0;;32098:65;;;;-1:-1:-1;;;32098:65:0;;;;;;;:::i;:::-;32176:39;32197:4;32203:2;32207:7;32176:20;:39::i;:::-;32280:29;32297:1;32301:7;32280:8;:29::i;:::-;-1:-1:-1;;;;;32322:15:0;;;;;;:9;:15;;;;;:20;;32341:1;;32322:15;:20;;32341:1;;32322:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32353:13:0;;;;;;:9;:13;;;;;:18;;32370:1;;32353:13;:18;;32370:1;;32353:18;:::i;:::-;;;;-1:-1:-1;;32382:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32382:21:0;-1:-1:-1;;;;;32382:21:0;;;;;;;;;32421:27;;32382:16;;32421:27;;;;;;;31878:578;;;:::o;36540:98::-;36598:7;36625:5;36629:1;36625;:5;:::i;21287:173::-;21362:6;;;-1:-1:-1;;;;;21379:17:0;;;-1:-1:-1;;;;;;21379:17:0;;;;;;;21412:40;;21362:6;;;21379:17;21362:6;;21412:40;;21343:16;;21412:40;21287:173;;:::o;27964:315::-;28121:28;28131:4;28137:2;28141:7;28121:9;:28::i;:::-;28168:48;28191:4;28197:2;28201:7;28210:5;28168:22;:48::i;:::-;28160:111;;;;-1:-1:-1;;;28160:111:0;;;;;;;:::i;49175:114::-;49235:13;49268;49261:20;;;;;:::i;16642:723::-;16698:13;16919:10;16915:53;;-1:-1:-1;16946:10:0;;;;;;;;;;;;-1:-1:-1;;;16946:10:0;;;;;;16915:53;16993:5;16978:12;17034:78;17041:9;;17034:78;;17067:8;;;;:::i;:::-;;-1:-1:-1;17090:10:0;;-1:-1:-1;17098:2:0;17090:10;;:::i;:::-;;;17034:78;;;17122:19;17154:6;17144:17;;;;;;-1:-1:-1;;;17144:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17144:17:0;;17122:39;;17172:154;17179:10;;17172:154;;17206:11;17216:1;17206:11;;:::i;:::-;;-1:-1:-1;17275:10:0;17283:2;17275:5;:10;:::i;:::-;17262:24;;:2;:24;:::i;:::-;17249:39;;17232:6;17239;17232:14;;;;;;-1:-1:-1;;;17232:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;17232:56:0;;;;;;;;-1:-1:-1;17303:11:0;17312:2;17303:11;;:::i;:::-;;;17172:154;;1515:157;-1:-1:-1;;;;;;1624:40:0;;-1:-1:-1;;;1624:40:0;1515:157;;;:::o;29913:321::-;30043:18;30049:2;30053:7;30043:5;:18::i;:::-;30094:54;30125:1;30129:2;30133:7;30142:5;30094:22;:54::i;:::-;30072:154;;;;-1:-1:-1;;;30072:154:0;;;;;;;:::i;39135:589::-;39279:45;39306:4;39312:2;39316:7;39279:26;:45::i;:::-;-1:-1:-1;;;;;39341:18:0;;39337:187;;39376:40;39408:7;39376:31;:40::i;:::-;39337:187;;;39446:2;-1:-1:-1;;;;;39438:10:0;:4;-1:-1:-1;;;;;39438:10:0;;39434:90;;39465:47;39498:4;39504:7;39465:32;:47::i;:::-;-1:-1:-1;;;;;39538:16:0;;39534:183;;39571:45;39608:7;39571:36;:45::i;:::-;39534:183;;;39644:4;-1:-1:-1;;;;;39638:10:0;:2;-1:-1:-1;;;;;39638:10:0;;39634:83;;39665:40;39693:2;39697:7;39665:27;:40::i;33313:803::-;33468:4;33489:15;:2;-1:-1:-1;;;;;33489:13:0;;:15::i;:::-;33485:624;;;33541:2;-1:-1:-1;;;;;33525:36:0;;33562:12;:10;:12::i;:::-;33576:4;33582:7;33591:5;33525:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33525:72:0;;;;;;;;-1:-1:-1;;33525:72:0;;;;;;;;;;;;:::i;:::-;;;33521:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33771:13:0;;33767:272;;33814:60;;-1:-1:-1;;;33814:60:0;;;;;;;:::i;33767:272::-;33989:6;33983:13;33974:6;33970:2;33966:15;33959:38;33521:533;-1:-1:-1;;;;;;33648:55:0;-1:-1:-1;;;33648:55:0;;-1:-1:-1;33641:62:0;;33485:624;-1:-1:-1;34093:4:0;33313:803;;;;;;:::o;30570:382::-;-1:-1:-1;;;;;30650:16:0;;30642:61;;;;-1:-1:-1;;;30642:61:0;;;;;;;:::i;:::-;30723:16;30731:7;30723;:16::i;:::-;30722:17;30714:58;;;;-1:-1:-1;;;30714:58:0;;;;;;;:::i;:::-;30785:45;30814:1;30818:2;30822:7;30785:20;:45::i;:::-;-1:-1:-1;;;;;30843:13:0;;;;;;:9;:13;;;;;:18;;30860:1;;30843:13;:18;;30860:1;;30843:18;:::i;:::-;;;;-1:-1:-1;;30872:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30872:21:0;-1:-1:-1;;;;;30872:21:0;;;;;;;;30911:33;;30872:16;;;30911:33;;30872:16;;30911:33;30570:382;;:::o;40447:164::-;40551:10;:17;;40524:24;;;;:15;:24;;;;;:44;;;40579:24;;;;;;;;;;;;40447:164::o;41238:988::-;41504:22;41554:1;41529:22;41546:4;41529:16;:22::i;:::-;:26;;;;:::i;:::-;41566:18;41587:26;;;:17;:26;;;;;;41504:51;;-1:-1:-1;41720:28:0;;;41716:328;;-1:-1:-1;;;;;41787:18:0;;41765:19;41787:18;;;:12;:18;;;;;;;;:34;;;;;;;;;41838:30;;;;;;:44;;;41955:30;;:17;:30;;;;;:43;;;41716:328;-1:-1:-1;42140:26:0;;;;:17;:26;;;;;;;;42133:33;;;-1:-1:-1;;;;;42184:18:0;;;;;:12;:18;;;;;:34;;;;;;;42177:41;41238:988::o;42521:1079::-;42799:10;:17;42774:22;;42799:21;;42819:1;;42799:21;:::i;:::-;42831:18;42852:24;;;:15;:24;;;;;;43225:10;:26;;42774:46;;-1:-1:-1;42852:24:0;;42774:46;;43225:26;;;;-1:-1:-1;;;43225:26:0;;;;;;;;;;;;;;;;;43203:48;;43289:11;43264:10;43275;43264:22;;;;;;-1:-1:-1;;;43264:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;43369:28;;;:15;:28;;;;;;;:41;;;43541:24;;;;;43534:31;43576:10;:16;;;;;-1:-1:-1;;;43576:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;42521:1079;;;;:::o;40025:221::-;40110:14;40127:20;40144:2;40127:16;:20::i;:::-;-1:-1:-1;;;;;40158:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;40203:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40025:221:0:o;8549:387::-;8872:20;8920:8;;;8549:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:162;873:20;;929:13;;922:21;912:32;;902:2;;958:1;955;948:12;973:233;;1071:3;1064:4;1056:6;1052:17;1048:27;1038:2;;1093:5;1086;1079:20;1038:2;1119:81;1196:3;1187:6;1174:20;1167:4;1159:6;1155:17;1119:81;:::i;1211:198::-;;1323:2;1311:9;1302:7;1298:23;1294:32;1291:2;;;1344:6;1336;1329:22;1291:2;1372:31;1393:9;1372:31;:::i;1414:274::-;;;1543:2;1531:9;1522:7;1518:23;1514:32;1511:2;;;1564:6;1556;1549:22;1511:2;1592:31;1613:9;1592:31;:::i;:::-;1582:41;;1642:40;1678:2;1667:9;1663:18;1642:40;:::i;:::-;1632:50;;1501:187;;;;;:::o;1693:342::-;;;;1839:2;1827:9;1818:7;1814:23;1810:32;1807:2;;;1860:6;1852;1845:22;1807:2;1888:31;1909:9;1888:31;:::i;:::-;1878:41;;1938:40;1974:2;1963:9;1959:18;1938:40;:::i;:::-;1928:50;;2025:2;2014:9;2010:18;1997:32;1987:42;;1797:238;;;;;:::o;2040:702::-;;;;;2212:3;2200:9;2191:7;2187:23;2183:33;2180:2;;;2234:6;2226;2219:22;2180:2;2262:31;2283:9;2262:31;:::i;:::-;2252:41;;2312:40;2348:2;2337:9;2333:18;2312:40;:::i;:::-;2302:50;;2399:2;2388:9;2384:18;2371:32;2361:42;;2454:2;2443:9;2439:18;2426:32;2481:18;2473:6;2470:30;2467:2;;;2518:6;2510;2503:22;2467:2;2546:22;;2599:4;2591:13;;2587:27;-1:-1:-1;2577:2:1;;2633:6;2625;2618:22;2577:2;2661:75;2728:7;2723:2;2710:16;2705:2;2701;2697:11;2661:75;:::i;:::-;2651:85;;;2170:572;;;;;;;:::o;2747:268::-;;;2873:2;2861:9;2852:7;2848:23;2844:32;2841:2;;;2894:6;2886;2879:22;2841:2;2922:31;2943:9;2922:31;:::i;:::-;2912:41;;2972:37;3005:2;2994:9;2990:18;2972:37;:::i;3020:266::-;;;3149:2;3137:9;3128:7;3124:23;3120:32;3117:2;;;3170:6;3162;3155:22;3117:2;3198:31;3219:9;3198:31;:::i;:::-;3188:41;3276:2;3261:18;;;;3248:32;;-1:-1:-1;;;3107:179:1:o;3291:334::-;;;;3437:2;3425:9;3416:7;3412:23;3408:32;3405:2;;;3458:6;3450;3443:22;3405:2;3486:31;3507:9;3486:31;:::i;:::-;3476:41;3564:2;3549:18;;3536:32;;-1:-1:-1;3615:2:1;3600:18;;;3587:32;;3395:230;-1:-1:-1;;;3395:230:1:o;3630:257::-;;3741:2;3729:9;3720:7;3716:23;3712:32;3709:2;;;3762:6;3754;3747:22;3709:2;3806:9;3793:23;3825:32;3851:5;3825:32;:::i;3892:261::-;;4014:2;4002:9;3993:7;3989:23;3985:32;3982:2;;;4035:6;4027;4020:22;3982:2;4072:9;4066:16;4091:32;4117:5;4091:32;:::i;4158:344::-;;4280:2;4268:9;4259:7;4255:23;4251:32;4248:2;;;4301:6;4293;4286:22;4248:2;4346:9;4333:23;4379:18;4371:6;4368:30;4365:2;;;4416:6;4408;4401:22;4365:2;4444:52;4488:7;4479:6;4468:9;4464:22;4444:52;:::i;4507:190::-;;4619:2;4607:9;4598:7;4594:23;4590:32;4587:2;;;4640:6;4632;4625:22;4587:2;-1:-1:-1;4668:23:1;;4577:120;-1:-1:-1;4577:120:1:o;4702:482::-;;;;4855:2;4843:9;4834:7;4830:23;4826:32;4823:2;;;4876:6;4868;4861:22;4823:2;4917:9;4904:23;4894:33;;4946:37;4979:2;4968:9;4964:18;4946:37;:::i;:::-;4936:47;;5034:2;5023:9;5019:18;5006:32;5061:18;5053:6;5050:30;5047:2;;;5098:6;5090;5083:22;5047:2;5126:52;5170:7;5161:6;5150:9;5146:22;5126:52;:::i;:::-;5116:62;;;4813:371;;;;;:::o;5189:259::-;;5270:5;5264:12;5297:6;5292:3;5285:19;5313:63;5369:6;5362:4;5357:3;5353:14;5346:4;5339:5;5335:16;5313:63;:::i;:::-;5430:2;5409:15;-1:-1:-1;;5405:29:1;5396:39;;;;5437:4;5392:50;;5240:208;-1:-1:-1;;5240:208:1:o;5453:470::-;;5670:6;5664:13;5686:53;5732:6;5727:3;5720:4;5712:6;5708:17;5686:53;:::i;:::-;5802:13;;5761:16;;;;5824:57;5802:13;5761:16;5858:4;5846:17;;5824:57;:::i;:::-;5897:20;;5640:283;-1:-1:-1;;;;5640:283:1:o;5928:203::-;-1:-1:-1;;;;;6092:32:1;;;;6074:51;;6062:2;6047:18;;6029:102::o;6136:490::-;-1:-1:-1;;;;;6405:15:1;;;6387:34;;6457:15;;6452:2;6437:18;;6430:43;6504:2;6489:18;;6482:34;;;6552:3;6547:2;6532:18;;6525:31;;;6136:490;;6573:47;;6600:19;;6592:6;6573:47;:::i;:::-;6565:55;6339:287;-1:-1:-1;;;;;;6339:287:1:o;6631:635::-;6802:2;6854:21;;;6924:13;;6827:18;;;6946:22;;;6631:635;;6802:2;7025:15;;;;6999:2;6984:18;;;6631:635;7071:169;7085:6;7082:1;7079:13;7071:169;;;7146:13;;7134:26;;7215:15;;;;7180:12;;;;7107:1;7100:9;7071:169;;;-1:-1:-1;7257:3:1;;6782:484;-1:-1:-1;;;;;;6782:484:1:o;7271:187::-;7436:14;;7429:22;7411:41;;7399:2;7384:18;;7366:92::o;7463:221::-;;7612:2;7601:9;7594:21;7632:46;7674:2;7663:9;7659:18;7651:6;7632:46;:::i;7689:354::-;7891:2;7873:21;;;7930:2;7910:18;;;7903:30;7969:32;7964:2;7949:18;;7942:60;8034:2;8019:18;;7863:180::o;8048:427::-;8250:2;8232:21;;;8289:2;8269:18;;;8262:30;8328:34;8323:2;8308:18;;8301:62;8399:33;8394:2;8379:18;;8372:61;8465:3;8450:19;;8222:253::o;8480:407::-;8682:2;8664:21;;;8721:2;8701:18;;;8694:30;8760:34;8755:2;8740:18;;8733:62;-1:-1:-1;;;8826:2:1;8811:18;;8804:41;8877:3;8862:19;;8654:233::o;8892:414::-;9094:2;9076:21;;;9133:2;9113:18;;;9106:30;9172:34;9167:2;9152:18;;9145:62;-1:-1:-1;;;9238:2:1;9223:18;;9216:48;9296:3;9281:19;;9066:240::o;9311:402::-;9513:2;9495:21;;;9552:2;9532:18;;;9525:30;9591:34;9586:2;9571:18;;9564:62;-1:-1:-1;;;9657:2:1;9642:18;;9635:36;9703:3;9688:19;;9485:228::o;9718:352::-;9920:2;9902:21;;;9959:2;9939:18;;;9932:30;9998;9993:2;9978:18;;9971:58;10061:2;10046:18;;9892:178::o;10075:400::-;10277:2;10259:21;;;10316:2;10296:18;;;10289:30;10355:34;10350:2;10335:18;;10328:62;-1:-1:-1;;;10421:2:1;10406:18;;10399:34;10465:3;10450:19;;10249:226::o;10480:349::-;10682:2;10664:21;;;10721:2;10701:18;;;10694:30;10760:27;10755:2;10740:18;;10733:55;10820:2;10805:18;;10654:175::o;10834:408::-;11036:2;11018:21;;;11075:2;11055:18;;;11048:30;11114:34;11109:2;11094:18;;11087:62;-1:-1:-1;;;11180:2:1;11165:18;;11158:42;11232:3;11217:19;;11008:234::o;11247:354::-;11449:2;11431:21;;;11488:2;11468:18;;;11461:30;11527:32;11522:2;11507:18;;11500:60;11592:2;11577:18;;11421:180::o;11606:420::-;11808:2;11790:21;;;11847:2;11827:18;;;11820:30;11886:34;11881:2;11866:18;;11859:62;11957:26;11952:2;11937:18;;11930:54;12016:3;12001:19;;11780:246::o;12031:404::-;12233:2;12215:21;;;12272:2;12252:18;;;12245:30;12311:34;12306:2;12291:18;;12284:62;-1:-1:-1;;;12377:2:1;12362:18;;12355:38;12425:3;12410:19;;12205:230::o;12440:406::-;12642:2;12624:21;;;12681:2;12661:18;;;12654:30;12720:34;12715:2;12700:18;;12693:62;-1:-1:-1;;;12786:2:1;12771:18;;12764:40;12836:3;12821:19;;12614:232::o;12851:405::-;13053:2;13035:21;;;13092:2;13072:18;;;13065:30;13131:34;13126:2;13111:18;;13104:62;-1:-1:-1;;;13197:2:1;13182:18;;13175:39;13246:3;13231:19;;13025:231::o;13261:355::-;13463:2;13445:21;;;13502:2;13482:18;;;13475:30;13541:33;13536:2;13521:18;;13514:61;13607:2;13592:18;;13435:181::o;13621:356::-;13823:2;13805:21;;;13842:18;;;13835:30;13901:34;13896:2;13881:18;;13874:62;13968:2;13953:18;;13795:182::o;13982:355::-;14184:2;14166:21;;;14223:2;14203:18;;;14196:30;14262:33;14257:2;14242:18;;14235:61;14328:2;14313:18;;14156:181::o;14342:408::-;14544:2;14526:21;;;14583:2;14563:18;;;14556:30;14622:34;14617:2;14602:18;;14595:62;-1:-1:-1;;;14688:2:1;14673:18;;14666:42;14740:3;14725:19;;14516:234::o;14755:356::-;14957:2;14939:21;;;14976:18;;;14969:30;15035:34;15030:2;15015:18;;15008:62;15102:2;15087:18;;14929:182::o;15116:405::-;15318:2;15300:21;;;15357:2;15337:18;;;15330:30;15396:34;15391:2;15376:18;;15369:62;-1:-1:-1;;;15462:2:1;15447:18;;15440:39;15511:3;15496:19;;15290:231::o;15526:404::-;15728:2;15710:21;;;15767:2;15747:18;;;15740:30;15806:34;15801:2;15786:18;;15779:62;-1:-1:-1;;;15872:2:1;15857:18;;15850:38;15920:3;15905:19;;15700:230::o;15935:411::-;16137:2;16119:21;;;16176:2;16156:18;;;16149:30;16215:34;16210:2;16195:18;;16188:62;-1:-1:-1;;;16281:2:1;16266:18;;16259:45;16336:3;16321:19;;16109:237::o;16351:397::-;16553:2;16535:21;;;16592:2;16572:18;;;16565:30;16631:34;16626:2;16611:18;;16604:62;-1:-1:-1;;;16697:2:1;16682:18;;16675:31;16738:3;16723:19;;16525:223::o;16753:412::-;16955:2;16937:21;;;16994:2;16974:18;;;16967:30;17033:34;17028:2;17013:18;;17006:62;-1:-1:-1;;;17099:2:1;17084:18;;17077:46;17155:3;17140:19;;16927:238::o;17170:349::-;17372:2;17354:21;;;17411:2;17391:18;;;17384:30;17450:27;17445:2;17430:18;;17423:55;17510:2;17495:18;;17344:175::o;17524:413::-;17726:2;17708:21;;;17765:2;17745:18;;;17738:30;17804:34;17799:2;17784:18;;17777:62;-1:-1:-1;;;17870:2:1;17855:18;;17848:47;17927:3;17912:19;;17698:239::o;17942:400::-;18144:2;18126:21;;;18183:2;18163:18;;;18156:30;18222:34;18217:2;18202:18;;18195:62;-1:-1:-1;;;18288:2:1;18273:18;;18266:34;18332:3;18317:19;;18116:226::o;18347:408::-;18549:2;18531:21;;;18588:2;18568:18;;;18561:30;18627:34;18622:2;18607:18;;18600:62;-1:-1:-1;;;18693:2:1;18678:18;;18671:42;18745:3;18730:19;;18521:234::o;18760:342::-;18962:2;18944:21;;;19001:2;18981:18;;;18974:30;-1:-1:-1;;;19035:2:1;19020:18;;19013:48;19093:2;19078:18;;18934:168::o;19107:407::-;19309:2;19291:21;;;19348:2;19328:18;;;19321:30;19387:34;19382:2;19367:18;;19360:62;-1:-1:-1;;;19453:2:1;19438:18;;19431:41;19504:3;19489:19;;19281:233::o;19519:177::-;19665:25;;;19653:2;19638:18;;19620:76::o;19701:128::-;;19772:1;19768:6;19765:1;19762:13;19759:2;;;19778:18;;:::i;:::-;-1:-1:-1;19814:9:1;;19749:80::o;19834:120::-;;19900:1;19890:2;;19905:18;;:::i;:::-;-1:-1:-1;19939:9:1;;19880:74::o;19959:168::-;;20065:1;20061;20057:6;20053:14;20050:1;20047:21;20042:1;20035:9;20028:17;20024:45;20021:2;;;20072:18;;:::i;:::-;-1:-1:-1;20112:9:1;;20011:116::o;20132:125::-;;20200:1;20197;20194:8;20191:2;;;20205:18;;:::i;:::-;-1:-1:-1;20242:9:1;;20181:76::o;20262:258::-;20334:1;20344:113;20358:6;20355:1;20352:13;20344:113;;;20434:11;;;20428:18;20415:11;;;20408:39;20380:2;20373:10;20344:113;;;20475:6;20472:1;20469:13;20466:2;;;-1:-1:-1;;20510:1:1;20492:16;;20485:27;20315:205::o;20525:380::-;20610:1;20600:12;;20657:1;20647:12;;;20668:2;;20722:4;20714:6;20710:17;20700:27;;20668:2;20775;20767:6;20764:14;20744:18;20741:38;20738:2;;;20821:10;20816:3;20812:20;20809:1;20802:31;20856:4;20853:1;20846:15;20884:4;20881:1;20874:15;20738:2;;20580:325;;;:::o;20910:135::-;;-1:-1:-1;;20970:17:1;;20967:2;;;20990:18;;:::i;:::-;-1:-1:-1;21037:1:1;21026:13;;20957:88::o;21050:112::-;;21108:1;21098:2;;21113:18;;:::i;:::-;-1:-1:-1;21147:9:1;;21088:74::o;21167:127::-;21228:10;21223:3;21219:20;21216:1;21209:31;21259:4;21256:1;21249:15;21283:4;21280:1;21273:15;21299:127;21360:10;21355:3;21351:20;21348:1;21341:31;21391:4;21388:1;21381:15;21415:4;21412:1;21405:15;21431:127;21492:10;21487:3;21483:20;21480:1;21473:31;21523:4;21520:1;21513:15;21547:4;21544:1;21537:15;21563:133;-1:-1:-1;;;;;;21639:32:1;;21629:43;;21619:2;;21686:1;21683;21676:12

Swarm Source

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