ETH Price: $2,679.25 (-2.17%)

Token

Trash Pandaz (TRASHPANDAZ)
 

Overview

Max Total Supply

475 TRASHPANDAZ

Holders

217

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 TRASHPANDAZ
0xEb29f7BeDf4108f6ece19034Dc9c17E90B7Ae853
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:
TrashPandaz

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/*
  _______ _____            _____ _    _ _____        _   _ _____          ______
 |__   __|  __ \    /\    / ____| |  | |  __ \ /\   | \ | |  __ \   /\   |___  /
    | |  | |__) |  /  \  | (___ | |__| | |__) /  \  |  \| | |  | | /  \     / / 
    | |  |  _  /  / /\ \  \___ \|  __  |  ___/ /\ \ | . ` | |  | |/ /\ \   / /  
    | |  | | \ \ / ____ \ ____) | |  | | |  / ____ \| |\  | |__| / ____ \ / /__ 
    |_|  |_|  \_|_/    \_\_____/|_|  |_|_| /_/    \_\_| \_|_____/_/    \_|_____|

*/

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

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC721/IERC721.sol

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol

pragma solidity ^0.8.0;


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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

// File @openzeppelin/contracts/utils/Strings.sol

pragma solidity ^0.8.0;

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

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

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

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

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

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

pragma solidity ^0.8.0;


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

// File @openzeppelin/contracts/token/ERC721/ERC721.sol

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol

pragma solidity ^0.8.0;


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

// File @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol

pragma solidity ^0.8.0;



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

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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File contracts/trashpandaz.sol

pragma solidity ^0.8.4;


contract TrashPandaz is ERC721Enumerable, Ownable {  
    using Address for address;
    
    // Trash Pandaz
    bool public saleLive = false;
    bool public presaleLive = false;
    uint256 constant MAX_PANDAS = 10000;
    uint256 constant PRIVATE_PANDAS = 2000;
	uint256 public reserved = 300;
    uint256 public price = 0.03 ether;
    uint256 public presaleAmountMinted;
    uint256 public presaleLimit = 2;
    mapping(address => bool) public presaleList;
    mapping(address => uint256) public presaleListPurchases;
    string public baseTokenURI;
    string private _contractURI = "https://trashpandaz.s3.us-east-2.amazonaws.com/phmeta/os";
    constructor (string memory newBaseURI) ERC721 ("Trash Pandaz", "TRASHPANDAZ") {
        setBaseURI(newBaseURI);
    }

    // Public Functions
    
    // Override so the openzeppelin tokenURI() method will use this method to create the full tokenURI instead
    function _baseURI() internal view virtual override returns (string memory) {
		return baseTokenURI;
    }

    // View contractURI
    function contractURI() external view returns (string memory){
		return _contractURI;
    }

    // See which address owns which tokens
    function tokensOfOwner(address addr) public view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(addr);
        uint256[] memory tokenId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokenId[i] = tokenOfOwnerByIndex(addr, i);
        }
        return tokenId;
    }

    // Minting
    function mintToken(uint256 _amount) public payable {
	    uint256 supply = totalSupply();
        require( saleLive,                     "Sale is not active" );
        require( _amount > 0 && _amount < 6,    "Can only mint up to 5 tokens at once" );
        require( supply + _amount <= MAX_PANDAS, "Cannot mint more than max supply" );
        require( msg.value == price * _amount,   "Wrong amount of ETH sent" );
        for(uint256 i; i < _amount; i++){
            _safeMint( msg.sender, supply + i );
        }
    }
    
    // Presale minting
    function presaleMint(uint256 _amount) external payable {
	    uint256 supply = totalSupply();
        require( presaleLive, "Presale is not active");
        require( presaleList[msg.sender], "Not on presale list");
        require( supply + _amount < MAX_PANDAS, "Cannot mint more than max supply" );
        require( presaleAmountMinted + _amount <= PRIVATE_PANDAS, "Presale sold out" );
        require( presaleListPurchases[msg.sender] + _amount <= presaleLimit, "Presale limit reached" );
        require( price * _amount <= msg.value, "Wrong amount of ETH sent" );
        for (uint256 i; i < _amount; i++) {
            presaleAmountMinted++;
            presaleListPurchases[msg.sender]++;
            _safeMint(msg.sender, supply + i );
        }
    }

    // Owner Functions 
    
    // Reserve minting
    function mintReserved(uint256 _amount) public onlyOwner {
        require( _amount <= reserved, "Cannot reserve more than reserved" );
        reserved -= _amount;
        uint256 supply = totalSupply();
        for(uint256 i; i < _amount; i++){
            _safeMint( msg.sender, supply + i );
        }
    }

    // Start and stop sale
    function setSaleLive(bool val) public onlyOwner {
        saleLive = val;
    }
    
    // Start and stop presale
    function setPresaleLive(bool val) public onlyOwner {
        presaleLive = val;
    }
    
    // Add to presale
    function addToPresaleList(address[] calldata entries) external onlyOwner {
        for(uint256 i = 0; i < entries.length; i++) {
            address entry = entries[i];
            require(entry != address(0), "Not a valid address");
            require(!presaleList[entry], "Address already exists on presale list");

            presaleList[entry] = true;
        }   
    }
    
    // Remove from presale
        function removeFromPresaleList(address[] calldata entries) external onlyOwner {
        for(uint256 i = 0; i < entries.length; i++) {
            address entry = entries[i];
            require(entry != address(0), "Not an address");
            
            presaleList[entry] = false;
        }
    }
    

    // Set baseURI
    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
    }
    
    // Set contractURI
    function setContractURI(string memory newContractURI) external onlyOwner {
		_contractURI = newContractURI;
    }

    // Change price
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }

    // Withdraw to owner
    function withdraw() public onlyOwner {
        (bool success, ) = owner().call{value: address(this).balance}("");
        require(success, "TrashPandaz: Withdraw Failed");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"newBaseURI","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":[{"internalType":"address[]","name":"entries","type":"address[]"}],"name":"addToPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleAmountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleListPurchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"entries","type":"address[]"}],"name":"removeFromPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","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":"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":[],"name":"saleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newContractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setPresaleLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setSaleLive","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":[{"internalType":"address","name":"addr","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff02191690831515021790555061012c600b55666a94d74f430000600c556002600e556040518060600160405280603881526020016200590f60389139601290805190602001906200008192919062000330565b503480156200008f57600080fd5b5060405162005947380380620059478339818101604052810190620000b591906200045e565b6040518060400160405280600c81526020017f54726173682050616e64617a00000000000000000000000000000000000000008152506040518060400160405280600b81526020017f545241534850414e44415a00000000000000000000000000000000000000000081525081600090805190602001906200013992919062000330565b5080600190805190602001906200015292919062000330565b50505062000175620001696200018d60201b60201c565b6200019560201b60201c565b62000186816200025b60201b60201c565b50620006b6565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200026b6200018d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002916200030660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e190620004d6565b60405180910390fd5b80601190805190602001906200030292919062000330565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200033e906200059e565b90600052602060002090601f016020900481019282620003625760008555620003ae565b82601f106200037d57805160ff1916838001178555620003ae565b82800160010185558215620003ae579182015b82811115620003ad57825182559160200191906001019062000390565b5b509050620003bd9190620003c1565b5090565b5b80821115620003dc576000816000905550600101620003c2565b5090565b6000620003f7620003f18462000521565b620004f8565b9050828152602081018484840111156200041657620004156200066d565b5b6200042384828562000568565b509392505050565b600082601f83011262000443576200044262000668565b5b815162000455848260208601620003e0565b91505092915050565b60006020828403121562000477576200047662000677565b5b600082015167ffffffffffffffff81111562000498576200049762000672565b5b620004a6848285016200042b565b91505092915050565b6000620004be60208362000557565b9150620004cb826200068d565b602082019050919050565b60006020820190508181036000830152620004f181620004af565b9050919050565b60006200050462000517565b9050620005128282620005d4565b919050565b6000604051905090565b600067ffffffffffffffff8211156200053f576200053e62000639565b5b6200054a826200067c565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005885780820151818401526020810190506200056b565b8381111562000598576000848401525b50505050565b60006002820490506001821680620005b757607f821691505b60208210811415620005ce57620005cd6200060a565b5b50919050565b620005df826200067c565b810181811067ffffffffffffffff8211171562000601576200060062000639565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61524980620006c66000396000f3fe6080604052600436106102465760003560e01c80638462151c11610139578063b88d4fde116100b6578063d547cfb71161007a578063d547cfb714610880578063e081b781146108ab578063e8a3d485146108d6578063e985e9c514610901578063f2fde38b1461093e578063fe60d12c1461096757610246565b8063b88d4fde146107a5578063c634d032146107ce578063c87b56dd146107ea578063c9b298f114610827578063d46d35ad1461084357610246565b806395d89b41116100fd57806395d89b41146106d45780639a5d140b146106ff578063a035b1fe14610728578063a22cb46514610753578063b179e0601461077c57610246565b80638462151c146105f15780638da5cb5b1461062e5780638f0c62cc1461065957806391b7f5ed14610682578063938e3d7b146106ab57610246565b80633ccfd60b116101c75780636352211e1161018b5780636352211e1461050c57806370a0823114610549578063715018a6146105865780637204a3c91461059d57806383a9e049146105c657610246565b80633ccfd60b1461043b57806342842e0e146104525780634f6ccce71461047b578063525b3fe3146104b857806355f804b3146104e357610246565b806318160ddd1161020e57806318160ddd1461035657806323b872dd146103815780632f745c59146103aa578063342a891f146103e75780633c4c7bb41461041257610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806312fb92e014610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906139b9565b610992565b60405161027f9190614100565b60405180910390f35b34801561029457600080fd5b5061029d610a0c565b6040516102aa919061411b565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613a5c565b610a9e565b6040516102e79190614077565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906138ff565b610b23565b005b34801561032557600080fd5b50610340600480360381019061033b919061377c565b610c3b565b60405161034d9190614100565b60405180910390f35b34801561036257600080fd5b5061036b610c5b565b604051610378919061451d565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906137e9565b610c68565b005b3480156103b657600080fd5b506103d160048036038101906103cc91906138ff565b610cc8565b6040516103de919061451d565b60405180910390f35b3480156103f357600080fd5b506103fc610d6d565b604051610409919061451d565b60405180910390f35b34801561041e57600080fd5b506104396004803603810190610434919061398c565b610d73565b005b34801561044757600080fd5b50610450610e0c565b005b34801561045e57600080fd5b50610479600480360381019061047491906137e9565b610f3e565b005b34801561048757600080fd5b506104a2600480360381019061049d9190613a5c565b610f5e565b6040516104af919061451d565b60405180910390f35b3480156104c457600080fd5b506104cd610fcf565b6040516104da919061451d565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190613a13565b610fd5565b005b34801561051857600080fd5b50610533600480360381019061052e9190613a5c565b61106b565b6040516105409190614077565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b919061377c565b61111d565b60405161057d919061451d565b60405180910390f35b34801561059257600080fd5b5061059b6111d5565b005b3480156105a957600080fd5b506105c460048036038101906105bf919061393f565b61125d565b005b3480156105d257600080fd5b506105db611481565b6040516105e89190614100565b60405180910390f35b3480156105fd57600080fd5b506106186004803603810190610613919061377c565b611494565b60405161062591906140de565b60405180910390f35b34801561063a57600080fd5b50610643611542565b6040516106509190614077565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b919061398c565b61156c565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613a5c565b611605565b005b3480156106b757600080fd5b506106d260048036038101906106cd9190613a13565b61168b565b005b3480156106e057600080fd5b506106e9611721565b6040516106f6919061411b565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190613a5c565b6117b3565b005b34801561073457600080fd5b5061073d6118d1565b60405161074a919061451d565b60405180910390f35b34801561075f57600080fd5b5061077a600480360381019061077591906138bf565b6118d7565b005b34801561078857600080fd5b506107a3600480360381019061079e919061393f565b611a58565b005b3480156107b157600080fd5b506107cc60048036038101906107c7919061383c565b611bef565b005b6107e860048036038101906107e39190613a5c565b611c51565b005b3480156107f657600080fd5b50610811600480360381019061080c9190613a5c565b611dd2565b60405161081e919061411b565b60405180910390f35b610841600480360381019061083c9190613a5c565b611e79565b005b34801561084f57600080fd5b5061086a6004803603810190610865919061377c565b612185565b604051610877919061451d565b60405180910390f35b34801561088c57600080fd5b5061089561219d565b6040516108a2919061411b565b60405180910390f35b3480156108b757600080fd5b506108c061222b565b6040516108cd9190614100565b60405180910390f35b3480156108e257600080fd5b506108eb61223e565b6040516108f8919061411b565b60405180910390f35b34801561090d57600080fd5b50610928600480360381019061092391906137a9565b6122d0565b6040516109359190614100565b60405180910390f35b34801561094a57600080fd5b506109656004803603810190610960919061377c565b612364565b005b34801561097357600080fd5b5061097c61245c565b604051610989919061451d565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a055750610a0482612462565b5b9050919050565b606060008054610a1b90614811565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4790614811565b8015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b5050505050905090565b6000610aa982612544565b610ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adf9061431d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2e8261106b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b96906143bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bbe6125b0565b73ffffffffffffffffffffffffffffffffffffffff161480610bed5750610bec81610be76125b0565b6122d0565b5b610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c239061429d565b60405180910390fd5b610c3683836125b8565b505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000600880549050905090565b610c79610c736125b0565b82612671565b610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf906143fd565b60405180910390fd5b610cc383838361274f565b505050565b6000610cd38361111d565b8210610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b9061415d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d5481565b610d7b6125b0565b73ffffffffffffffffffffffffffffffffffffffff16610d99611542565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de69061433d565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b610e146125b0565b73ffffffffffffffffffffffffffffffffffffffff16610e32611542565b73ffffffffffffffffffffffffffffffffffffffff1614610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f9061433d565b60405180910390fd5b6000610e92611542565b73ffffffffffffffffffffffffffffffffffffffff1647604051610eb590614062565b60006040518083038185875af1925050503d8060008114610ef2576040519150601f19603f3d011682016040523d82523d6000602084013e610ef7565b606091505b5050905080610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f329061427d565b60405180910390fd5b50565b610f5983838360405180602001604052806000815250611bef565b505050565b6000610f68610c5b565b8210610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa09061443d565b60405180910390fd5b60088281548110610fbd57610fbc6149aa565b5b90600052602060002001549050919050565b600e5481565b610fdd6125b0565b73ffffffffffffffffffffffffffffffffffffffff16610ffb611542565b73ffffffffffffffffffffffffffffffffffffffff1614611051576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110489061433d565b60405180910390fd5b806011908051906020019061106792919061353a565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b906142dd565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611185906142bd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111dd6125b0565b73ffffffffffffffffffffffffffffffffffffffff166111fb611542565b73ffffffffffffffffffffffffffffffffffffffff1614611251576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112489061433d565b60405180910390fd5b61125b60006129ab565b565b6112656125b0565b73ffffffffffffffffffffffffffffffffffffffff16611283611542565b73ffffffffffffffffffffffffffffffffffffffff16146112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d09061433d565b60405180910390fd5b60005b8282905081101561147c5760008383838181106112fc576112fb6149aa565b5b9050602002016020810190611311919061377c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a906141dd565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611410576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611407906144fd565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061147490614874565b9150506112dc565b505050565b600a60159054906101000a900460ff1681565b606060006114a18361111d565b905060008167ffffffffffffffff8111156114bf576114be6149d9565b5b6040519080825280602002602001820160405280156114ed5781602001602082028036833780820191505090505b50905060005b82811015611537576115058582610cc8565b828281518110611518576115176149aa565b5b602002602001018181525050808061152f90614874565b9150506114f3565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115746125b0565b73ffffffffffffffffffffffffffffffffffffffff16611592611542565b73ffffffffffffffffffffffffffffffffffffffff16146115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df9061433d565b60405180910390fd5b80600a60156101000a81548160ff02191690831515021790555050565b61160d6125b0565b73ffffffffffffffffffffffffffffffffffffffff1661162b611542565b73ffffffffffffffffffffffffffffffffffffffff1614611681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116789061433d565b60405180910390fd5b80600c8190555050565b6116936125b0565b73ffffffffffffffffffffffffffffffffffffffff166116b1611542565b73ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe9061433d565b60405180910390fd5b806012908051906020019061171d92919061353a565b5050565b60606001805461173090614811565b80601f016020809104026020016040519081016040528092919081815260200182805461175c90614811565b80156117a95780601f1061177e576101008083540402835291602001916117a9565b820191906000526020600020905b81548152906001019060200180831161178c57829003601f168201915b5050505050905090565b6117bb6125b0565b73ffffffffffffffffffffffffffffffffffffffff166117d9611542565b73ffffffffffffffffffffffffffffffffffffffff161461182f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118269061433d565b60405180910390fd5b600b54811115611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b9061447d565b60405180910390fd5b80600b60008282546118869190614727565b925050819055506000611897610c5b565b905060005b828110156118cc576118b93382846118b49190614646565b612a71565b80806118c490614874565b91505061189c565b505050565b600c5481565b6118df6125b0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119449061421d565b60405180910390fd5b806005600061195a6125b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a076125b0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a4c9190614100565b60405180910390a35050565b611a606125b0565b73ffffffffffffffffffffffffffffffffffffffff16611a7e611542565b73ffffffffffffffffffffffffffffffffffffffff1614611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb9061433d565b60405180910390fd5b60005b82829050811015611bea576000838383818110611af757611af66149aa565b5b9050602002016020810190611b0c919061377c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b75906143dd565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611be290614874565b915050611ad7565b505050565b611c00611bfa6125b0565b83612671565b611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c36906143fd565b60405180910390fd5b611c4b84848484612a8f565b50505050565b6000611c5b610c5b565b9050600a60149054906101000a900460ff16611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca39061423d565b60405180910390fd5b600082118015611cbc5750600682105b611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf2906144dd565b60405180910390fd5b6127108282611d0a9190614646565b1115611d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d429061441d565b60405180910390fd5b81600c54611d5991906146cd565b3414611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d91906144bd565b60405180910390fd5b60005b82811015611dcd57611dba338284611db59190614646565b612a71565b8080611dc590614874565b915050611d9d565b505050565b6060611ddd82612544565b611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e139061439d565b60405180910390fd5b6000611e26612aeb565b90506000815111611e465760405180602001604052806000815250611e71565b80611e5084612b7d565b604051602001611e6192919061403e565b6040516020818303038152906040525b915050919050565b6000611e83610c5b565b9050600a60159054906101000a900460ff16611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb9061445d565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f579061435d565b60405180910390fd5b6127108282611f6f9190614646565b10611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa69061441d565b60405180910390fd5b6107d082600d54611fc09190614646565b1115612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff89061449d565b60405180910390fd5b600e5482601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204f9190614646565b1115612090576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120879061413d565b60405180910390fd5b3482600c5461209f91906146cd565b11156120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d7906144bd565b60405180910390fd5b60005b8281101561218057600d60008154809291906120fe90614874565b9190505550601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061215390614874565b919050555061216d3382846121689190614646565b612a71565b808061217890614874565b9150506120e3565b505050565b60106020528060005260406000206000915090505481565b601180546121aa90614811565b80601f01602080910402602001604051908101604052809291908181526020018280546121d690614811565b80156122235780601f106121f857610100808354040283529160200191612223565b820191906000526020600020905b81548152906001019060200180831161220657829003601f168201915b505050505081565b600a60149054906101000a900460ff1681565b60606012805461224d90614811565b80601f016020809104026020016040519081016040528092919081815260200182805461227990614811565b80156122c65780601f1061229b576101008083540402835291602001916122c6565b820191906000526020600020905b8154815290600101906020018083116122a957829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61236c6125b0565b73ffffffffffffffffffffffffffffffffffffffff1661238a611542565b73ffffffffffffffffffffffffffffffffffffffff16146123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d79061433d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124479061419d565b60405180910390fd5b612459816129ab565b50565b600b5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061252d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061253d575061253c82612cde565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661262b8361106b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061267c82612544565b6126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b29061425d565b60405180910390fd5b60006126c68361106b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061273557508373ffffffffffffffffffffffffffffffffffffffff1661271d84610a9e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612746575061274581856122d0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661276f8261106b565b73ffffffffffffffffffffffffffffffffffffffff16146127c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bc9061437d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282c906141fd565b60405180910390fd5b612840838383612d48565b61284b6000826125b8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461289b9190614727565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128f29190614646565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a8b828260405180602001604052806000815250612e5c565b5050565b612a9a84848461274f565b612aa684848484612eb7565b612ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adc9061417d565b60405180910390fd5b50505050565b606060118054612afa90614811565b80601f0160208091040260200160405190810160405280929190818152602001828054612b2690614811565b8015612b735780601f10612b4857610100808354040283529160200191612b73565b820191906000526020600020905b815481529060010190602001808311612b5657829003601f168201915b5050505050905090565b60606000821415612bc5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cd9565b600082905060005b60008214612bf7578080612be090614874565b915050600a82612bf0919061469c565b9150612bcd565b60008167ffffffffffffffff811115612c1357612c126149d9565b5b6040519080825280601f01601f191660200182016040528015612c455781602001600182028036833780820191505090505b5090505b60008514612cd257600182612c5e9190614727565b9150600a85612c6d91906148bd565b6030612c799190614646565b60f81b818381518110612c8f57612c8e6149aa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ccb919061469c565b9450612c49565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d5383838361304e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d9657612d9181613053565b612dd5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dd457612dd3838261309c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e1857612e1381613209565b612e57565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e5657612e5582826132da565b5b5b505050565b612e668383613359565b612e736000848484612eb7565b612eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea99061417d565b60405180910390fd5b505050565b6000612ed88473ffffffffffffffffffffffffffffffffffffffff16613527565b15613041578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f016125b0565b8786866040518563ffffffff1660e01b8152600401612f239493929190614092565b602060405180830381600087803b158015612f3d57600080fd5b505af1925050508015612f6e57506040513d601f19601f82011682018060405250810190612f6b91906139e6565b60015b612ff1573d8060008114612f9e576040519150601f19603f3d011682016040523d82523d6000602084013e612fa3565b606091505b50600081511415612fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe09061417d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613046565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130a98461111d565b6130b39190614727565b9050600060076000848152602001908152602001600020549050818114613198576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061321d9190614727565b905060006009600084815260200190815260200160002054905060006008838154811061324d5761324c6149aa565b5b90600052602060002001549050806008838154811061326f5761326e6149aa565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132be576132bd61497b565b5b6001900381819060005260206000200160009055905550505050565b60006132e58361111d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c0906142fd565b60405180910390fd5b6133d281612544565b15613412576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613409906141bd565b60405180910390fd5b61341e60008383612d48565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461346e9190614646565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461354690614811565b90600052602060002090601f01602090048101928261356857600085556135af565b82601f1061358157805160ff19168380011785556135af565b828001600101855582156135af579182015b828111156135ae578251825591602001919060010190613593565b5b5090506135bc91906135c0565b5090565b5b808211156135d95760008160009055506001016135c1565b5090565b60006135f06135eb8461455d565b614538565b90508281526020810184848401111561360c5761360b614a17565b5b6136178482856147cf565b509392505050565b600061363261362d8461458e565b614538565b90508281526020810184848401111561364e5761364d614a17565b5b6136598482856147cf565b509392505050565b600081359050613670816151b7565b92915050565b60008083601f84011261368c5761368b614a0d565b5b8235905067ffffffffffffffff8111156136a9576136a8614a08565b5b6020830191508360208202830111156136c5576136c4614a12565b5b9250929050565b6000813590506136db816151ce565b92915050565b6000813590506136f0816151e5565b92915050565b600081519050613705816151e5565b92915050565b600082601f8301126137205761371f614a0d565b5b81356137308482602086016135dd565b91505092915050565b600082601f83011261374e5761374d614a0d565b5b813561375e84826020860161361f565b91505092915050565b600081359050613776816151fc565b92915050565b60006020828403121561379257613791614a21565b5b60006137a084828501613661565b91505092915050565b600080604083850312156137c0576137bf614a21565b5b60006137ce85828601613661565b92505060206137df85828601613661565b9150509250929050565b60008060006060848603121561380257613801614a21565b5b600061381086828701613661565b935050602061382186828701613661565b925050604061383286828701613767565b9150509250925092565b6000806000806080858703121561385657613855614a21565b5b600061386487828801613661565b945050602061387587828801613661565b935050604061388687828801613767565b925050606085013567ffffffffffffffff8111156138a7576138a6614a1c565b5b6138b38782880161370b565b91505092959194509250565b600080604083850312156138d6576138d5614a21565b5b60006138e485828601613661565b92505060206138f5858286016136cc565b9150509250929050565b6000806040838503121561391657613915614a21565b5b600061392485828601613661565b925050602061393585828601613767565b9150509250929050565b6000806020838503121561395657613955614a21565b5b600083013567ffffffffffffffff81111561397457613973614a1c565b5b61398085828601613676565b92509250509250929050565b6000602082840312156139a2576139a1614a21565b5b60006139b0848285016136cc565b91505092915050565b6000602082840312156139cf576139ce614a21565b5b60006139dd848285016136e1565b91505092915050565b6000602082840312156139fc576139fb614a21565b5b6000613a0a848285016136f6565b91505092915050565b600060208284031215613a2957613a28614a21565b5b600082013567ffffffffffffffff811115613a4757613a46614a1c565b5b613a5384828501613739565b91505092915050565b600060208284031215613a7257613a71614a21565b5b6000613a8084828501613767565b91505092915050565b6000613a958383614020565b60208301905092915050565b613aaa8161475b565b82525050565b6000613abb826145cf565b613ac581856145fd565b9350613ad0836145bf565b8060005b83811015613b01578151613ae88882613a89565b9750613af3836145f0565b925050600181019050613ad4565b5085935050505092915050565b613b178161476d565b82525050565b6000613b28826145da565b613b32818561460e565b9350613b428185602086016147de565b613b4b81614a26565b840191505092915050565b6000613b61826145e5565b613b6b818561462a565b9350613b7b8185602086016147de565b613b8481614a26565b840191505092915050565b6000613b9a826145e5565b613ba4818561463b565b9350613bb48185602086016147de565b80840191505092915050565b6000613bcd60158361462a565b9150613bd882614a37565b602082019050919050565b6000613bf0602b8361462a565b9150613bfb82614a60565b604082019050919050565b6000613c1360328361462a565b9150613c1e82614aaf565b604082019050919050565b6000613c3660268361462a565b9150613c4182614afe565b604082019050919050565b6000613c59601c8361462a565b9150613c6482614b4d565b602082019050919050565b6000613c7c60138361462a565b9150613c8782614b76565b602082019050919050565b6000613c9f60248361462a565b9150613caa82614b9f565b604082019050919050565b6000613cc260198361462a565b9150613ccd82614bee565b602082019050919050565b6000613ce560128361462a565b9150613cf082614c17565b602082019050919050565b6000613d08602c8361462a565b9150613d1382614c40565b604082019050919050565b6000613d2b601c8361462a565b9150613d3682614c8f565b602082019050919050565b6000613d4e60388361462a565b9150613d5982614cb8565b604082019050919050565b6000613d71602a8361462a565b9150613d7c82614d07565b604082019050919050565b6000613d9460298361462a565b9150613d9f82614d56565b604082019050919050565b6000613db760208361462a565b9150613dc282614da5565b602082019050919050565b6000613dda602c8361462a565b9150613de582614dce565b604082019050919050565b6000613dfd60208361462a565b9150613e0882614e1d565b602082019050919050565b6000613e2060138361462a565b9150613e2b82614e46565b602082019050919050565b6000613e4360298361462a565b9150613e4e82614e6f565b604082019050919050565b6000613e66602f8361462a565b9150613e7182614ebe565b604082019050919050565b6000613e8960218361462a565b9150613e9482614f0d565b604082019050919050565b6000613eac600e8361462a565b9150613eb782614f5c565b602082019050919050565b6000613ecf60008361461f565b9150613eda82614f85565b600082019050919050565b6000613ef260318361462a565b9150613efd82614f88565b604082019050919050565b6000613f1560208361462a565b9150613f2082614fd7565b602082019050919050565b6000613f38602c8361462a565b9150613f4382615000565b604082019050919050565b6000613f5b60158361462a565b9150613f668261504f565b602082019050919050565b6000613f7e60218361462a565b9150613f8982615078565b604082019050919050565b6000613fa160108361462a565b9150613fac826150c7565b602082019050919050565b6000613fc460188361462a565b9150613fcf826150f0565b602082019050919050565b6000613fe760248361462a565b9150613ff282615119565b604082019050919050565b600061400a60268361462a565b915061401582615168565b604082019050919050565b614029816147c5565b82525050565b614038816147c5565b82525050565b600061404a8285613b8f565b91506140568284613b8f565b91508190509392505050565b600061406d82613ec2565b9150819050919050565b600060208201905061408c6000830184613aa1565b92915050565b60006080820190506140a76000830187613aa1565b6140b46020830186613aa1565b6140c1604083018561402f565b81810360608301526140d38184613b1d565b905095945050505050565b600060208201905081810360008301526140f88184613ab0565b905092915050565b60006020820190506141156000830184613b0e565b92915050565b600060208201905081810360008301526141358184613b56565b905092915050565b6000602082019050818103600083015261415681613bc0565b9050919050565b6000602082019050818103600083015261417681613be3565b9050919050565b6000602082019050818103600083015261419681613c06565b9050919050565b600060208201905081810360008301526141b681613c29565b9050919050565b600060208201905081810360008301526141d681613c4c565b9050919050565b600060208201905081810360008301526141f681613c6f565b9050919050565b6000602082019050818103600083015261421681613c92565b9050919050565b6000602082019050818103600083015261423681613cb5565b9050919050565b6000602082019050818103600083015261425681613cd8565b9050919050565b6000602082019050818103600083015261427681613cfb565b9050919050565b6000602082019050818103600083015261429681613d1e565b9050919050565b600060208201905081810360008301526142b681613d41565b9050919050565b600060208201905081810360008301526142d681613d64565b9050919050565b600060208201905081810360008301526142f681613d87565b9050919050565b6000602082019050818103600083015261431681613daa565b9050919050565b6000602082019050818103600083015261433681613dcd565b9050919050565b6000602082019050818103600083015261435681613df0565b9050919050565b6000602082019050818103600083015261437681613e13565b9050919050565b6000602082019050818103600083015261439681613e36565b9050919050565b600060208201905081810360008301526143b681613e59565b9050919050565b600060208201905081810360008301526143d681613e7c565b9050919050565b600060208201905081810360008301526143f681613e9f565b9050919050565b6000602082019050818103600083015261441681613ee5565b9050919050565b6000602082019050818103600083015261443681613f08565b9050919050565b6000602082019050818103600083015261445681613f2b565b9050919050565b6000602082019050818103600083015261447681613f4e565b9050919050565b6000602082019050818103600083015261449681613f71565b9050919050565b600060208201905081810360008301526144b681613f94565b9050919050565b600060208201905081810360008301526144d681613fb7565b9050919050565b600060208201905081810360008301526144f681613fda565b9050919050565b6000602082019050818103600083015261451681613ffd565b9050919050565b6000602082019050614532600083018461402f565b92915050565b6000614542614553565b905061454e8282614843565b919050565b6000604051905090565b600067ffffffffffffffff821115614578576145776149d9565b5b61458182614a26565b9050602081019050919050565b600067ffffffffffffffff8211156145a9576145a86149d9565b5b6145b282614a26565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614651826147c5565b915061465c836147c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614691576146906148ee565b5b828201905092915050565b60006146a7826147c5565b91506146b2836147c5565b9250826146c2576146c161491d565b5b828204905092915050565b60006146d8826147c5565b91506146e3836147c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561471c5761471b6148ee565b5b828202905092915050565b6000614732826147c5565b915061473d836147c5565b9250828210156147505761474f6148ee565b5b828203905092915050565b6000614766826147a5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147fc5780820151818401526020810190506147e1565b8381111561480b576000848401525b50505050565b6000600282049050600182168061482957607f821691505b6020821081141561483d5761483c61494c565b5b50919050565b61484c82614a26565b810181811067ffffffffffffffff8211171561486b5761486a6149d9565b5b80604052505050565b600061487f826147c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148b2576148b16148ee565b5b600182019050919050565b60006148c8826147c5565b91506148d3836147c5565b9250826148e3576148e261491d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f50726573616c65206c696d697420726561636865640000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420612076616c6964206164647265737300000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f547261736850616e64617a3a205769746864726177204661696c656400000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f74206f6e2070726573616c65206c69737400000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420616e2061646472657373000000000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e206d617820737570706c79600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f50726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b7f43616e6e6f742072657365727665206d6f7265207468616e207265736572766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f50726573616c6520736f6c64206f757400000000000000000000000000000000600082015250565b7f57726f6e6720616d6f756e74206f66204554482073656e740000000000000000600082015250565b7f43616e206f6e6c79206d696e7420757020746f203520746f6b656e732061742060008201527f6f6e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4164647265737320616c726561647920657869737473206f6e2070726573616c60008201527f65206c6973740000000000000000000000000000000000000000000000000000602082015250565b6151c08161475b565b81146151cb57600080fd5b50565b6151d78161476d565b81146151e257600080fd5b50565b6151ee81614779565b81146151f957600080fd5b50565b615205816147c5565b811461521057600080fd5b5056fea2646970667358221220385e9df1693ecfed19f029623ad84342a19f10fced6c31af8f0c4f41bda21d6564736f6c6343000807003368747470733a2f2f747261736870616e64617a2e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2f70686d6574612f6f730000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003668747470733a2f2f747261736870616e64617a2e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2f70686d6574612f00000000000000000000

Deployed Bytecode

0x6080604052600436106102465760003560e01c80638462151c11610139578063b88d4fde116100b6578063d547cfb71161007a578063d547cfb714610880578063e081b781146108ab578063e8a3d485146108d6578063e985e9c514610901578063f2fde38b1461093e578063fe60d12c1461096757610246565b8063b88d4fde146107a5578063c634d032146107ce578063c87b56dd146107ea578063c9b298f114610827578063d46d35ad1461084357610246565b806395d89b41116100fd57806395d89b41146106d45780639a5d140b146106ff578063a035b1fe14610728578063a22cb46514610753578063b179e0601461077c57610246565b80638462151c146105f15780638da5cb5b1461062e5780638f0c62cc1461065957806391b7f5ed14610682578063938e3d7b146106ab57610246565b80633ccfd60b116101c75780636352211e1161018b5780636352211e1461050c57806370a0823114610549578063715018a6146105865780637204a3c91461059d57806383a9e049146105c657610246565b80633ccfd60b1461043b57806342842e0e146104525780634f6ccce71461047b578063525b3fe3146104b857806355f804b3146104e357610246565b806318160ddd1161020e57806318160ddd1461035657806323b872dd146103815780632f745c59146103aa578063342a891f146103e75780633c4c7bb41461041257610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806312fb92e014610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906139b9565b610992565b60405161027f9190614100565b60405180910390f35b34801561029457600080fd5b5061029d610a0c565b6040516102aa919061411b565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613a5c565b610a9e565b6040516102e79190614077565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906138ff565b610b23565b005b34801561032557600080fd5b50610340600480360381019061033b919061377c565b610c3b565b60405161034d9190614100565b60405180910390f35b34801561036257600080fd5b5061036b610c5b565b604051610378919061451d565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906137e9565b610c68565b005b3480156103b657600080fd5b506103d160048036038101906103cc91906138ff565b610cc8565b6040516103de919061451d565b60405180910390f35b3480156103f357600080fd5b506103fc610d6d565b604051610409919061451d565b60405180910390f35b34801561041e57600080fd5b506104396004803603810190610434919061398c565b610d73565b005b34801561044757600080fd5b50610450610e0c565b005b34801561045e57600080fd5b50610479600480360381019061047491906137e9565b610f3e565b005b34801561048757600080fd5b506104a2600480360381019061049d9190613a5c565b610f5e565b6040516104af919061451d565b60405180910390f35b3480156104c457600080fd5b506104cd610fcf565b6040516104da919061451d565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190613a13565b610fd5565b005b34801561051857600080fd5b50610533600480360381019061052e9190613a5c565b61106b565b6040516105409190614077565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b919061377c565b61111d565b60405161057d919061451d565b60405180910390f35b34801561059257600080fd5b5061059b6111d5565b005b3480156105a957600080fd5b506105c460048036038101906105bf919061393f565b61125d565b005b3480156105d257600080fd5b506105db611481565b6040516105e89190614100565b60405180910390f35b3480156105fd57600080fd5b506106186004803603810190610613919061377c565b611494565b60405161062591906140de565b60405180910390f35b34801561063a57600080fd5b50610643611542565b6040516106509190614077565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b919061398c565b61156c565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613a5c565b611605565b005b3480156106b757600080fd5b506106d260048036038101906106cd9190613a13565b61168b565b005b3480156106e057600080fd5b506106e9611721565b6040516106f6919061411b565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190613a5c565b6117b3565b005b34801561073457600080fd5b5061073d6118d1565b60405161074a919061451d565b60405180910390f35b34801561075f57600080fd5b5061077a600480360381019061077591906138bf565b6118d7565b005b34801561078857600080fd5b506107a3600480360381019061079e919061393f565b611a58565b005b3480156107b157600080fd5b506107cc60048036038101906107c7919061383c565b611bef565b005b6107e860048036038101906107e39190613a5c565b611c51565b005b3480156107f657600080fd5b50610811600480360381019061080c9190613a5c565b611dd2565b60405161081e919061411b565b60405180910390f35b610841600480360381019061083c9190613a5c565b611e79565b005b34801561084f57600080fd5b5061086a6004803603810190610865919061377c565b612185565b604051610877919061451d565b60405180910390f35b34801561088c57600080fd5b5061089561219d565b6040516108a2919061411b565b60405180910390f35b3480156108b757600080fd5b506108c061222b565b6040516108cd9190614100565b60405180910390f35b3480156108e257600080fd5b506108eb61223e565b6040516108f8919061411b565b60405180910390f35b34801561090d57600080fd5b50610928600480360381019061092391906137a9565b6122d0565b6040516109359190614100565b60405180910390f35b34801561094a57600080fd5b506109656004803603810190610960919061377c565b612364565b005b34801561097357600080fd5b5061097c61245c565b604051610989919061451d565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a055750610a0482612462565b5b9050919050565b606060008054610a1b90614811565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4790614811565b8015610a945780601f10610a6957610100808354040283529160200191610a94565b820191906000526020600020905b815481529060010190602001808311610a7757829003601f168201915b5050505050905090565b6000610aa982612544565b610ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adf9061431d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b2e8261106b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b96906143bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bbe6125b0565b73ffffffffffffffffffffffffffffffffffffffff161480610bed5750610bec81610be76125b0565b6122d0565b5b610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c239061429d565b60405180910390fd5b610c3683836125b8565b505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000600880549050905090565b610c79610c736125b0565b82612671565b610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf906143fd565b60405180910390fd5b610cc383838361274f565b505050565b6000610cd38361111d565b8210610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b9061415d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600d5481565b610d7b6125b0565b73ffffffffffffffffffffffffffffffffffffffff16610d99611542565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de69061433d565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b610e146125b0565b73ffffffffffffffffffffffffffffffffffffffff16610e32611542565b73ffffffffffffffffffffffffffffffffffffffff1614610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f9061433d565b60405180910390fd5b6000610e92611542565b73ffffffffffffffffffffffffffffffffffffffff1647604051610eb590614062565b60006040518083038185875af1925050503d8060008114610ef2576040519150601f19603f3d011682016040523d82523d6000602084013e610ef7565b606091505b5050905080610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f329061427d565b60405180910390fd5b50565b610f5983838360405180602001604052806000815250611bef565b505050565b6000610f68610c5b565b8210610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa09061443d565b60405180910390fd5b60088281548110610fbd57610fbc6149aa565b5b90600052602060002001549050919050565b600e5481565b610fdd6125b0565b73ffffffffffffffffffffffffffffffffffffffff16610ffb611542565b73ffffffffffffffffffffffffffffffffffffffff1614611051576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110489061433d565b60405180910390fd5b806011908051906020019061106792919061353a565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b906142dd565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611185906142bd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111dd6125b0565b73ffffffffffffffffffffffffffffffffffffffff166111fb611542565b73ffffffffffffffffffffffffffffffffffffffff1614611251576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112489061433d565b60405180910390fd5b61125b60006129ab565b565b6112656125b0565b73ffffffffffffffffffffffffffffffffffffffff16611283611542565b73ffffffffffffffffffffffffffffffffffffffff16146112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d09061433d565b60405180910390fd5b60005b8282905081101561147c5760008383838181106112fc576112fb6149aa565b5b9050602002016020810190611311919061377c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a906141dd565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611410576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611407906144fd565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061147490614874565b9150506112dc565b505050565b600a60159054906101000a900460ff1681565b606060006114a18361111d565b905060008167ffffffffffffffff8111156114bf576114be6149d9565b5b6040519080825280602002602001820160405280156114ed5781602001602082028036833780820191505090505b50905060005b82811015611537576115058582610cc8565b828281518110611518576115176149aa565b5b602002602001018181525050808061152f90614874565b9150506114f3565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115746125b0565b73ffffffffffffffffffffffffffffffffffffffff16611592611542565b73ffffffffffffffffffffffffffffffffffffffff16146115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df9061433d565b60405180910390fd5b80600a60156101000a81548160ff02191690831515021790555050565b61160d6125b0565b73ffffffffffffffffffffffffffffffffffffffff1661162b611542565b73ffffffffffffffffffffffffffffffffffffffff1614611681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116789061433d565b60405180910390fd5b80600c8190555050565b6116936125b0565b73ffffffffffffffffffffffffffffffffffffffff166116b1611542565b73ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe9061433d565b60405180910390fd5b806012908051906020019061171d92919061353a565b5050565b60606001805461173090614811565b80601f016020809104026020016040519081016040528092919081815260200182805461175c90614811565b80156117a95780601f1061177e576101008083540402835291602001916117a9565b820191906000526020600020905b81548152906001019060200180831161178c57829003601f168201915b5050505050905090565b6117bb6125b0565b73ffffffffffffffffffffffffffffffffffffffff166117d9611542565b73ffffffffffffffffffffffffffffffffffffffff161461182f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118269061433d565b60405180910390fd5b600b54811115611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b9061447d565b60405180910390fd5b80600b60008282546118869190614727565b925050819055506000611897610c5b565b905060005b828110156118cc576118b93382846118b49190614646565b612a71565b80806118c490614874565b91505061189c565b505050565b600c5481565b6118df6125b0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561194d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119449061421d565b60405180910390fd5b806005600061195a6125b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a076125b0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a4c9190614100565b60405180910390a35050565b611a606125b0565b73ffffffffffffffffffffffffffffffffffffffff16611a7e611542565b73ffffffffffffffffffffffffffffffffffffffff1614611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb9061433d565b60405180910390fd5b60005b82829050811015611bea576000838383818110611af757611af66149aa565b5b9050602002016020810190611b0c919061377c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b75906143dd565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611be290614874565b915050611ad7565b505050565b611c00611bfa6125b0565b83612671565b611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c36906143fd565b60405180910390fd5b611c4b84848484612a8f565b50505050565b6000611c5b610c5b565b9050600a60149054906101000a900460ff16611cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca39061423d565b60405180910390fd5b600082118015611cbc5750600682105b611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf2906144dd565b60405180910390fd5b6127108282611d0a9190614646565b1115611d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d429061441d565b60405180910390fd5b81600c54611d5991906146cd565b3414611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d91906144bd565b60405180910390fd5b60005b82811015611dcd57611dba338284611db59190614646565b612a71565b8080611dc590614874565b915050611d9d565b505050565b6060611ddd82612544565b611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e139061439d565b60405180910390fd5b6000611e26612aeb565b90506000815111611e465760405180602001604052806000815250611e71565b80611e5084612b7d565b604051602001611e6192919061403e565b6040516020818303038152906040525b915050919050565b6000611e83610c5b565b9050600a60159054906101000a900460ff16611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb9061445d565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f579061435d565b60405180910390fd5b6127108282611f6f9190614646565b10611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa69061441d565b60405180910390fd5b6107d082600d54611fc09190614646565b1115612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff89061449d565b60405180910390fd5b600e5482601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461204f9190614646565b1115612090576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120879061413d565b60405180910390fd5b3482600c5461209f91906146cd565b11156120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d7906144bd565b60405180910390fd5b60005b8281101561218057600d60008154809291906120fe90614874565b9190505550601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061215390614874565b919050555061216d3382846121689190614646565b612a71565b808061217890614874565b9150506120e3565b505050565b60106020528060005260406000206000915090505481565b601180546121aa90614811565b80601f01602080910402602001604051908101604052809291908181526020018280546121d690614811565b80156122235780601f106121f857610100808354040283529160200191612223565b820191906000526020600020905b81548152906001019060200180831161220657829003601f168201915b505050505081565b600a60149054906101000a900460ff1681565b60606012805461224d90614811565b80601f016020809104026020016040519081016040528092919081815260200182805461227990614811565b80156122c65780601f1061229b576101008083540402835291602001916122c6565b820191906000526020600020905b8154815290600101906020018083116122a957829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61236c6125b0565b73ffffffffffffffffffffffffffffffffffffffff1661238a611542565b73ffffffffffffffffffffffffffffffffffffffff16146123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d79061433d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612450576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124479061419d565b60405180910390fd5b612459816129ab565b50565b600b5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061252d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061253d575061253c82612cde565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661262b8361106b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061267c82612544565b6126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b29061425d565b60405180910390fd5b60006126c68361106b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061273557508373ffffffffffffffffffffffffffffffffffffffff1661271d84610a9e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612746575061274581856122d0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661276f8261106b565b73ffffffffffffffffffffffffffffffffffffffff16146127c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bc9061437d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282c906141fd565b60405180910390fd5b612840838383612d48565b61284b6000826125b8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461289b9190614727565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128f29190614646565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a8b828260405180602001604052806000815250612e5c565b5050565b612a9a84848461274f565b612aa684848484612eb7565b612ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adc9061417d565b60405180910390fd5b50505050565b606060118054612afa90614811565b80601f0160208091040260200160405190810160405280929190818152602001828054612b2690614811565b8015612b735780601f10612b4857610100808354040283529160200191612b73565b820191906000526020600020905b815481529060010190602001808311612b5657829003601f168201915b5050505050905090565b60606000821415612bc5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cd9565b600082905060005b60008214612bf7578080612be090614874565b915050600a82612bf0919061469c565b9150612bcd565b60008167ffffffffffffffff811115612c1357612c126149d9565b5b6040519080825280601f01601f191660200182016040528015612c455781602001600182028036833780820191505090505b5090505b60008514612cd257600182612c5e9190614727565b9150600a85612c6d91906148bd565b6030612c799190614646565b60f81b818381518110612c8f57612c8e6149aa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ccb919061469c565b9450612c49565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d5383838361304e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d9657612d9181613053565b612dd5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dd457612dd3838261309c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e1857612e1381613209565b612e57565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e5657612e5582826132da565b5b5b505050565b612e668383613359565b612e736000848484612eb7565b612eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea99061417d565b60405180910390fd5b505050565b6000612ed88473ffffffffffffffffffffffffffffffffffffffff16613527565b15613041578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f016125b0565b8786866040518563ffffffff1660e01b8152600401612f239493929190614092565b602060405180830381600087803b158015612f3d57600080fd5b505af1925050508015612f6e57506040513d601f19601f82011682018060405250810190612f6b91906139e6565b60015b612ff1573d8060008114612f9e576040519150601f19603f3d011682016040523d82523d6000602084013e612fa3565b606091505b50600081511415612fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe09061417d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613046565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130a98461111d565b6130b39190614727565b9050600060076000848152602001908152602001600020549050818114613198576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061321d9190614727565b905060006009600084815260200190815260200160002054905060006008838154811061324d5761324c6149aa565b5b90600052602060002001549050806008838154811061326f5761326e6149aa565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132be576132bd61497b565b5b6001900381819060005260206000200160009055905550505050565b60006132e58361111d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c0906142fd565b60405180910390fd5b6133d281612544565b15613412576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613409906141bd565b60405180910390fd5b61341e60008383612d48565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461346e9190614646565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461354690614811565b90600052602060002090601f01602090048101928261356857600085556135af565b82601f1061358157805160ff19168380011785556135af565b828001600101855582156135af579182015b828111156135ae578251825591602001919060010190613593565b5b5090506135bc91906135c0565b5090565b5b808211156135d95760008160009055506001016135c1565b5090565b60006135f06135eb8461455d565b614538565b90508281526020810184848401111561360c5761360b614a17565b5b6136178482856147cf565b509392505050565b600061363261362d8461458e565b614538565b90508281526020810184848401111561364e5761364d614a17565b5b6136598482856147cf565b509392505050565b600081359050613670816151b7565b92915050565b60008083601f84011261368c5761368b614a0d565b5b8235905067ffffffffffffffff8111156136a9576136a8614a08565b5b6020830191508360208202830111156136c5576136c4614a12565b5b9250929050565b6000813590506136db816151ce565b92915050565b6000813590506136f0816151e5565b92915050565b600081519050613705816151e5565b92915050565b600082601f8301126137205761371f614a0d565b5b81356137308482602086016135dd565b91505092915050565b600082601f83011261374e5761374d614a0d565b5b813561375e84826020860161361f565b91505092915050565b600081359050613776816151fc565b92915050565b60006020828403121561379257613791614a21565b5b60006137a084828501613661565b91505092915050565b600080604083850312156137c0576137bf614a21565b5b60006137ce85828601613661565b92505060206137df85828601613661565b9150509250929050565b60008060006060848603121561380257613801614a21565b5b600061381086828701613661565b935050602061382186828701613661565b925050604061383286828701613767565b9150509250925092565b6000806000806080858703121561385657613855614a21565b5b600061386487828801613661565b945050602061387587828801613661565b935050604061388687828801613767565b925050606085013567ffffffffffffffff8111156138a7576138a6614a1c565b5b6138b38782880161370b565b91505092959194509250565b600080604083850312156138d6576138d5614a21565b5b60006138e485828601613661565b92505060206138f5858286016136cc565b9150509250929050565b6000806040838503121561391657613915614a21565b5b600061392485828601613661565b925050602061393585828601613767565b9150509250929050565b6000806020838503121561395657613955614a21565b5b600083013567ffffffffffffffff81111561397457613973614a1c565b5b61398085828601613676565b92509250509250929050565b6000602082840312156139a2576139a1614a21565b5b60006139b0848285016136cc565b91505092915050565b6000602082840312156139cf576139ce614a21565b5b60006139dd848285016136e1565b91505092915050565b6000602082840312156139fc576139fb614a21565b5b6000613a0a848285016136f6565b91505092915050565b600060208284031215613a2957613a28614a21565b5b600082013567ffffffffffffffff811115613a4757613a46614a1c565b5b613a5384828501613739565b91505092915050565b600060208284031215613a7257613a71614a21565b5b6000613a8084828501613767565b91505092915050565b6000613a958383614020565b60208301905092915050565b613aaa8161475b565b82525050565b6000613abb826145cf565b613ac581856145fd565b9350613ad0836145bf565b8060005b83811015613b01578151613ae88882613a89565b9750613af3836145f0565b925050600181019050613ad4565b5085935050505092915050565b613b178161476d565b82525050565b6000613b28826145da565b613b32818561460e565b9350613b428185602086016147de565b613b4b81614a26565b840191505092915050565b6000613b61826145e5565b613b6b818561462a565b9350613b7b8185602086016147de565b613b8481614a26565b840191505092915050565b6000613b9a826145e5565b613ba4818561463b565b9350613bb48185602086016147de565b80840191505092915050565b6000613bcd60158361462a565b9150613bd882614a37565b602082019050919050565b6000613bf0602b8361462a565b9150613bfb82614a60565b604082019050919050565b6000613c1360328361462a565b9150613c1e82614aaf565b604082019050919050565b6000613c3660268361462a565b9150613c4182614afe565b604082019050919050565b6000613c59601c8361462a565b9150613c6482614b4d565b602082019050919050565b6000613c7c60138361462a565b9150613c8782614b76565b602082019050919050565b6000613c9f60248361462a565b9150613caa82614b9f565b604082019050919050565b6000613cc260198361462a565b9150613ccd82614bee565b602082019050919050565b6000613ce560128361462a565b9150613cf082614c17565b602082019050919050565b6000613d08602c8361462a565b9150613d1382614c40565b604082019050919050565b6000613d2b601c8361462a565b9150613d3682614c8f565b602082019050919050565b6000613d4e60388361462a565b9150613d5982614cb8565b604082019050919050565b6000613d71602a8361462a565b9150613d7c82614d07565b604082019050919050565b6000613d9460298361462a565b9150613d9f82614d56565b604082019050919050565b6000613db760208361462a565b9150613dc282614da5565b602082019050919050565b6000613dda602c8361462a565b9150613de582614dce565b604082019050919050565b6000613dfd60208361462a565b9150613e0882614e1d565b602082019050919050565b6000613e2060138361462a565b9150613e2b82614e46565b602082019050919050565b6000613e4360298361462a565b9150613e4e82614e6f565b604082019050919050565b6000613e66602f8361462a565b9150613e7182614ebe565b604082019050919050565b6000613e8960218361462a565b9150613e9482614f0d565b604082019050919050565b6000613eac600e8361462a565b9150613eb782614f5c565b602082019050919050565b6000613ecf60008361461f565b9150613eda82614f85565b600082019050919050565b6000613ef260318361462a565b9150613efd82614f88565b604082019050919050565b6000613f1560208361462a565b9150613f2082614fd7565b602082019050919050565b6000613f38602c8361462a565b9150613f4382615000565b604082019050919050565b6000613f5b60158361462a565b9150613f668261504f565b602082019050919050565b6000613f7e60218361462a565b9150613f8982615078565b604082019050919050565b6000613fa160108361462a565b9150613fac826150c7565b602082019050919050565b6000613fc460188361462a565b9150613fcf826150f0565b602082019050919050565b6000613fe760248361462a565b9150613ff282615119565b604082019050919050565b600061400a60268361462a565b915061401582615168565b604082019050919050565b614029816147c5565b82525050565b614038816147c5565b82525050565b600061404a8285613b8f565b91506140568284613b8f565b91508190509392505050565b600061406d82613ec2565b9150819050919050565b600060208201905061408c6000830184613aa1565b92915050565b60006080820190506140a76000830187613aa1565b6140b46020830186613aa1565b6140c1604083018561402f565b81810360608301526140d38184613b1d565b905095945050505050565b600060208201905081810360008301526140f88184613ab0565b905092915050565b60006020820190506141156000830184613b0e565b92915050565b600060208201905081810360008301526141358184613b56565b905092915050565b6000602082019050818103600083015261415681613bc0565b9050919050565b6000602082019050818103600083015261417681613be3565b9050919050565b6000602082019050818103600083015261419681613c06565b9050919050565b600060208201905081810360008301526141b681613c29565b9050919050565b600060208201905081810360008301526141d681613c4c565b9050919050565b600060208201905081810360008301526141f681613c6f565b9050919050565b6000602082019050818103600083015261421681613c92565b9050919050565b6000602082019050818103600083015261423681613cb5565b9050919050565b6000602082019050818103600083015261425681613cd8565b9050919050565b6000602082019050818103600083015261427681613cfb565b9050919050565b6000602082019050818103600083015261429681613d1e565b9050919050565b600060208201905081810360008301526142b681613d41565b9050919050565b600060208201905081810360008301526142d681613d64565b9050919050565b600060208201905081810360008301526142f681613d87565b9050919050565b6000602082019050818103600083015261431681613daa565b9050919050565b6000602082019050818103600083015261433681613dcd565b9050919050565b6000602082019050818103600083015261435681613df0565b9050919050565b6000602082019050818103600083015261437681613e13565b9050919050565b6000602082019050818103600083015261439681613e36565b9050919050565b600060208201905081810360008301526143b681613e59565b9050919050565b600060208201905081810360008301526143d681613e7c565b9050919050565b600060208201905081810360008301526143f681613e9f565b9050919050565b6000602082019050818103600083015261441681613ee5565b9050919050565b6000602082019050818103600083015261443681613f08565b9050919050565b6000602082019050818103600083015261445681613f2b565b9050919050565b6000602082019050818103600083015261447681613f4e565b9050919050565b6000602082019050818103600083015261449681613f71565b9050919050565b600060208201905081810360008301526144b681613f94565b9050919050565b600060208201905081810360008301526144d681613fb7565b9050919050565b600060208201905081810360008301526144f681613fda565b9050919050565b6000602082019050818103600083015261451681613ffd565b9050919050565b6000602082019050614532600083018461402f565b92915050565b6000614542614553565b905061454e8282614843565b919050565b6000604051905090565b600067ffffffffffffffff821115614578576145776149d9565b5b61458182614a26565b9050602081019050919050565b600067ffffffffffffffff8211156145a9576145a86149d9565b5b6145b282614a26565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614651826147c5565b915061465c836147c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614691576146906148ee565b5b828201905092915050565b60006146a7826147c5565b91506146b2836147c5565b9250826146c2576146c161491d565b5b828204905092915050565b60006146d8826147c5565b91506146e3836147c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561471c5761471b6148ee565b5b828202905092915050565b6000614732826147c5565b915061473d836147c5565b9250828210156147505761474f6148ee565b5b828203905092915050565b6000614766826147a5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156147fc5780820151818401526020810190506147e1565b8381111561480b576000848401525b50505050565b6000600282049050600182168061482957607f821691505b6020821081141561483d5761483c61494c565b5b50919050565b61484c82614a26565b810181811067ffffffffffffffff8211171561486b5761486a6149d9565b5b80604052505050565b600061487f826147c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148b2576148b16148ee565b5b600182019050919050565b60006148c8826147c5565b91506148d3836147c5565b9250826148e3576148e261491d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f50726573616c65206c696d697420726561636865640000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420612076616c6964206164647265737300000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f547261736850616e64617a3a205769746864726177204661696c656400000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f74206f6e2070726573616c65206c69737400000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420616e2061646472657373000000000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206d6f7265207468616e206d617820737570706c79600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f50726573616c65206973206e6f74206163746976650000000000000000000000600082015250565b7f43616e6e6f742072657365727665206d6f7265207468616e207265736572766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f50726573616c6520736f6c64206f757400000000000000000000000000000000600082015250565b7f57726f6e6720616d6f756e74206f66204554482073656e740000000000000000600082015250565b7f43616e206f6e6c79206d696e7420757020746f203520746f6b656e732061742060008201527f6f6e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4164647265737320616c726561647920657869737473206f6e2070726573616c60008201527f65206c6973740000000000000000000000000000000000000000000000000000602082015250565b6151c08161475b565b81146151cb57600080fd5b50565b6151d78161476d565b81146151e257600080fd5b50565b6151ee81614779565b81146151f957600080fd5b50565b615205816147c5565b811461521057600080fd5b5056fea2646970667358221220385e9df1693ecfed19f029623ad84342a19f10fced6c31af8f0c4f41bda21d6564736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003668747470733a2f2f747261736870616e64617a2e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2f70686d6574612f00000000000000000000

-----Decoded View---------------
Arg [0] : newBaseURI (string): https://trashpandaz.s3.us-east-2.amazonaws.com/phmeta/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 68747470733a2f2f747261736870616e64617a2e73332e75732d656173742d32
Arg [3] : 2e616d617a6f6e6177732e636f6d2f70686d6574612f00000000000000000000


Deployed Bytecode Sourcemap

43660:4940:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35173:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22084:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23643:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23166:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44090:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35813:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24533:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35481:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44011:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46997:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48417:180;;;;;;;;;;;;;:::i;:::-;;24943:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36003:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44052:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48014:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21778:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21508:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42965:94;;;;;;;;;;;;;:::i;:::-;;47243:384;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43813:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44884:331;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42314:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48295:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48151:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22253:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46644:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43971:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23936:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47671:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25199:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45239:532;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22428:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45807:774;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44140:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44202:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43778:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44740:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24302:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43214:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43935:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35173:224;35275:4;35314:35;35299:50;;;:11;:50;;;;:90;;;;35353:36;35377:11;35353:23;:36::i;:::-;35299:90;35292:97;;35173:224;;;:::o;22084:100::-;22138:13;22171:5;22164:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22084:100;:::o;23643:221::-;23719:7;23747:16;23755:7;23747;:16::i;:::-;23739:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23832:15;:24;23848:7;23832:24;;;;;;;;;;;;;;;;;;;;;23825:31;;23643:221;;;:::o;23166:411::-;23247:13;23263:23;23278:7;23263:14;:23::i;:::-;23247:39;;23311:5;23305:11;;:2;:11;;;;23297:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23405:5;23389:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23414:37;23431:5;23438:12;:10;:12::i;:::-;23414:16;:37::i;:::-;23389:62;23367:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23548:21;23557:2;23561:7;23548:8;:21::i;:::-;23236:341;23166:411;;:::o;44090:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;35813:113::-;35874:7;35901:10;:17;;;;35894:24;;35813:113;:::o;24533:339::-;24728:41;24747:12;:10;:12::i;:::-;24761:7;24728:18;:41::i;:::-;24720:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24836:28;24846:4;24852:2;24856:7;24836:9;:28::i;:::-;24533:339;;;:::o;35481:256::-;35578:7;35614:23;35631:5;35614:16;:23::i;:::-;35606:5;:31;35598:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35703:12;:19;35716:5;35703:19;;;;;;;;;;;;;;;:26;35723:5;35703:26;;;;;;;;;;;;35696:33;;35481:256;;;;:::o;44011:34::-;;;;:::o;46997:81::-;42545:12;:10;:12::i;:::-;42534:23;;:7;:5;:7::i;:::-;:23;;;42526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47067:3:::1;47056:8;;:14;;;;;;;;;;;;;;;;;;46997:81:::0;:::o;48417:180::-;42545:12;:10;:12::i;:::-;42534:23;;:7;:5;:7::i;:::-;:23;;;42526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48466:12:::1;48484:7;:5;:7::i;:::-;:12;;48504:21;48484:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48465:65;;;48549:7;48541:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;48454:143;48417:180::o:0;24943:185::-;25081:39;25098:4;25104:2;25108:7;25081:39;;;;;;;;;;;;:16;:39::i;:::-;24943:185;;;:::o;36003:233::-;36078:7;36114:30;:28;:30::i;:::-;36106:5;:38;36098:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36211:10;36222:5;36211:17;;;;;;;;:::i;:::-;;;;;;;;;;36204:24;;36003:233;;;:::o;44052:31::-;;;;:::o;48014:101::-;42545:12;:10;:12::i;:::-;42534:23;;:7;:5;:7::i;:::-;:23;;;42526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48100:7:::1;48085:12;:22;;;;;;;;;;;;:::i;:::-;;48014:101:::0;:::o;21778:239::-;21850:7;21870:13;21886:7;:16;21894:7;21886:16;;;;;;;;;;;;;;;;;;;;;21870:32;;21938:1;21921:19;;:5;:19;;;;21913:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22004:5;21997:12;;;21778:239;;;:::o;21508:208::-;21580:7;21625:1;21608:19;;:5;:19;;;;21600:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21692:9;:16;21702:5;21692:16;;;;;;;;;;;;;;;;21685:23;;21508:208;;;:::o;42965:94::-;42545:12;:10;:12::i;:::-;42534:23;;:7;:5;:7::i;:::-;:23;;;42526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43030:21:::1;43048:1;43030:9;:21::i;:::-;42965:94::o:0;47243:384::-;42545:12;:10;:12::i;:::-;42534:23;;:7;:5;:7::i;:::-;:23;;;42526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47331:9:::1;47327:290;47350:7;;:14;;47346:1;:18;47327:290;;;47386:13;47402:7;;47410:1;47402:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47386:26;;47452:1;47435:19;;:5;:19;;;;47427:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;47502:11;:18;47514:5;47502:18;;;;;;;;;;;;;;;;;;;;;;;;;47501:19;47493:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;47601:4;47580:11;:18;47592:5;47580:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;47371:246;47366:3;;;;;:::i;:::-;;;;47327:290;;;;47243:384:::0;;:::o;43813:31::-;;;;;;;;;;;;;:::o;44884:331::-;44941:16;44970:18;44991:15;45001:4;44991:9;:15::i;:::-;44970:36;;45017:24;45058:10;45044:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45017:52;;45084:9;45080:103;45099:10;45095:1;:14;45080:103;;;45143:28;45163:4;45169:1;45143:19;:28::i;:::-;45130:7;45138:1;45130:10;;;;;;;;:::i;:::-;;;;;;;:41;;;;;45111:3;;;;;:::i;:::-;;;;45080:103;;;;45200:7;45193:14;;;;44884:331;;;:::o;42314:87::-;42360:7;42387:6;;;;;;;;;;;42380:13;;42314:87;:::o;47121:::-;42545:12;:10;:12::i;:::-;42534:23;;:7;:5;:7::i;:::-;:23;;;42526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47197:3:::1;47183:11;;:17;;;;;;;;;;;;;;;;;;47121:87:::0;:::o;48295:88::-;42545:12;:10;:12::i;:::-;42534:23;;:7;:5;:7::i;:::-;:23;;;42526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48367:8:::1;48359:5;:16;;;;48295:88:::0;:::o;48151:115::-;42545:12;:10;:12::i;:::-;42534:23;;:7;:5;:7::i;:::-;:23;;;42526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48244:14:::1;48229:12;:29;;;;;;;;;;;;:::i;:::-;;48151:115:::0;:::o;22253:104::-;22309:13;22342:7;22335:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22253:104;:::o;46644:317::-;42545:12;:10;:12::i;:::-;42534:23;;:7;:5;:7::i;:::-;:23;;;42526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46731:8:::1;;46720:7;:19;;46711:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46801:7;46789:8;;:19;;;;;;;:::i;:::-;;;;;;;;46819:14;46836:13;:11;:13::i;:::-;46819:30;;46864:9;46860:94;46879:7;46875:1;:11;46860:94;;;46907:35;46918:10;46939:1;46930:6;:10;;;;:::i;:::-;46907:9;:35::i;:::-;46888:3;;;;;:::i;:::-;;;;46860:94;;;;46700:261;46644:317:::0;:::o;43971:33::-;;;;:::o;23936:295::-;24051:12;:10;:12::i;:::-;24039:24;;:8;:24;;;;24031:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24151:8;24106:18;:32;24125:12;:10;:12::i;:::-;24106:32;;;;;;;;;;;;;;;:42;24139:8;24106:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24204:8;24175:48;;24190:12;:10;:12::i;:::-;24175:48;;;24214:8;24175:48;;;;;;:::i;:::-;;;;;;;;23936:295;;:::o;47671:309::-;42545:12;:10;:12::i;:::-;42534:23;;:7;:5;:7::i;:::-;:23;;;42526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47764:9:::1;47760:213;47783:7;;:14;;47779:1;:18;47760:213;;;47819:13;47835:7;;47843:1;47835:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47819:26;;47885:1;47868:19;;:5;:19;;;;47860:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;47956:5;47935:11;:18;47947:5;47935:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;47804:169;47799:3;;;;;:::i;:::-;;;;47760:213;;;;47671:309:::0;;:::o;25199:328::-;25374:41;25393:12;:10;:12::i;:::-;25407:7;25374:18;:41::i;:::-;25366:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25480:39;25494:4;25500:2;25504:7;25513:5;25480:13;:39::i;:::-;25199:328;;;;:::o;45239:532::-;45298:14;45315:13;:11;:13::i;:::-;45298:30;;45348:8;;;;;;;;;;;45339:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45430:1;45420:7;:11;:26;;;;;45445:1;45435:7;:11;45420:26;45411:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;43881:5;45520:7;45511:6;:16;;;;:::i;:::-;:30;;45502:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;45620:7;45612:5;;:15;;;;:::i;:::-;45599:9;:28;45590:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;45674:9;45670:94;45689:7;45685:1;:11;45670:94;;;45717:35;45728:10;45749:1;45740:6;:10;;;;:::i;:::-;45717:9;:35::i;:::-;45698:3;;;;;:::i;:::-;;;;45670:94;;;;45290:481;45239:532;:::o;22428:334::-;22501:13;22535:16;22543:7;22535;:16::i;:::-;22527:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22616:21;22640:10;:8;:10::i;:::-;22616:34;;22692:1;22674:7;22668:21;:25;:86;;;;;;;;;;;;;;;;;22720:7;22729:18;:7;:16;:18::i;:::-;22703:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22668:86;22661:93;;;22428:334;;;:::o;45807:774::-;45870:14;45887:13;:11;:13::i;:::-;45870:30;;45920:11;;;;;;;;;;;45911:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;45977:11;:23;45989:10;45977:23;;;;;;;;;;;;;;;;;;;;;;;;;45968:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;43881:5;46053:7;46044:6;:16;;;;:::i;:::-;:29;46035:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43927:4;46153:7;46131:19;;:29;;;;:::i;:::-;:47;;46122:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;46266:12;;46255:7;46220:20;:32;46241:10;46220:32;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:58;;46211:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;46344:9;46333:7;46325:5;;:15;;;;:::i;:::-;:28;;46316:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46399:9;46394:180;46414:7;46410:1;:11;46394:180;;;46443:19;;:21;;;;;;;;;:::i;:::-;;;;;;46479:20;:32;46500:10;46479:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;46528;46538:10;46559:1;46550:6;:10;;;;:::i;:::-;46528:9;:34::i;:::-;46423:3;;;;;:::i;:::-;;;;46394:180;;;;45862:719;45807:774;:::o;44140:55::-;;;;;;;;;;;;;;;;;:::o;44202:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43778:28::-;;;;;;;;;;;;;:::o;44740:92::-;44786:13;44812:12;44805:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44740:92;:::o;24302:164::-;24399:4;24423:18;:25;24442:5;24423:25;;;;;;;;;;;;;;;:35;24449:8;24423:35;;;;;;;;;;;;;;;;;;;;;;;;;24416:42;;24302:164;;;;:::o;43214:192::-;42545:12;:10;:12::i;:::-;42534:23;;:7;:5;:7::i;:::-;:23;;;42526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43323:1:::1;43303:22;;:8;:22;;;;43295:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43379:19;43389:8;43379:9;:19::i;:::-;43214:192:::0;:::o;43935:29::-;;;;:::o;21139:305::-;21241:4;21293:25;21278:40;;;:11;:40;;;;:105;;;;21350:33;21335:48;;;:11;:48;;;;21278:105;:158;;;;21400:36;21424:11;21400:23;:36::i;:::-;21278:158;21258:178;;21139:305;;;:::o;27037:127::-;27102:4;27154:1;27126:30;;:7;:16;27134:7;27126:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27119:37;;27037:127;;;:::o;16576:98::-;16629:7;16656:10;16649:17;;16576:98;:::o;31019:174::-;31121:2;31094:15;:24;31110:7;31094:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31177:7;31173:2;31139:46;;31148:23;31163:7;31148:14;:23::i;:::-;31139:46;;;;;;;;;;;;31019:174;;:::o;27331:348::-;27424:4;27449:16;27457:7;27449;:16::i;:::-;27441:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27525:13;27541:23;27556:7;27541:14;:23::i;:::-;27525:39;;27594:5;27583:16;;:7;:16;;;:51;;;;27627:7;27603:31;;:20;27615:7;27603:11;:20::i;:::-;:31;;;27583:51;:87;;;;27638:32;27655:5;27662:7;27638:16;:32::i;:::-;27583:87;27575:96;;;27331:348;;;;:::o;30323:578::-;30482:4;30455:31;;:23;30470:7;30455:14;:23::i;:::-;:31;;;30447:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30565:1;30551:16;;:2;:16;;;;30543:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30621:39;30642:4;30648:2;30652:7;30621:20;:39::i;:::-;30725:29;30742:1;30746:7;30725:8;:29::i;:::-;30786:1;30767:9;:15;30777:4;30767:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30815:1;30798:9;:13;30808:2;30798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30846:2;30827:7;:16;30835:7;30827:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30885:7;30881:2;30866:27;;30875:4;30866:27;;;;;;;;;;;;30323:578;;;:::o;43414:173::-;43470:16;43489:6;;;;;;;;;;;43470:25;;43515:8;43506:6;;:17;;;;;;;;;;;;;;;;;;43570:8;43539:40;;43560:8;43539:40;;;;;;;;;;;;43459:128;43414:173;:::o;28021:110::-;28097:26;28107:2;28111:7;28097:26;;;;;;;;;;;;:9;:26::i;:::-;28021:110;;:::o;26409:315::-;26566:28;26576:4;26582:2;26586:7;26566:9;:28::i;:::-;26613:48;26636:4;26642:2;26646:7;26655:5;26613:22;:48::i;:::-;26605:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26409:315;;;;:::o;44600:107::-;44660:13;44687:12;44680:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44600:107;:::o;17096:723::-;17152:13;17382:1;17373:5;:10;17369:53;;;17400:10;;;;;;;;;;;;;;;;;;;;;17369:53;17432:12;17447:5;17432:20;;17463:14;17488:78;17503:1;17495:4;:9;17488:78;;17521:8;;;;;:::i;:::-;;;;17552:2;17544:10;;;;;:::i;:::-;;;17488:78;;;17576:19;17608:6;17598:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17576:39;;17626:154;17642:1;17633:5;:10;17626:154;;17670:1;17660:11;;;;;:::i;:::-;;;17737:2;17729:5;:10;;;;:::i;:::-;17716:2;:24;;;;:::i;:::-;17703:39;;17686:6;17693;17686:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17766:2;17757:11;;;;;:::i;:::-;;;17626:154;;;17804:6;17790:21;;;;;17096:723;;;;:::o;19648:157::-;19733:4;19772:25;19757:40;;;:11;:40;;;;19750:47;;19648:157;;;:::o;36849:589::-;36993:45;37020:4;37026:2;37030:7;36993:26;:45::i;:::-;37071:1;37055:18;;:4;:18;;;37051:187;;;37090:40;37122:7;37090:31;:40::i;:::-;37051:187;;;37160:2;37152:10;;:4;:10;;;37148:90;;37179:47;37212:4;37218:7;37179:32;:47::i;:::-;37148:90;37051:187;37266:1;37252:16;;:2;:16;;;37248:183;;;37285:45;37322:7;37285:36;:45::i;:::-;37248:183;;;37358:4;37352:10;;:2;:10;;;37348:83;;37379:40;37407:2;37411:7;37379:27;:40::i;:::-;37348:83;37248:183;36849:589;;;:::o;28358:321::-;28488:18;28494:2;28498:7;28488:5;:18::i;:::-;28539:54;28570:1;28574:2;28578:7;28587:5;28539:22;:54::i;:::-;28517:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28358:321;;;:::o;31758:799::-;31913:4;31934:15;:2;:13;;;:15::i;:::-;31930:620;;;31986:2;31970:36;;;32007:12;:10;:12::i;:::-;32021:4;32027:7;32036:5;31970:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31966:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32229:1;32212:6;:13;:18;32208:272;;;32255:60;;;;;;;;;;:::i;:::-;;;;;;;;32208:272;32430:6;32424:13;32415:6;32411:2;32407:15;32400:38;31966:529;32103:41;;;32093:51;;;:6;:51;;;;32086:58;;;;;31930:620;32534:4;32527:11;;31758:799;;;;;;;:::o;33129:126::-;;;;:::o;38161:164::-;38265:10;:17;;;;38238:15;:24;38254:7;38238:24;;;;;;;;;;;:44;;;;38293:10;38309:7;38293:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38161:164;:::o;38952:988::-;39218:22;39268:1;39243:22;39260:4;39243:16;:22::i;:::-;:26;;;;:::i;:::-;39218:51;;39280:18;39301:17;:26;39319:7;39301:26;;;;;;;;;;;;39280:47;;39448:14;39434:10;:28;39430:328;;39479:19;39501:12;:18;39514:4;39501:18;;;;;;;;;;;;;;;:34;39520:14;39501:34;;;;;;;;;;;;39479:56;;39585:11;39552:12;:18;39565:4;39552:18;;;;;;;;;;;;;;;:30;39571:10;39552:30;;;;;;;;;;;:44;;;;39702:10;39669:17;:30;39687:11;39669:30;;;;;;;;;;;:43;;;;39464:294;39430:328;39854:17;:26;39872:7;39854:26;;;;;;;;;;;39847:33;;;39898:12;:18;39911:4;39898:18;;;;;;;;;;;;;;;:34;39917:14;39898:34;;;;;;;;;;;39891:41;;;39033:907;;38952:988;;:::o;40235:1079::-;40488:22;40533:1;40513:10;:17;;;;:21;;;;:::i;:::-;40488:46;;40545:18;40566:15;:24;40582:7;40566:24;;;;;;;;;;;;40545:45;;40917:19;40939:10;40950:14;40939:26;;;;;;;;:::i;:::-;;;;;;;;;;40917:48;;41003:11;40978:10;40989;40978:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;41114:10;41083:15;:28;41099:11;41083:28;;;;;;;;;;;:41;;;;41255:15;:24;41271:7;41255:24;;;;;;;;;;;41248:31;;;41290:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40306:1008;;;40235:1079;:::o;37739:221::-;37824:14;37841:20;37858:2;37841:16;:20::i;:::-;37824:37;;37899:7;37872:12;:16;37885:2;37872:16;;;;;;;;;;;;;;;:24;37889:6;37872:24;;;;;;;;;;;:34;;;;37946:6;37917:17;:26;37935:7;37917:26;;;;;;;;;;;:35;;;;37813:147;37739:221;;:::o;29015:382::-;29109:1;29095:16;;:2;:16;;;;29087:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29168:16;29176:7;29168;:16::i;:::-;29167:17;29159:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29230:45;29259:1;29263:2;29267:7;29230:20;:45::i;:::-;29305:1;29288:9;:13;29298:2;29288:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29336:2;29317:7;:16;29325:7;29317:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29381:7;29377:2;29356:33;;29373:1;29356:33;;;;;;;;;;;;29015:382;;:::o;8625:387::-;8685:4;8893:12;8960:7;8948:20;8940:28;;9003:1;8996:4;:8;8989:15;;;8625:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:179::-;8712:10;8733:46;8775:3;8767:6;8733:46;:::i;:::-;8811:4;8806:3;8802:14;8788:28;;8643:179;;;;:::o;8828:118::-;8915:24;8933:5;8915:24;:::i;:::-;8910:3;8903:37;8828:118;;:::o;8982:732::-;9101:3;9130:54;9178:5;9130:54;:::i;:::-;9200:86;9279:6;9274:3;9200:86;:::i;:::-;9193:93;;9310:56;9360:5;9310:56;:::i;:::-;9389:7;9420:1;9405:284;9430:6;9427:1;9424:13;9405:284;;;9506:6;9500:13;9533:63;9592:3;9577:13;9533:63;:::i;:::-;9526:70;;9619:60;9672:6;9619:60;:::i;:::-;9609:70;;9465:224;9452:1;9449;9445:9;9440:14;;9405:284;;;9409:14;9705:3;9698:10;;9106:608;;;8982:732;;;;:::o;9720:109::-;9801:21;9816:5;9801:21;:::i;:::-;9796:3;9789:34;9720:109;;:::o;9835:360::-;9921:3;9949:38;9981:5;9949:38;:::i;:::-;10003:70;10066:6;10061:3;10003:70;:::i;:::-;9996:77;;10082:52;10127:6;10122:3;10115:4;10108:5;10104:16;10082:52;:::i;:::-;10159:29;10181:6;10159:29;:::i;:::-;10154:3;10150:39;10143:46;;9925:270;9835:360;;;;:::o;10201:364::-;10289:3;10317:39;10350:5;10317:39;:::i;:::-;10372:71;10436:6;10431:3;10372:71;:::i;:::-;10365:78;;10452:52;10497:6;10492:3;10485:4;10478:5;10474:16;10452:52;:::i;:::-;10529:29;10551:6;10529:29;:::i;:::-;10524:3;10520:39;10513:46;;10293:272;10201:364;;;;:::o;10571:377::-;10677:3;10705:39;10738:5;10705:39;:::i;:::-;10760:89;10842:6;10837:3;10760:89;:::i;:::-;10753:96;;10858:52;10903:6;10898:3;10891:4;10884:5;10880:16;10858:52;:::i;:::-;10935:6;10930:3;10926:16;10919:23;;10681:267;10571:377;;;;:::o;10954:366::-;11096:3;11117:67;11181:2;11176:3;11117:67;:::i;:::-;11110:74;;11193:93;11282:3;11193:93;:::i;:::-;11311:2;11306:3;11302:12;11295:19;;10954:366;;;:::o;11326:::-;11468:3;11489:67;11553:2;11548:3;11489:67;:::i;:::-;11482:74;;11565:93;11654:3;11565:93;:::i;:::-;11683:2;11678:3;11674:12;11667:19;;11326:366;;;:::o;11698:::-;11840:3;11861:67;11925:2;11920:3;11861:67;:::i;:::-;11854:74;;11937:93;12026:3;11937:93;:::i;:::-;12055:2;12050:3;12046:12;12039:19;;11698:366;;;:::o;12070:::-;12212:3;12233:67;12297:2;12292:3;12233:67;:::i;:::-;12226:74;;12309:93;12398:3;12309:93;:::i;:::-;12427:2;12422:3;12418:12;12411:19;;12070:366;;;:::o;12442:::-;12584:3;12605:67;12669:2;12664:3;12605:67;:::i;:::-;12598:74;;12681:93;12770:3;12681:93;:::i;:::-;12799:2;12794:3;12790:12;12783:19;;12442:366;;;:::o;12814:::-;12956:3;12977:67;13041:2;13036:3;12977:67;:::i;:::-;12970:74;;13053:93;13142:3;13053:93;:::i;:::-;13171:2;13166:3;13162:12;13155:19;;12814:366;;;:::o;13186:::-;13328:3;13349:67;13413:2;13408:3;13349:67;:::i;:::-;13342:74;;13425:93;13514:3;13425:93;:::i;:::-;13543:2;13538:3;13534:12;13527:19;;13186:366;;;:::o;13558:::-;13700:3;13721:67;13785:2;13780:3;13721:67;:::i;:::-;13714:74;;13797:93;13886:3;13797:93;:::i;:::-;13915:2;13910:3;13906:12;13899:19;;13558:366;;;:::o;13930:::-;14072:3;14093:67;14157:2;14152:3;14093:67;:::i;:::-;14086:74;;14169:93;14258:3;14169:93;:::i;:::-;14287:2;14282:3;14278:12;14271:19;;13930:366;;;:::o;14302:::-;14444:3;14465:67;14529:2;14524:3;14465:67;:::i;:::-;14458:74;;14541:93;14630:3;14541:93;:::i;:::-;14659:2;14654:3;14650:12;14643:19;;14302:366;;;:::o;14674:::-;14816:3;14837:67;14901:2;14896:3;14837:67;:::i;:::-;14830:74;;14913:93;15002:3;14913:93;:::i;:::-;15031:2;15026:3;15022:12;15015:19;;14674:366;;;:::o;15046:::-;15188:3;15209:67;15273:2;15268:3;15209:67;:::i;:::-;15202:74;;15285:93;15374:3;15285:93;:::i;:::-;15403:2;15398:3;15394:12;15387:19;;15046:366;;;:::o;15418:::-;15560:3;15581:67;15645:2;15640:3;15581:67;:::i;:::-;15574:74;;15657:93;15746:3;15657:93;:::i;:::-;15775:2;15770:3;15766:12;15759:19;;15418:366;;;:::o;15790:::-;15932:3;15953:67;16017:2;16012:3;15953:67;:::i;:::-;15946:74;;16029:93;16118:3;16029:93;:::i;:::-;16147:2;16142:3;16138:12;16131:19;;15790:366;;;:::o;16162:::-;16304:3;16325:67;16389:2;16384:3;16325:67;:::i;:::-;16318:74;;16401:93;16490:3;16401:93;:::i;:::-;16519:2;16514:3;16510:12;16503:19;;16162:366;;;:::o;16534:::-;16676:3;16697:67;16761:2;16756:3;16697:67;:::i;:::-;16690:74;;16773:93;16862:3;16773:93;:::i;:::-;16891:2;16886:3;16882:12;16875:19;;16534:366;;;:::o;16906:::-;17048:3;17069:67;17133:2;17128:3;17069:67;:::i;:::-;17062:74;;17145:93;17234:3;17145:93;:::i;:::-;17263:2;17258:3;17254:12;17247:19;;16906:366;;;:::o;17278:::-;17420:3;17441:67;17505:2;17500:3;17441:67;:::i;:::-;17434:74;;17517:93;17606:3;17517:93;:::i;:::-;17635:2;17630:3;17626:12;17619:19;;17278:366;;;:::o;17650:::-;17792:3;17813:67;17877:2;17872:3;17813:67;:::i;:::-;17806:74;;17889:93;17978:3;17889:93;:::i;:::-;18007:2;18002:3;17998:12;17991:19;;17650:366;;;:::o;18022:::-;18164:3;18185:67;18249:2;18244:3;18185:67;:::i;:::-;18178:74;;18261:93;18350:3;18261:93;:::i;:::-;18379:2;18374:3;18370:12;18363:19;;18022:366;;;:::o;18394:::-;18536:3;18557:67;18621:2;18616:3;18557:67;:::i;:::-;18550:74;;18633:93;18722:3;18633:93;:::i;:::-;18751:2;18746:3;18742:12;18735:19;;18394:366;;;:::o;18766:::-;18908:3;18929:67;18993:2;18988:3;18929:67;:::i;:::-;18922:74;;19005:93;19094:3;19005:93;:::i;:::-;19123:2;19118:3;19114:12;19107:19;;18766:366;;;:::o;19138:398::-;19297:3;19318:83;19399:1;19394:3;19318:83;:::i;:::-;19311:90;;19410:93;19499:3;19410:93;:::i;:::-;19528:1;19523:3;19519:11;19512:18;;19138:398;;;:::o;19542:366::-;19684:3;19705:67;19769:2;19764:3;19705:67;:::i;:::-;19698:74;;19781:93;19870:3;19781:93;:::i;:::-;19899:2;19894:3;19890:12;19883:19;;19542:366;;;:::o;19914:::-;20056:3;20077:67;20141:2;20136:3;20077:67;:::i;:::-;20070:74;;20153:93;20242:3;20153:93;:::i;:::-;20271:2;20266:3;20262:12;20255:19;;19914:366;;;:::o;20286:::-;20428:3;20449:67;20513:2;20508:3;20449:67;:::i;:::-;20442:74;;20525:93;20614:3;20525:93;:::i;:::-;20643:2;20638:3;20634:12;20627:19;;20286:366;;;:::o;20658:::-;20800:3;20821:67;20885:2;20880:3;20821:67;:::i;:::-;20814:74;;20897:93;20986:3;20897:93;:::i;:::-;21015:2;21010:3;21006:12;20999:19;;20658:366;;;:::o;21030:::-;21172:3;21193:67;21257:2;21252:3;21193:67;:::i;:::-;21186:74;;21269:93;21358:3;21269:93;:::i;:::-;21387:2;21382:3;21378:12;21371:19;;21030:366;;;:::o;21402:::-;21544:3;21565:67;21629:2;21624:3;21565:67;:::i;:::-;21558:74;;21641:93;21730:3;21641:93;:::i;:::-;21759:2;21754:3;21750:12;21743:19;;21402:366;;;:::o;21774:::-;21916:3;21937:67;22001:2;21996:3;21937:67;:::i;:::-;21930:74;;22013:93;22102:3;22013:93;:::i;:::-;22131:2;22126:3;22122:12;22115:19;;21774:366;;;:::o;22146:::-;22288:3;22309:67;22373:2;22368:3;22309:67;:::i;:::-;22302:74;;22385:93;22474:3;22385:93;:::i;:::-;22503:2;22498:3;22494:12;22487:19;;22146:366;;;:::o;22518:::-;22660:3;22681:67;22745:2;22740:3;22681:67;:::i;:::-;22674:74;;22757:93;22846:3;22757:93;:::i;:::-;22875:2;22870:3;22866:12;22859:19;;22518:366;;;:::o;22890:108::-;22967:24;22985:5;22967:24;:::i;:::-;22962:3;22955:37;22890:108;;:::o;23004:118::-;23091:24;23109:5;23091:24;:::i;:::-;23086:3;23079:37;23004:118;;:::o;23128:435::-;23308:3;23330:95;23421:3;23412:6;23330:95;:::i;:::-;23323:102;;23442:95;23533:3;23524:6;23442:95;:::i;:::-;23435:102;;23554:3;23547:10;;23128:435;;;;;:::o;23569:379::-;23753:3;23775:147;23918:3;23775:147;:::i;:::-;23768:154;;23939:3;23932:10;;23569:379;;;:::o;23954:222::-;24047:4;24085:2;24074:9;24070:18;24062:26;;24098:71;24166:1;24155:9;24151:17;24142:6;24098:71;:::i;:::-;23954:222;;;;:::o;24182:640::-;24377:4;24415:3;24404:9;24400:19;24392:27;;24429:71;24497:1;24486:9;24482:17;24473:6;24429:71;:::i;:::-;24510:72;24578:2;24567:9;24563:18;24554:6;24510:72;:::i;:::-;24592;24660:2;24649:9;24645:18;24636:6;24592:72;:::i;:::-;24711:9;24705:4;24701:20;24696:2;24685:9;24681:18;24674:48;24739:76;24810:4;24801:6;24739:76;:::i;:::-;24731:84;;24182:640;;;;;;;:::o;24828:373::-;24971:4;25009:2;24998:9;24994:18;24986:26;;25058:9;25052:4;25048:20;25044:1;25033:9;25029:17;25022:47;25086:108;25189:4;25180:6;25086:108;:::i;:::-;25078:116;;24828:373;;;;:::o;25207:210::-;25294:4;25332:2;25321:9;25317:18;25309:26;;25345:65;25407:1;25396:9;25392:17;25383:6;25345:65;:::i;:::-;25207:210;;;;:::o;25423:313::-;25536:4;25574:2;25563:9;25559:18;25551:26;;25623:9;25617:4;25613:20;25609:1;25598:9;25594:17;25587:47;25651:78;25724:4;25715:6;25651:78;:::i;:::-;25643:86;;25423:313;;;;:::o;25742:419::-;25908:4;25946:2;25935:9;25931:18;25923:26;;25995:9;25989:4;25985:20;25981:1;25970:9;25966:17;25959:47;26023:131;26149:4;26023:131;:::i;:::-;26015:139;;25742:419;;;:::o;26167:::-;26333:4;26371:2;26360:9;26356:18;26348:26;;26420:9;26414:4;26410:20;26406:1;26395:9;26391:17;26384:47;26448:131;26574:4;26448:131;:::i;:::-;26440:139;;26167:419;;;:::o;26592:::-;26758:4;26796:2;26785:9;26781:18;26773:26;;26845:9;26839:4;26835:20;26831:1;26820:9;26816:17;26809:47;26873:131;26999:4;26873:131;:::i;:::-;26865:139;;26592:419;;;:::o;27017:::-;27183:4;27221:2;27210:9;27206:18;27198:26;;27270:9;27264:4;27260:20;27256:1;27245:9;27241:17;27234:47;27298:131;27424:4;27298:131;:::i;:::-;27290:139;;27017:419;;;:::o;27442:::-;27608:4;27646:2;27635:9;27631:18;27623:26;;27695:9;27689:4;27685:20;27681:1;27670:9;27666:17;27659:47;27723:131;27849:4;27723:131;:::i;:::-;27715:139;;27442:419;;;:::o;27867:::-;28033:4;28071:2;28060:9;28056:18;28048:26;;28120:9;28114:4;28110:20;28106:1;28095:9;28091:17;28084:47;28148:131;28274:4;28148:131;:::i;:::-;28140:139;;27867:419;;;:::o;28292:::-;28458:4;28496:2;28485:9;28481:18;28473:26;;28545:9;28539:4;28535:20;28531:1;28520:9;28516:17;28509:47;28573:131;28699:4;28573:131;:::i;:::-;28565:139;;28292:419;;;:::o;28717:::-;28883:4;28921:2;28910:9;28906:18;28898:26;;28970:9;28964:4;28960:20;28956:1;28945:9;28941:17;28934:47;28998:131;29124:4;28998:131;:::i;:::-;28990:139;;28717:419;;;:::o;29142:::-;29308:4;29346:2;29335:9;29331:18;29323:26;;29395:9;29389:4;29385:20;29381:1;29370:9;29366:17;29359:47;29423:131;29549:4;29423:131;:::i;:::-;29415:139;;29142:419;;;:::o;29567:::-;29733:4;29771:2;29760:9;29756:18;29748:26;;29820:9;29814:4;29810:20;29806:1;29795:9;29791:17;29784:47;29848:131;29974:4;29848:131;:::i;:::-;29840:139;;29567:419;;;:::o;29992:::-;30158:4;30196:2;30185:9;30181:18;30173:26;;30245:9;30239:4;30235:20;30231:1;30220:9;30216:17;30209:47;30273:131;30399:4;30273:131;:::i;:::-;30265:139;;29992:419;;;:::o;30417:::-;30583:4;30621:2;30610:9;30606:18;30598:26;;30670:9;30664:4;30660:20;30656:1;30645:9;30641:17;30634:47;30698:131;30824:4;30698:131;:::i;:::-;30690:139;;30417:419;;;:::o;30842:::-;31008:4;31046:2;31035:9;31031:18;31023:26;;31095:9;31089:4;31085:20;31081:1;31070:9;31066:17;31059:47;31123:131;31249:4;31123:131;:::i;:::-;31115:139;;30842:419;;;:::o;31267:::-;31433:4;31471:2;31460:9;31456:18;31448:26;;31520:9;31514:4;31510:20;31506:1;31495:9;31491:17;31484:47;31548:131;31674:4;31548:131;:::i;:::-;31540:139;;31267:419;;;:::o;31692:::-;31858:4;31896:2;31885:9;31881:18;31873:26;;31945:9;31939:4;31935:20;31931:1;31920:9;31916:17;31909:47;31973:131;32099:4;31973:131;:::i;:::-;31965:139;;31692:419;;;:::o;32117:::-;32283:4;32321:2;32310:9;32306:18;32298:26;;32370:9;32364:4;32360:20;32356:1;32345:9;32341:17;32334:47;32398:131;32524:4;32398:131;:::i;:::-;32390:139;;32117:419;;;:::o;32542:::-;32708:4;32746:2;32735:9;32731:18;32723:26;;32795:9;32789:4;32785:20;32781:1;32770:9;32766:17;32759:47;32823:131;32949:4;32823:131;:::i;:::-;32815:139;;32542:419;;;:::o;32967:::-;33133:4;33171:2;33160:9;33156:18;33148:26;;33220:9;33214:4;33210:20;33206:1;33195:9;33191:17;33184:47;33248:131;33374:4;33248:131;:::i;:::-;33240:139;;32967:419;;;:::o;33392:::-;33558:4;33596:2;33585:9;33581:18;33573:26;;33645:9;33639:4;33635:20;33631:1;33620:9;33616:17;33609:47;33673:131;33799:4;33673:131;:::i;:::-;33665:139;;33392:419;;;:::o;33817:::-;33983:4;34021:2;34010:9;34006:18;33998:26;;34070:9;34064:4;34060:20;34056:1;34045:9;34041:17;34034:47;34098:131;34224:4;34098:131;:::i;:::-;34090:139;;33817:419;;;:::o;34242:::-;34408:4;34446:2;34435:9;34431:18;34423:26;;34495:9;34489:4;34485:20;34481:1;34470:9;34466:17;34459:47;34523:131;34649:4;34523:131;:::i;:::-;34515:139;;34242:419;;;:::o;34667:::-;34833:4;34871:2;34860:9;34856:18;34848:26;;34920:9;34914:4;34910:20;34906:1;34895:9;34891:17;34884:47;34948:131;35074:4;34948:131;:::i;:::-;34940:139;;34667:419;;;:::o;35092:::-;35258:4;35296:2;35285:9;35281:18;35273:26;;35345:9;35339:4;35335:20;35331:1;35320:9;35316:17;35309:47;35373:131;35499:4;35373:131;:::i;:::-;35365:139;;35092:419;;;:::o;35517:::-;35683:4;35721:2;35710:9;35706:18;35698:26;;35770:9;35764:4;35760:20;35756:1;35745:9;35741:17;35734:47;35798:131;35924:4;35798:131;:::i;:::-;35790:139;;35517:419;;;:::o;35942:::-;36108:4;36146:2;36135:9;36131:18;36123:26;;36195:9;36189:4;36185:20;36181:1;36170:9;36166:17;36159:47;36223:131;36349:4;36223:131;:::i;:::-;36215:139;;35942:419;;;:::o;36367:::-;36533:4;36571:2;36560:9;36556:18;36548:26;;36620:9;36614:4;36610:20;36606:1;36595:9;36591:17;36584:47;36648:131;36774:4;36648:131;:::i;:::-;36640:139;;36367:419;;;:::o;36792:::-;36958:4;36996:2;36985:9;36981:18;36973:26;;37045:9;37039:4;37035:20;37031:1;37020:9;37016:17;37009:47;37073:131;37199:4;37073:131;:::i;:::-;37065:139;;36792:419;;;:::o;37217:::-;37383:4;37421:2;37410:9;37406:18;37398:26;;37470:9;37464:4;37460:20;37456:1;37445:9;37441:17;37434:47;37498:131;37624:4;37498:131;:::i;:::-;37490:139;;37217:419;;;:::o;37642:::-;37808:4;37846:2;37835:9;37831:18;37823:26;;37895:9;37889:4;37885:20;37881:1;37870:9;37866:17;37859:47;37923:131;38049:4;37923:131;:::i;:::-;37915:139;;37642:419;;;:::o;38067:::-;38233:4;38271:2;38260:9;38256:18;38248:26;;38320:9;38314:4;38310:20;38306:1;38295:9;38291:17;38284:47;38348:131;38474:4;38348:131;:::i;:::-;38340:139;;38067:419;;;:::o;38492:::-;38658:4;38696:2;38685:9;38681:18;38673:26;;38745:9;38739:4;38735:20;38731:1;38720:9;38716:17;38709:47;38773:131;38899:4;38773:131;:::i;:::-;38765:139;;38492:419;;;:::o;38917:222::-;39010:4;39048:2;39037:9;39033:18;39025:26;;39061:71;39129:1;39118:9;39114:17;39105:6;39061:71;:::i;:::-;38917:222;;;;:::o;39145:129::-;39179:6;39206:20;;:::i;:::-;39196:30;;39235:33;39263:4;39255:6;39235:33;:::i;:::-;39145:129;;;:::o;39280:75::-;39313:6;39346:2;39340:9;39330:19;;39280:75;:::o;39361:307::-;39422:4;39512:18;39504:6;39501:30;39498:56;;;39534:18;;:::i;:::-;39498:56;39572:29;39594:6;39572:29;:::i;:::-;39564:37;;39656:4;39650;39646:15;39638:23;;39361:307;;;:::o;39674:308::-;39736:4;39826:18;39818:6;39815:30;39812:56;;;39848:18;;:::i;:::-;39812:56;39886:29;39908:6;39886:29;:::i;:::-;39878:37;;39970:4;39964;39960:15;39952:23;;39674:308;;;:::o;39988:132::-;40055:4;40078:3;40070:11;;40108:4;40103:3;40099:14;40091:22;;39988:132;;;:::o;40126:114::-;40193:6;40227:5;40221:12;40211:22;;40126:114;;;:::o;40246:98::-;40297:6;40331:5;40325:12;40315:22;;40246:98;;;:::o;40350:99::-;40402:6;40436:5;40430:12;40420:22;;40350:99;;;:::o;40455:113::-;40525:4;40557;40552:3;40548:14;40540:22;;40455:113;;;:::o;40574:184::-;40673:11;40707:6;40702:3;40695:19;40747:4;40742:3;40738:14;40723:29;;40574:184;;;;:::o;40764:168::-;40847:11;40881:6;40876:3;40869:19;40921:4;40916:3;40912:14;40897:29;;40764:168;;;;:::o;40938:147::-;41039:11;41076:3;41061:18;;40938:147;;;;:::o;41091:169::-;41175:11;41209:6;41204:3;41197:19;41249:4;41244:3;41240:14;41225:29;;41091:169;;;;:::o;41266:148::-;41368:11;41405:3;41390:18;;41266:148;;;;:::o;41420:305::-;41460:3;41479:20;41497:1;41479:20;:::i;:::-;41474:25;;41513:20;41531:1;41513:20;:::i;:::-;41508:25;;41667:1;41599:66;41595:74;41592:1;41589:81;41586:107;;;41673:18;;:::i;:::-;41586:107;41717:1;41714;41710:9;41703:16;;41420:305;;;;:::o;41731:185::-;41771:1;41788:20;41806:1;41788:20;:::i;:::-;41783:25;;41822:20;41840:1;41822:20;:::i;:::-;41817:25;;41861:1;41851:35;;41866:18;;:::i;:::-;41851:35;41908:1;41905;41901:9;41896:14;;41731:185;;;;:::o;41922:348::-;41962:7;41985:20;42003:1;41985:20;:::i;:::-;41980:25;;42019:20;42037:1;42019:20;:::i;:::-;42014:25;;42207:1;42139:66;42135:74;42132:1;42129:81;42124:1;42117:9;42110:17;42106:105;42103:131;;;42214:18;;:::i;:::-;42103:131;42262:1;42259;42255:9;42244:20;;41922:348;;;;:::o;42276:191::-;42316:4;42336:20;42354:1;42336:20;:::i;:::-;42331:25;;42370:20;42388:1;42370:20;:::i;:::-;42365:25;;42409:1;42406;42403:8;42400:34;;;42414:18;;:::i;:::-;42400:34;42459:1;42456;42452:9;42444:17;;42276:191;;;;:::o;42473:96::-;42510:7;42539:24;42557:5;42539:24;:::i;:::-;42528:35;;42473:96;;;:::o;42575:90::-;42609:7;42652:5;42645:13;42638:21;42627:32;;42575:90;;;:::o;42671:149::-;42707:7;42747:66;42740:5;42736:78;42725:89;;42671:149;;;:::o;42826:126::-;42863:7;42903:42;42896:5;42892:54;42881:65;;42826:126;;;:::o;42958:77::-;42995:7;43024:5;43013:16;;42958:77;;;:::o;43041:154::-;43125:6;43120:3;43115;43102:30;43187:1;43178:6;43173:3;43169:16;43162:27;43041:154;;;:::o;43201:307::-;43269:1;43279:113;43293:6;43290:1;43287:13;43279:113;;;43378:1;43373:3;43369:11;43363:18;43359:1;43354:3;43350:11;43343:39;43315:2;43312:1;43308:10;43303:15;;43279:113;;;43410:6;43407:1;43404:13;43401:101;;;43490:1;43481:6;43476:3;43472:16;43465:27;43401:101;43250:258;43201:307;;;:::o;43514:320::-;43558:6;43595:1;43589:4;43585:12;43575:22;;43642:1;43636:4;43632:12;43663:18;43653:81;;43719:4;43711:6;43707:17;43697:27;;43653:81;43781:2;43773:6;43770:14;43750:18;43747:38;43744:84;;;43800:18;;:::i;:::-;43744:84;43565:269;43514:320;;;:::o;43840:281::-;43923:27;43945:4;43923:27;:::i;:::-;43915:6;43911:40;44053:6;44041:10;44038:22;44017:18;44005:10;44002:34;43999:62;43996:88;;;44064:18;;:::i;:::-;43996:88;44104:10;44100:2;44093:22;43883:238;43840:281;;:::o;44127:233::-;44166:3;44189:24;44207:5;44189:24;:::i;:::-;44180:33;;44235:66;44228:5;44225:77;44222:103;;;44305:18;;:::i;:::-;44222:103;44352:1;44345:5;44341:13;44334:20;;44127:233;;;:::o;44366:176::-;44398:1;44415:20;44433:1;44415:20;:::i;:::-;44410:25;;44449:20;44467:1;44449:20;:::i;:::-;44444:25;;44488:1;44478:35;;44493:18;;:::i;:::-;44478:35;44534:1;44531;44527:9;44522:14;;44366:176;;;;:::o;44548:180::-;44596:77;44593:1;44586:88;44693:4;44690:1;44683:15;44717:4;44714:1;44707:15;44734:180;44782:77;44779:1;44772:88;44879:4;44876:1;44869:15;44903:4;44900:1;44893:15;44920:180;44968:77;44965:1;44958:88;45065:4;45062:1;45055:15;45089:4;45086:1;45079:15;45106:180;45154:77;45151:1;45144:88;45251:4;45248:1;45241:15;45275:4;45272:1;45265:15;45292:180;45340:77;45337:1;45330:88;45437:4;45434:1;45427:15;45461:4;45458:1;45451:15;45478:180;45526:77;45523:1;45516:88;45623:4;45620:1;45613:15;45647:4;45644:1;45637:15;45664:117;45773:1;45770;45763:12;45787:117;45896:1;45893;45886:12;45910:117;46019:1;46016;46009:12;46033:117;46142:1;46139;46132:12;46156:117;46265:1;46262;46255:12;46279:117;46388:1;46385;46378:12;46402:102;46443:6;46494:2;46490:7;46485:2;46478:5;46474:14;46470:28;46460:38;;46402:102;;;:::o;46510:171::-;46650:23;46646:1;46638:6;46634:14;46627:47;46510:171;:::o;46687:230::-;46827:34;46823:1;46815:6;46811:14;46804:58;46896:13;46891:2;46883:6;46879:15;46872:38;46687:230;:::o;46923:237::-;47063:34;47059:1;47051:6;47047:14;47040:58;47132:20;47127:2;47119:6;47115:15;47108:45;46923:237;:::o;47166:225::-;47306:34;47302:1;47294:6;47290:14;47283:58;47375:8;47370:2;47362:6;47358:15;47351:33;47166:225;:::o;47397:178::-;47537:30;47533:1;47525:6;47521:14;47514:54;47397:178;:::o;47581:169::-;47721:21;47717:1;47709:6;47705:14;47698:45;47581:169;:::o;47756:223::-;47896:34;47892:1;47884:6;47880:14;47873:58;47965:6;47960:2;47952:6;47948:15;47941:31;47756:223;:::o;47985:175::-;48125:27;48121:1;48113:6;48109:14;48102:51;47985:175;:::o;48166:168::-;48306:20;48302:1;48294:6;48290:14;48283:44;48166:168;:::o;48340:231::-;48480:34;48476:1;48468:6;48464:14;48457:58;48549:14;48544:2;48536:6;48532:15;48525:39;48340:231;:::o;48577:178::-;48717:30;48713:1;48705:6;48701:14;48694:54;48577:178;:::o;48761:243::-;48901:34;48897:1;48889:6;48885:14;48878:58;48970:26;48965:2;48957:6;48953:15;48946:51;48761:243;:::o;49010:229::-;49150:34;49146:1;49138:6;49134:14;49127:58;49219:12;49214:2;49206:6;49202:15;49195:37;49010:229;:::o;49245:228::-;49385:34;49381:1;49373:6;49369:14;49362:58;49454:11;49449:2;49441:6;49437:15;49430:36;49245:228;:::o;49479:182::-;49619:34;49615:1;49607:6;49603:14;49596:58;49479:182;:::o;49667:231::-;49807:34;49803:1;49795:6;49791:14;49784:58;49876:14;49871:2;49863:6;49859:15;49852:39;49667:231;:::o;49904:182::-;50044:34;50040:1;50032:6;50028:14;50021:58;49904:182;:::o;50092:169::-;50232:21;50228:1;50220:6;50216:14;50209:45;50092:169;:::o;50267:228::-;50407:34;50403:1;50395:6;50391:14;50384:58;50476:11;50471:2;50463:6;50459:15;50452:36;50267:228;:::o;50501:234::-;50641:34;50637:1;50629:6;50625:14;50618:58;50710:17;50705:2;50697:6;50693:15;50686:42;50501:234;:::o;50741:220::-;50881:34;50877:1;50869:6;50865:14;50858:58;50950:3;50945:2;50937:6;50933:15;50926:28;50741:220;:::o;50967:164::-;51107:16;51103:1;51095:6;51091:14;51084:40;50967:164;:::o;51137:114::-;;:::o;51257:236::-;51397:34;51393:1;51385:6;51381:14;51374:58;51466:19;51461:2;51453:6;51449:15;51442:44;51257:236;:::o;51499:182::-;51639:34;51635:1;51627:6;51623:14;51616:58;51499:182;:::o;51687:231::-;51827:34;51823:1;51815:6;51811:14;51804:58;51896:14;51891:2;51883:6;51879:15;51872:39;51687:231;:::o;51924:171::-;52064:23;52060:1;52052:6;52048:14;52041:47;51924:171;:::o;52101:220::-;52241:34;52237:1;52229:6;52225:14;52218:58;52310:3;52305:2;52297:6;52293:15;52286:28;52101:220;:::o;52327:166::-;52467:18;52463:1;52455:6;52451:14;52444:42;52327:166;:::o;52499:174::-;52639:26;52635:1;52627:6;52623:14;52616:50;52499:174;:::o;52679:223::-;52819:34;52815:1;52807:6;52803:14;52796:58;52888:6;52883:2;52875:6;52871:15;52864:31;52679:223;:::o;52908:225::-;53048:34;53044:1;53036:6;53032:14;53025:58;53117:8;53112:2;53104:6;53100:15;53093:33;52908:225;:::o;53139:122::-;53212:24;53230:5;53212:24;:::i;:::-;53205:5;53202:35;53192:63;;53251:1;53248;53241:12;53192:63;53139:122;:::o;53267:116::-;53337:21;53352:5;53337:21;:::i;:::-;53330:5;53327:32;53317:60;;53373:1;53370;53363:12;53317:60;53267:116;:::o;53389:120::-;53461:23;53478:5;53461:23;:::i;:::-;53454:5;53451:34;53441:62;;53499:1;53496;53489:12;53441:62;53389:120;:::o;53515:122::-;53588:24;53606:5;53588:24;:::i;:::-;53581:5;53578:35;53568:63;;53627:1;53624;53617:12;53568:63;53515:122;:::o

Swarm Source

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