ETH Price: $2,043.28 (+0.85%)

Token

ADNoidz (NOIDZ)
 

Overview

Max Total Supply

55 NOIDZ

Holders

5

Transfers

-
0

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

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:
Noidz

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-10-13
*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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


// OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


// OpenZeppelin Contracts v4.4.1 (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/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (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/IERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (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`.
     *
     * 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;

    /**
     * @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 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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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


// OpenZeppelin Contracts v4.4.1 (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/Context.sol


// OpenZeppelin Contracts v4.4.1 (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/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (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: address zero is not a valid owner");
        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: invalid token ID");
        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) {
        _requireMinted(tokenId);

        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 overridden 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 token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @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 {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/Noidz.sol

//SPDX-License-Identifier: MIT

// ....................................................................................................
// ....................................................................................................
// ....................................................................................................
// ....................................................................................................
// ....................................................................................................
// ....................................................................................................
// ............................................................     ...................................
// ...............  ...........................................      ..................................
// ..............     .............   ........................        .................................
// .............       .............    ..   .................          ...............................
// .............        .............          ..............            ..............................
// ............           .........                      ...              .............................
// ............            ...                                             ............................
// ............                                                            ............................
// ............                                                             ...........................
// ............                                                             ...........................
// ............                                                            ............................
// ............                                                            ............................
// ..............                                                          ............................
// ...............                                                          ...........................
// ...............                                                            .........................
// ..............                                                             .........................
// ..............                                                              ........................
// ..............                                                               .......................
// ..............                         ANEKDAMIAN                            .......................
// ..............                                                               .......................
// ..............                                                                ......................
// ...............                                                                  ...................
// ..............                                                                 .....................
// ............                                                                   .....................
// ...............                                                              .   ...................
// ................                                                           .........................
// ..............    ..                                                     ...........................
// ......................                                                  ............................
// .........................                                             ..............................
// ............................                                       .................................
// ................................                               .....................................
// .....................................                     ..........................................
// ....................................................................................................
// ....................................................................................................
// ..................................................................................... ....... ......
// .............................................................................. ....... .............
// ....................................................................................................
// ....................................................................................................
// ....................................................................................................
// .................................................................................. .................
// ....................................................................................................
// ....................................................................................................


pragma solidity ^0.8.0;




interface IADTrainerContract {
    function balanceOf(address addr) external view returns (uint);
}

contract Noidz is ERC721, Ownable, ReentrancyGuard {
    address public ADTrainerAddr;

    string internal PROVENANCE_HASH;
    string internal _baseTokenURI;

    uint256 public constant MAX_RESERVED = 100;
    uint256 public CURR_MAX_SUPPLY = 55;
    uint256 public constant TOTAL_MAX_SUPPLY = 5555;
    uint256 public constant MINT_PRICE = 0 ether;

    bool public revealed;
    bool public mintActive;
    string public placeholderURI;
    uint256 public totalSupply;
    uint256 public reserved;
    uint256 public maxPerTx = 10;



    constructor(address _ADTrainerAddr)ERC721("ADNoidz", "NOIDZ"){
        ADTrainerAddr = _ADTrainerAddr;
    }

    /**
     * @notice Returns whether or not an address holds a AD Trainer
     * @param account Address to return the holder status of
     */
    function isADTrainer(address account) public view returns (bool) {
        return IADTrainerContract(ADTrainerAddr).balanceOf(account) > 0;
    }

    /**
     * @notice Modifier that requires the sender to be a Trainer
     */
    modifier onlyTrainers(){ require(isADTrainer(_msgSender()), "Must be an AD Trainer to mint.");_;}

    /**
     * @notice Override ERC721 _baseURI function to use base URI pattern
     */
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }

    /**
     * @notice Return token metadata
     * @param tokenId to return metadata for
     * @return token URI for the specified token
     */
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_exists(tokenId), "Token does not exist.");

        return revealed ? ERC721.tokenURI(tokenId) : placeholderURI;
    }

    /**
     * @notice Provenance hash is used as proof that token metadata has not been modified
     */
    function provenanceHash() public view returns (string memory) {
        require(
            bytes(PROVENANCE_HASH).length != 0,
            "Provenance hash is not set"
        );

        return PROVENANCE_HASH;
    }

    /**
     * @notice Set provenance hash
     * @dev Can only be set once
     * @param _provenanceHash metadata proof string
     */
    function setProvenanceHash(string memory _provenanceHash) public onlyOwner {
        PROVENANCE_HASH = _provenanceHash;
    }
   
    /**
     * @notice Set address of AD Trainer
     * @param _ADTrainerAddr address of AD Trainer
     */
    function setADTrainerAddr(address _ADTrainerAddr) public onlyOwner {
        ADTrainerAddr = _ADTrainerAddr;
    }

    /**
     * @notice Flip token metadata to revealed
     * @dev Can only be revealed after token offset has been set
     */
    function flipRevealed() public onlyOwner {
        revealed = !revealed;
    }

    /**
     * @notice Toggle mintActive bool
     * @dev affects mint function
     */
    function toggleMint() public onlyOwner {
        mintActive = !mintActive;
    }

    /**
     * @notice Reserves to various addresses
     * @param amount of tokens to be reserved
     * @param to address to receive reserved tokens
     */
    function reserve(uint256 amount, address to) public onlyOwner {
        require(
            reserved + amount <= MAX_RESERVED,
            "Exceeds maximum number of reserved tokens"
        );
        require(totalSupply + amount <= CURR_MAX_SUPPLY, "Insufficient supply");

        for (uint256 i = 0; i < amount; i++) {
            _safeMint(to, totalSupply);
            totalSupply += 1;
        }

        reserved += amount;
    }

    /**
     * @notice Set base token URI
     * @param URI base metadata URI to be prepended to token ID
     */
    function setBaseTokenURI(string memory URI) public onlyOwner {
        _baseTokenURI = URI;
    }


    /**
     * @notice Set placeholder token URI
     * @param URI placeholder metadata returned before reveal
     */
    function setPlaceholderURI(string memory URI) public onlyOwner {
        placeholderURI = URI;
    }

    /**
     * @notice Set max mints per address
     * @param amount of mints a single tx is valid for
     */
    function setmaxPerTx(uint256 amount) public onlyOwner {
        maxPerTx = amount;
    }

    /**
     * @notice Mint a token
     * @param amount to mint
     */
    function mint(uint256 amount) public payable nonReentrant onlyTrainers {
        require(totalSupply + amount <= CURR_MAX_SUPPLY, "Insufficient supply");
        require(mintActive, "Minting is not active");
        require(msg.value == MINT_PRICE * amount, "Invalid Ether amount sent");
        require(
            amount <= maxPerTx,
            "Can not mint more than the allowed max per transaction."
        );

        for (uint256 i = 0; i < amount; i++) {
            _safeMint(_msgSender(), totalSupply);
            totalSupply += 1;
        }

    }

     /**
     * @notice Increase the current supply. Can not increase over TOTAL_MAX_SUPPLY.
     * @param increment by this amount
     */
    function increaseCurrSupply(uint256 increment) public {
        require(
            CURR_MAX_SUPPLY + increment <= TOTAL_MAX_SUPPLY,
            "Can not increase supply over total max supply."
        );
        CURR_MAX_SUPPLY += increment;
    }

    /**
     * @notice Withdraw all ETH transferred to the contract
     */
    function withdraw() external onlyOwner {
        Address.sendValue(payable(_msgSender()), address(this).balance);
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_ADTrainerAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ADTrainerAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURR_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_RESERVED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"increment","type":"uint256"}],"name":"increaseCurrSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isADTrainer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"placeholderURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenanceHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"_ADTrainerAddr","type":"address"}],"name":"setADTrainerAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setPlaceholderURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setmaxPerTx","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":[],"name":"toggleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526037600b55600a6010553480156200001b57600080fd5b5060405162004431380380620044318339818101604052810190620000419190620002e6565b6040518060400160405280600781526020017f41444e6f69647a000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4e4f49445a0000000000000000000000000000000000000000000000000000008152508160009080519060200190620000c59291906200021f565b508060019080519060200190620000de9291906200021f565b50505062000101620000f56200015160201b60201c565b6200015960201b60201c565b600160078190555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620003d0565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022d906200034c565b90600052602060002090601f0160209004810192826200025157600085556200029d565b82601f106200026c57805160ff19168380011785556200029d565b828001600101855582156200029d579182015b828111156200029c5782518255916020019190600101906200027f565b5b509050620002ac9190620002b0565b5090565b5b80821115620002cb576000816000905550600101620002b1565b5090565b600081519050620002e081620003b6565b92915050565b600060208284031215620002ff57620002fe620003b1565b5b60006200030f84828501620002cf565b91505092915050565b600062000325826200032c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200036557607f821691505b602082108114156200037c576200037b62000382565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620003c18162000318565b8114620003cd57600080fd5b50565b61405180620003e06000396000f3fe60806040526004361061023b5760003560e01c80636ba90c6e1161012e578063b88d4fde116100ab578063e0483ecd1161006f578063e0483ecd14610804578063e985e9c514610841578063f2fde38b1461087e578063f968adbe146108a7578063fe60d12c146108d25761023b565b8063b88d4fde14610731578063c002d23d1461075a578063c6ab67a314610785578063c87b56dd146107b0578063d3dd5fe0146107ed5761023b565b8063805dcae5116100f2578063805dcae51461066d5780638da5cb5b1461069657806395d89b41146106c1578063a0712d68146106ec578063a22cb465146107085761023b565b80636ba90c6e1461059a57806370a08231146105c5578063715018a6146106025780637313cba91461061957806378b7c4a2146106445761023b565b806330176e13116101bc57806342842e0e1161018057806342842e0e146104b357806351830227146104dc5780636352211e1461050757806365b1de20146105445780636aa834141461056f5761023b565b806330176e131461040a5780633574a2dd14610433578063397dbb691461045c5780633b2c3fb6146104855780633ccfd60b1461049c5761023b565b8063095ea7b311610203578063095ea7b314610339578063109695231461036257806318160ddd1461038b57806323b872dd146103b657806325fd90f3146103df5761023b565b806301ffc9a71461024057806303339bcb1461027d57806306fdde03146102a6578063081812fc146102d15780630921acdb1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190612bb3565b6108fd565b60405161027491906131ee565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190612cb0565b6109df565b005b3480156102b257600080fd5b506102bb610aec565b6040516102c89190613209565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190612c56565b610b7e565b6040516103059190613187565b60405180910390f35b34801561031a57600080fd5b50610323610bc4565b6040516103309190613187565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190612b73565b610bea565b005b34801561036e57600080fd5b5061038960048036038101906103849190612c0d565b610d02565b005b34801561039757600080fd5b506103a0610d24565b6040516103ad919061354b565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190612a5d565b610d2a565b005b3480156103eb57600080fd5b506103f4610d8a565b60405161040191906131ee565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190612c0d565b610d9d565b005b34801561043f57600080fd5b5061045a60048036038101906104559190612c0d565b610dbf565b005b34801561046857600080fd5b50610483600480360381019061047e9190612c56565b610de1565b005b34801561049157600080fd5b5061049a610e4f565b005b3480156104a857600080fd5b506104b1610e83565b005b3480156104bf57600080fd5b506104da60048036038101906104d59190612a5d565b610e9e565b005b3480156104e857600080fd5b506104f1610ebe565b6040516104fe91906131ee565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190612c56565b610ed1565b60405161053b9190613187565b60405180910390f35b34801561055057600080fd5b50610559610f83565b604051610566919061354b565b60405180910390f35b34801561057b57600080fd5b50610584610f89565b604051610591919061354b565b60405180910390f35b3480156105a657600080fd5b506105af610f8f565b6040516105bc919061354b565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906129f0565b610f94565b6040516105f9919061354b565b60405180910390f35b34801561060e57600080fd5b5061061761104c565b005b34801561062557600080fd5b5061062e611060565b60405161063b9190613209565b60405180910390f35b34801561065057600080fd5b5061066b600480360381019061066691906129f0565b6110ee565b005b34801561067957600080fd5b50610694600480360381019061068f9190612c56565b61113a565b005b3480156106a257600080fd5b506106ab61114c565b6040516106b89190613187565b60405180910390f35b3480156106cd57600080fd5b506106d6611176565b6040516106e39190613209565b60405180910390f35b61070660048036038101906107019190612c56565b611208565b005b34801561071457600080fd5b5061072f600480360381019061072a9190612b33565b611430565b005b34801561073d57600080fd5b5061075860048036038101906107539190612ab0565b611446565b005b34801561076657600080fd5b5061076f6114a8565b60405161077c919061354b565b60405180910390f35b34801561079157600080fd5b5061079a6114ad565b6040516107a79190613209565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d29190612c56565b611591565b6040516107e49190613209565b60405180910390f35b3480156107f957600080fd5b50610802611690565b005b34801561081057600080fd5b5061082b600480360381019061082691906129f0565b6116c4565b60405161083891906131ee565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190612a1d565b61177a565b60405161087591906131ee565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a091906129f0565b61180e565b005b3480156108b357600080fd5b506108bc611892565b6040516108c9919061354b565b60405180910390f35b3480156108de57600080fd5b506108e7611898565b6040516108f4919061354b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857506109d78261189e565b5b9050919050565b6109e7611908565b606482600f546109f7919061363b565b1115610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f9061334b565b60405180910390fd5b600b5482600e54610a49919061363b565b1115610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906133eb565b60405180910390fd5b60005b82811015610ace57610aa182600e54611986565b6001600e6000828254610ab4919061363b565b925050819055508080610ac690613869565b915050610a8d565b5081600f6000828254610ae1919061363b565b925050819055505050565b606060008054610afb90613806565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2790613806565b8015610b745780601f10610b4957610100808354040283529160200191610b74565b820191906000526020600020905b815481529060010190602001808311610b5757829003601f168201915b5050505050905090565b6000610b89826119a4565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610bf582610ed1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d9061348b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c856119ef565b73ffffffffffffffffffffffffffffffffffffffff161480610cb45750610cb381610cae6119ef565b61177a565b5b610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea9061338b565b60405180910390fd5b610cfd83836119f7565b505050565b610d0a611908565b8060099080519060200190610d209291906127ef565b5050565b600e5481565b610d3b610d356119ef565b82611ab0565b610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906134eb565b60405180910390fd5b610d85838383611b45565b505050565b600c60019054906101000a900460ff1681565b610da5611908565b80600a9080519060200190610dbb9291906127ef565b5050565b610dc7611908565b80600d9080519060200190610ddd9291906127ef565b5050565b6115b381600b54610df2919061363b565b1115610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a906134ab565b60405180910390fd5b80600b6000828254610e45919061363b565b9250508190555050565b610e57611908565b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b610e8b611908565b610e9c610e966119ef565b47611dac565b565b610eb983838360405180602001604052806000815250611446565b505050565b600c60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f719061344b565b60405180910390fd5b80915050919050565b6115b381565b600b5481565b606481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc9061336b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611054611908565b61105e6000611ea0565b565b600d805461106d90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461109990613806565b80156110e65780601f106110bb576101008083540402835291602001916110e6565b820191906000526020600020905b8154815290600101906020018083116110c957829003601f168201915b505050505081565b6110f6611908565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611142611908565b8060108190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461118590613806565b80601f01602080910402602001604051908101604052809291908181526020018280546111b190613806565b80156111fe5780601f106111d3576101008083540402835291602001916111fe565b820191906000526020600020905b8154815290600101906020018083116111e157829003601f168201915b5050505050905090565b6002600754141561124e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112459061350b565b60405180910390fd5b60026007819055506112666112616119ef565b6116c4565b6112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c9061346b565b60405180910390fd5b600b5481600e546112b6919061363b565b11156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee906133eb565b60405180910390fd5b600c60019054906101000a900460ff16611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061342b565b60405180910390fd5b80600061135391906136c2565b3414611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b906132ab565b60405180910390fd5b6010548111156113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d0906134cb565b60405180910390fd5b60005b81811015611424576113f76113ef6119ef565b600e54611986565b6001600e600082825461140a919061363b565b92505081905550808061141c90613869565b9150506113dc565b50600160078190555050565b61144261143b6119ef565b8383611f66565b5050565b6114576114516119ef565b83611ab0565b611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d906134eb565b60405180910390fd5b6114a2848484846120d3565b50505050565b600081565b60606000600980546114be90613806565b90501415611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f89061352b565b60405180910390fd5b6009805461150e90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461153a90613806565b80156115875780601f1061155c57610100808354040283529160200191611587565b820191906000526020600020905b81548152906001019060200180831161156a57829003601f168201915b5050505050905090565b606061159c8261212f565b6115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906133cb565b60405180910390fd5b600c60009054906101000a900460ff1661167f57600d80546115fc90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461162890613806565b80156116755780601f1061164a57610100808354040283529160200191611675565b820191906000526020600020905b81548152906001019060200180831161165857829003601f168201915b5050505050611689565b6116888261219b565b5b9050919050565b611698611908565b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016117229190613187565b60206040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190612c83565b119050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611816611908565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d9061324b565b60405180910390fd5b61188f81611ea0565b50565b60105481565b600f5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6119106119ef565b73ffffffffffffffffffffffffffffffffffffffff1661192e61114c565b73ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b9061340b565b60405180910390fd5b565b6119a0828260405180602001604052806000815250612203565b5050565b6119ad8161212f565b6119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e39061344b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a6a83610ed1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611abc83610ed1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611afe5750611afd818561177a565b5b80611b3c57508373ffffffffffffffffffffffffffffffffffffffff16611b2484610b7e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b6582610ed1565b73ffffffffffffffffffffffffffffffffffffffff1614611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb29061326b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c22906132cb565b60405180910390fd5b611c3683838361225e565b611c416000826119f7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c91919061371c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce8919061363b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611da7838383612263565b505050565b80471015611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de69061332b565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611e1590613172565b60006040518083038185875af1925050503d8060008114611e52576040519150601f19603f3d011682016040523d82523d6000602084013e611e57565b606091505b5050905080611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e929061330b565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc906132eb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120c691906131ee565b60405180910390a3505050565b6120de848484611b45565b6120ea84848484612268565b612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061322b565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606121a6826119a4565b60006121b06123ff565b905060008151116121d057604051806020016040528060008152506121fb565b806121da84612491565b6040516020016121eb92919061314e565b6040516020818303038152906040525b915050919050565b61220d83836125f2565b61221a6000848484612268565b612259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122509061322b565b60405180910390fd5b505050565b505050565b505050565b60006122898473ffffffffffffffffffffffffffffffffffffffff166127cc565b156123f2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122b26119ef565b8786866040518563ffffffff1660e01b81526004016122d494939291906131a2565b602060405180830381600087803b1580156122ee57600080fd5b505af192505050801561231f57506040513d601f19601f8201168201806040525081019061231c9190612be0565b60015b6123a2573d806000811461234f576040519150601f19603f3d011682016040523d82523d6000602084013e612354565b606091505b5060008151141561239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061322b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123f7565b600190505b949350505050565b6060600a805461240e90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461243a90613806565b80156124875780601f1061245c57610100808354040283529160200191612487565b820191906000526020600020905b81548152906001019060200180831161246a57829003601f168201915b5050505050905090565b606060008214156124d9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125ed565b600082905060005b6000821461250b5780806124f490613869565b915050600a826125049190613691565b91506124e1565b60008167ffffffffffffffff8111156125275761252661399f565b5b6040519080825280601f01601f1916602001820160405280156125595781602001600182028036833780820191505090505b5090505b600085146125e657600182612572919061371c565b9150600a8561258191906138b2565b603061258d919061363b565b60f81b8183815181106125a3576125a2613970565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125df9190613691565b945061255d565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612659906133ab565b60405180910390fd5b61266b8161212f565b156126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a29061328b565b60405180910390fd5b6126b76000838361225e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612707919061363b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127c860008383612263565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546127fb90613806565b90600052602060002090601f01602090048101928261281d5760008555612864565b82601f1061283657805160ff1916838001178555612864565b82800160010185558215612864579182015b82811115612863578251825591602001919060010190612848565b5b5090506128719190612875565b5090565b5b8082111561288e576000816000905550600101612876565b5090565b60006128a56128a08461358b565b613566565b9050828152602081018484840111156128c1576128c06139d3565b5b6128cc8482856137c4565b509392505050565b60006128e76128e2846135bc565b613566565b905082815260208101848484011115612903576129026139d3565b5b61290e8482856137c4565b509392505050565b60008135905061292581613fbf565b92915050565b60008135905061293a81613fd6565b92915050565b60008135905061294f81613fed565b92915050565b60008151905061296481613fed565b92915050565b600082601f83011261297f5761297e6139ce565b5b813561298f848260208601612892565b91505092915050565b600082601f8301126129ad576129ac6139ce565b5b81356129bd8482602086016128d4565b91505092915050565b6000813590506129d581614004565b92915050565b6000815190506129ea81614004565b92915050565b600060208284031215612a0657612a056139dd565b5b6000612a1484828501612916565b91505092915050565b60008060408385031215612a3457612a336139dd565b5b6000612a4285828601612916565b9250506020612a5385828601612916565b9150509250929050565b600080600060608486031215612a7657612a756139dd565b5b6000612a8486828701612916565b9350506020612a9586828701612916565b9250506040612aa6868287016129c6565b9150509250925092565b60008060008060808587031215612aca57612ac96139dd565b5b6000612ad887828801612916565b9450506020612ae987828801612916565b9350506040612afa878288016129c6565b925050606085013567ffffffffffffffff811115612b1b57612b1a6139d8565b5b612b278782880161296a565b91505092959194509250565b60008060408385031215612b4a57612b496139dd565b5b6000612b5885828601612916565b9250506020612b698582860161292b565b9150509250929050565b60008060408385031215612b8a57612b896139dd565b5b6000612b9885828601612916565b9250506020612ba9858286016129c6565b9150509250929050565b600060208284031215612bc957612bc86139dd565b5b6000612bd784828501612940565b91505092915050565b600060208284031215612bf657612bf56139dd565b5b6000612c0484828501612955565b91505092915050565b600060208284031215612c2357612c226139dd565b5b600082013567ffffffffffffffff811115612c4157612c406139d8565b5b612c4d84828501612998565b91505092915050565b600060208284031215612c6c57612c6b6139dd565b5b6000612c7a848285016129c6565b91505092915050565b600060208284031215612c9957612c986139dd565b5b6000612ca7848285016129db565b91505092915050565b60008060408385031215612cc757612cc66139dd565b5b6000612cd5858286016129c6565b9250506020612ce685828601612916565b9150509250929050565b612cf981613750565b82525050565b612d0881613762565b82525050565b6000612d19826135ed565b612d238185613603565b9350612d338185602086016137d3565b612d3c816139e2565b840191505092915050565b6000612d52826135f8565b612d5c818561361f565b9350612d6c8185602086016137d3565b612d75816139e2565b840191505092915050565b6000612d8b826135f8565b612d958185613630565b9350612da58185602086016137d3565b80840191505092915050565b6000612dbe60328361361f565b9150612dc9826139f3565b604082019050919050565b6000612de160268361361f565b9150612dec82613a42565b604082019050919050565b6000612e0460258361361f565b9150612e0f82613a91565b604082019050919050565b6000612e27601c8361361f565b9150612e3282613ae0565b602082019050919050565b6000612e4a60198361361f565b9150612e5582613b09565b602082019050919050565b6000612e6d60248361361f565b9150612e7882613b32565b604082019050919050565b6000612e9060198361361f565b9150612e9b82613b81565b602082019050919050565b6000612eb3603a8361361f565b9150612ebe82613baa565b604082019050919050565b6000612ed6601d8361361f565b9150612ee182613bf9565b602082019050919050565b6000612ef960298361361f565b9150612f0482613c22565b604082019050919050565b6000612f1c60298361361f565b9150612f2782613c71565b604082019050919050565b6000612f3f603e8361361f565b9150612f4a82613cc0565b604082019050919050565b6000612f6260208361361f565b9150612f6d82613d0f565b602082019050919050565b6000612f8560158361361f565b9150612f9082613d38565b602082019050919050565b6000612fa860138361361f565b9150612fb382613d61565b602082019050919050565b6000612fcb60208361361f565b9150612fd682613d8a565b602082019050919050565b6000612fee60158361361f565b9150612ff982613db3565b602082019050919050565b600061301160188361361f565b915061301c82613ddc565b602082019050919050565b6000613034601e8361361f565b915061303f82613e05565b602082019050919050565b600061305760218361361f565b915061306282613e2e565b604082019050919050565b600061307a600083613614565b915061308582613e7d565b600082019050919050565b600061309d602e8361361f565b91506130a882613e80565b604082019050919050565b60006130c060378361361f565b91506130cb82613ecf565b604082019050919050565b60006130e3602e8361361f565b91506130ee82613f1e565b604082019050919050565b6000613106601f8361361f565b915061311182613f6d565b602082019050919050565b6000613129601a8361361f565b915061313482613f96565b602082019050919050565b613148816137ba565b82525050565b600061315a8285612d80565b91506131668284612d80565b91508190509392505050565b600061317d8261306d565b9150819050919050565b600060208201905061319c6000830184612cf0565b92915050565b60006080820190506131b76000830187612cf0565b6131c46020830186612cf0565b6131d1604083018561313f565b81810360608301526131e38184612d0e565b905095945050505050565b60006020820190506132036000830184612cff565b92915050565b600060208201905081810360008301526132238184612d47565b905092915050565b6000602082019050818103600083015261324481612db1565b9050919050565b6000602082019050818103600083015261326481612dd4565b9050919050565b6000602082019050818103600083015261328481612df7565b9050919050565b600060208201905081810360008301526132a481612e1a565b9050919050565b600060208201905081810360008301526132c481612e3d565b9050919050565b600060208201905081810360008301526132e481612e60565b9050919050565b6000602082019050818103600083015261330481612e83565b9050919050565b6000602082019050818103600083015261332481612ea6565b9050919050565b6000602082019050818103600083015261334481612ec9565b9050919050565b6000602082019050818103600083015261336481612eec565b9050919050565b6000602082019050818103600083015261338481612f0f565b9050919050565b600060208201905081810360008301526133a481612f32565b9050919050565b600060208201905081810360008301526133c481612f55565b9050919050565b600060208201905081810360008301526133e481612f78565b9050919050565b6000602082019050818103600083015261340481612f9b565b9050919050565b6000602082019050818103600083015261342481612fbe565b9050919050565b6000602082019050818103600083015261344481612fe1565b9050919050565b6000602082019050818103600083015261346481613004565b9050919050565b6000602082019050818103600083015261348481613027565b9050919050565b600060208201905081810360008301526134a48161304a565b9050919050565b600060208201905081810360008301526134c481613090565b9050919050565b600060208201905081810360008301526134e4816130b3565b9050919050565b60006020820190508181036000830152613504816130d6565b9050919050565b60006020820190508181036000830152613524816130f9565b9050919050565b600060208201905081810360008301526135448161311c565b9050919050565b6000602082019050613560600083018461313f565b92915050565b6000613570613581565b905061357c8282613838565b919050565b6000604051905090565b600067ffffffffffffffff8211156135a6576135a561399f565b5b6135af826139e2565b9050602081019050919050565b600067ffffffffffffffff8211156135d7576135d661399f565b5b6135e0826139e2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613646826137ba565b9150613651836137ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613686576136856138e3565b5b828201905092915050565b600061369c826137ba565b91506136a7836137ba565b9250826136b7576136b6613912565b5b828204905092915050565b60006136cd826137ba565b91506136d8836137ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613711576137106138e3565b5b828202905092915050565b6000613727826137ba565b9150613732836137ba565b925082821015613745576137446138e3565b5b828203905092915050565b600061375b8261379a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137f15780820151818401526020810190506137d6565b83811115613800576000848401525b50505050565b6000600282049050600182168061381e57607f821691505b6020821081141561383257613831613941565b5b50919050565b613841826139e2565b810181811067ffffffffffffffff821117156138605761385f61399f565b5b80604052505050565b6000613874826137ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138a7576138a66138e3565b5b600182019050919050565b60006138bd826137ba565b91506138c8836137ba565b9250826138d8576138d7613912565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420457468657220616d6f756e742073656e7400000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f45786365656473206d6178696d756d206e756d626572206f662072657365727660008201527f656420746f6b656e730000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f496e73756666696369656e7420737570706c7900000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206973206e6f74206163746976650000000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4d75737420626520616e20414420547261696e657220746f206d696e742e0000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e206e6f7420696e63726561736520737570706c79206f76657220746f7460008201527f616c206d617820737570706c792e000000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e74206d6f7265207468616e2074686520616c6c6f7760008201527f6564206d617820706572207472616e73616374696f6e2e000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f50726f76656e616e63652068617368206973206e6f7420736574000000000000600082015250565b613fc881613750565b8114613fd357600080fd5b50565b613fdf81613762565b8114613fea57600080fd5b50565b613ff68161376e565b811461400157600080fd5b50565b61400d816137ba565b811461401857600080fd5b5056fea2646970667358221220e6ed7b32a234367992c48a6d9abb30cf0992f6d700cb048fc65945ad5a2d2e0e64736f6c63430008070033000000000000000000000000eb18ae97e6f7c460e84707da0b08327e13a558ef

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80636ba90c6e1161012e578063b88d4fde116100ab578063e0483ecd1161006f578063e0483ecd14610804578063e985e9c514610841578063f2fde38b1461087e578063f968adbe146108a7578063fe60d12c146108d25761023b565b8063b88d4fde14610731578063c002d23d1461075a578063c6ab67a314610785578063c87b56dd146107b0578063d3dd5fe0146107ed5761023b565b8063805dcae5116100f2578063805dcae51461066d5780638da5cb5b1461069657806395d89b41146106c1578063a0712d68146106ec578063a22cb465146107085761023b565b80636ba90c6e1461059a57806370a08231146105c5578063715018a6146106025780637313cba91461061957806378b7c4a2146106445761023b565b806330176e13116101bc57806342842e0e1161018057806342842e0e146104b357806351830227146104dc5780636352211e1461050757806365b1de20146105445780636aa834141461056f5761023b565b806330176e131461040a5780633574a2dd14610433578063397dbb691461045c5780633b2c3fb6146104855780633ccfd60b1461049c5761023b565b8063095ea7b311610203578063095ea7b314610339578063109695231461036257806318160ddd1461038b57806323b872dd146103b657806325fd90f3146103df5761023b565b806301ffc9a71461024057806303339bcb1461027d57806306fdde03146102a6578063081812fc146102d15780630921acdb1461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190612bb3565b6108fd565b60405161027491906131ee565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190612cb0565b6109df565b005b3480156102b257600080fd5b506102bb610aec565b6040516102c89190613209565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190612c56565b610b7e565b6040516103059190613187565b60405180910390f35b34801561031a57600080fd5b50610323610bc4565b6040516103309190613187565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b9190612b73565b610bea565b005b34801561036e57600080fd5b5061038960048036038101906103849190612c0d565b610d02565b005b34801561039757600080fd5b506103a0610d24565b6040516103ad919061354b565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190612a5d565b610d2a565b005b3480156103eb57600080fd5b506103f4610d8a565b60405161040191906131ee565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190612c0d565b610d9d565b005b34801561043f57600080fd5b5061045a60048036038101906104559190612c0d565b610dbf565b005b34801561046857600080fd5b50610483600480360381019061047e9190612c56565b610de1565b005b34801561049157600080fd5b5061049a610e4f565b005b3480156104a857600080fd5b506104b1610e83565b005b3480156104bf57600080fd5b506104da60048036038101906104d59190612a5d565b610e9e565b005b3480156104e857600080fd5b506104f1610ebe565b6040516104fe91906131ee565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190612c56565b610ed1565b60405161053b9190613187565b60405180910390f35b34801561055057600080fd5b50610559610f83565b604051610566919061354b565b60405180910390f35b34801561057b57600080fd5b50610584610f89565b604051610591919061354b565b60405180910390f35b3480156105a657600080fd5b506105af610f8f565b6040516105bc919061354b565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906129f0565b610f94565b6040516105f9919061354b565b60405180910390f35b34801561060e57600080fd5b5061061761104c565b005b34801561062557600080fd5b5061062e611060565b60405161063b9190613209565b60405180910390f35b34801561065057600080fd5b5061066b600480360381019061066691906129f0565b6110ee565b005b34801561067957600080fd5b50610694600480360381019061068f9190612c56565b61113a565b005b3480156106a257600080fd5b506106ab61114c565b6040516106b89190613187565b60405180910390f35b3480156106cd57600080fd5b506106d6611176565b6040516106e39190613209565b60405180910390f35b61070660048036038101906107019190612c56565b611208565b005b34801561071457600080fd5b5061072f600480360381019061072a9190612b33565b611430565b005b34801561073d57600080fd5b5061075860048036038101906107539190612ab0565b611446565b005b34801561076657600080fd5b5061076f6114a8565b60405161077c919061354b565b60405180910390f35b34801561079157600080fd5b5061079a6114ad565b6040516107a79190613209565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d29190612c56565b611591565b6040516107e49190613209565b60405180910390f35b3480156107f957600080fd5b50610802611690565b005b34801561081057600080fd5b5061082b600480360381019061082691906129f0565b6116c4565b60405161083891906131ee565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190612a1d565b61177a565b60405161087591906131ee565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a091906129f0565b61180e565b005b3480156108b357600080fd5b506108bc611892565b6040516108c9919061354b565b60405180910390f35b3480156108de57600080fd5b506108e7611898565b6040516108f4919061354b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857506109d78261189e565b5b9050919050565b6109e7611908565b606482600f546109f7919061363b565b1115610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f9061334b565b60405180910390fd5b600b5482600e54610a49919061363b565b1115610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a81906133eb565b60405180910390fd5b60005b82811015610ace57610aa182600e54611986565b6001600e6000828254610ab4919061363b565b925050819055508080610ac690613869565b915050610a8d565b5081600f6000828254610ae1919061363b565b925050819055505050565b606060008054610afb90613806565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2790613806565b8015610b745780601f10610b4957610100808354040283529160200191610b74565b820191906000526020600020905b815481529060010190602001808311610b5757829003601f168201915b5050505050905090565b6000610b89826119a4565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610bf582610ed1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d9061348b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c856119ef565b73ffffffffffffffffffffffffffffffffffffffff161480610cb45750610cb381610cae6119ef565b61177a565b5b610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea9061338b565b60405180910390fd5b610cfd83836119f7565b505050565b610d0a611908565b8060099080519060200190610d209291906127ef565b5050565b600e5481565b610d3b610d356119ef565b82611ab0565b610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906134eb565b60405180910390fd5b610d85838383611b45565b505050565b600c60019054906101000a900460ff1681565b610da5611908565b80600a9080519060200190610dbb9291906127ef565b5050565b610dc7611908565b80600d9080519060200190610ddd9291906127ef565b5050565b6115b381600b54610df2919061363b565b1115610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a906134ab565b60405180910390fd5b80600b6000828254610e45919061363b565b9250508190555050565b610e57611908565b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b610e8b611908565b610e9c610e966119ef565b47611dac565b565b610eb983838360405180602001604052806000815250611446565b505050565b600c60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f719061344b565b60405180910390fd5b80915050919050565b6115b381565b600b5481565b606481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc9061336b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611054611908565b61105e6000611ea0565b565b600d805461106d90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461109990613806565b80156110e65780601f106110bb576101008083540402835291602001916110e6565b820191906000526020600020905b8154815290600101906020018083116110c957829003601f168201915b505050505081565b6110f6611908565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611142611908565b8060108190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461118590613806565b80601f01602080910402602001604051908101604052809291908181526020018280546111b190613806565b80156111fe5780601f106111d3576101008083540402835291602001916111fe565b820191906000526020600020905b8154815290600101906020018083116111e157829003601f168201915b5050505050905090565b6002600754141561124e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112459061350b565b60405180910390fd5b60026007819055506112666112616119ef565b6116c4565b6112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c9061346b565b60405180910390fd5b600b5481600e546112b6919061363b565b11156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee906133eb565b60405180910390fd5b600c60019054906101000a900460ff16611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061342b565b60405180910390fd5b80600061135391906136c2565b3414611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b906132ab565b60405180910390fd5b6010548111156113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d0906134cb565b60405180910390fd5b60005b81811015611424576113f76113ef6119ef565b600e54611986565b6001600e600082825461140a919061363b565b92505081905550808061141c90613869565b9150506113dc565b50600160078190555050565b61144261143b6119ef565b8383611f66565b5050565b6114576114516119ef565b83611ab0565b611496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148d906134eb565b60405180910390fd5b6114a2848484846120d3565b50505050565b600081565b60606000600980546114be90613806565b90501415611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f89061352b565b60405180910390fd5b6009805461150e90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461153a90613806565b80156115875780601f1061155c57610100808354040283529160200191611587565b820191906000526020600020905b81548152906001019060200180831161156a57829003601f168201915b5050505050905090565b606061159c8261212f565b6115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906133cb565b60405180910390fd5b600c60009054906101000a900460ff1661167f57600d80546115fc90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461162890613806565b80156116755780601f1061164a57610100808354040283529160200191611675565b820191906000526020600020905b81548152906001019060200180831161165857829003601f168201915b5050505050611689565b6116888261219b565b5b9050919050565b611698611908565b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016117229190613187565b60206040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117729190612c83565b119050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611816611908565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d9061324b565b60405180910390fd5b61188f81611ea0565b50565b60105481565b600f5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6119106119ef565b73ffffffffffffffffffffffffffffffffffffffff1661192e61114c565b73ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b9061340b565b60405180910390fd5b565b6119a0828260405180602001604052806000815250612203565b5050565b6119ad8161212f565b6119ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e39061344b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a6a83610ed1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611abc83610ed1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611afe5750611afd818561177a565b5b80611b3c57508373ffffffffffffffffffffffffffffffffffffffff16611b2484610b7e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b6582610ed1565b73ffffffffffffffffffffffffffffffffffffffff1614611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb29061326b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c22906132cb565b60405180910390fd5b611c3683838361225e565b611c416000826119f7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c91919061371c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce8919061363b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611da7838383612263565b505050565b80471015611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de69061332b565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611e1590613172565b60006040518083038185875af1925050503d8060008114611e52576040519150601f19603f3d011682016040523d82523d6000602084013e611e57565b606091505b5050905080611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e929061330b565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc906132eb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120c691906131ee565b60405180910390a3505050565b6120de848484611b45565b6120ea84848484612268565b612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121209061322b565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606121a6826119a4565b60006121b06123ff565b905060008151116121d057604051806020016040528060008152506121fb565b806121da84612491565b6040516020016121eb92919061314e565b6040516020818303038152906040525b915050919050565b61220d83836125f2565b61221a6000848484612268565b612259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122509061322b565b60405180910390fd5b505050565b505050565b505050565b60006122898473ffffffffffffffffffffffffffffffffffffffff166127cc565b156123f2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122b26119ef565b8786866040518563ffffffff1660e01b81526004016122d494939291906131a2565b602060405180830381600087803b1580156122ee57600080fd5b505af192505050801561231f57506040513d601f19601f8201168201806040525081019061231c9190612be0565b60015b6123a2573d806000811461234f576040519150601f19603f3d011682016040523d82523d6000602084013e612354565b606091505b5060008151141561239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061322b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123f7565b600190505b949350505050565b6060600a805461240e90613806565b80601f016020809104026020016040519081016040528092919081815260200182805461243a90613806565b80156124875780601f1061245c57610100808354040283529160200191612487565b820191906000526020600020905b81548152906001019060200180831161246a57829003601f168201915b5050505050905090565b606060008214156124d9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125ed565b600082905060005b6000821461250b5780806124f490613869565b915050600a826125049190613691565b91506124e1565b60008167ffffffffffffffff8111156125275761252661399f565b5b6040519080825280601f01601f1916602001820160405280156125595781602001600182028036833780820191505090505b5090505b600085146125e657600182612572919061371c565b9150600a8561258191906138b2565b603061258d919061363b565b60f81b8183815181106125a3576125a2613970565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125df9190613691565b945061255d565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612659906133ab565b60405180910390fd5b61266b8161212f565b156126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a29061328b565b60405180910390fd5b6126b76000838361225e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612707919061363b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127c860008383612263565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546127fb90613806565b90600052602060002090601f01602090048101928261281d5760008555612864565b82601f1061283657805160ff1916838001178555612864565b82800160010185558215612864579182015b82811115612863578251825591602001919060010190612848565b5b5090506128719190612875565b5090565b5b8082111561288e576000816000905550600101612876565b5090565b60006128a56128a08461358b565b613566565b9050828152602081018484840111156128c1576128c06139d3565b5b6128cc8482856137c4565b509392505050565b60006128e76128e2846135bc565b613566565b905082815260208101848484011115612903576129026139d3565b5b61290e8482856137c4565b509392505050565b60008135905061292581613fbf565b92915050565b60008135905061293a81613fd6565b92915050565b60008135905061294f81613fed565b92915050565b60008151905061296481613fed565b92915050565b600082601f83011261297f5761297e6139ce565b5b813561298f848260208601612892565b91505092915050565b600082601f8301126129ad576129ac6139ce565b5b81356129bd8482602086016128d4565b91505092915050565b6000813590506129d581614004565b92915050565b6000815190506129ea81614004565b92915050565b600060208284031215612a0657612a056139dd565b5b6000612a1484828501612916565b91505092915050565b60008060408385031215612a3457612a336139dd565b5b6000612a4285828601612916565b9250506020612a5385828601612916565b9150509250929050565b600080600060608486031215612a7657612a756139dd565b5b6000612a8486828701612916565b9350506020612a9586828701612916565b9250506040612aa6868287016129c6565b9150509250925092565b60008060008060808587031215612aca57612ac96139dd565b5b6000612ad887828801612916565b9450506020612ae987828801612916565b9350506040612afa878288016129c6565b925050606085013567ffffffffffffffff811115612b1b57612b1a6139d8565b5b612b278782880161296a565b91505092959194509250565b60008060408385031215612b4a57612b496139dd565b5b6000612b5885828601612916565b9250506020612b698582860161292b565b9150509250929050565b60008060408385031215612b8a57612b896139dd565b5b6000612b9885828601612916565b9250506020612ba9858286016129c6565b9150509250929050565b600060208284031215612bc957612bc86139dd565b5b6000612bd784828501612940565b91505092915050565b600060208284031215612bf657612bf56139dd565b5b6000612c0484828501612955565b91505092915050565b600060208284031215612c2357612c226139dd565b5b600082013567ffffffffffffffff811115612c4157612c406139d8565b5b612c4d84828501612998565b91505092915050565b600060208284031215612c6c57612c6b6139dd565b5b6000612c7a848285016129c6565b91505092915050565b600060208284031215612c9957612c986139dd565b5b6000612ca7848285016129db565b91505092915050565b60008060408385031215612cc757612cc66139dd565b5b6000612cd5858286016129c6565b9250506020612ce685828601612916565b9150509250929050565b612cf981613750565b82525050565b612d0881613762565b82525050565b6000612d19826135ed565b612d238185613603565b9350612d338185602086016137d3565b612d3c816139e2565b840191505092915050565b6000612d52826135f8565b612d5c818561361f565b9350612d6c8185602086016137d3565b612d75816139e2565b840191505092915050565b6000612d8b826135f8565b612d958185613630565b9350612da58185602086016137d3565b80840191505092915050565b6000612dbe60328361361f565b9150612dc9826139f3565b604082019050919050565b6000612de160268361361f565b9150612dec82613a42565b604082019050919050565b6000612e0460258361361f565b9150612e0f82613a91565b604082019050919050565b6000612e27601c8361361f565b9150612e3282613ae0565b602082019050919050565b6000612e4a60198361361f565b9150612e5582613b09565b602082019050919050565b6000612e6d60248361361f565b9150612e7882613b32565b604082019050919050565b6000612e9060198361361f565b9150612e9b82613b81565b602082019050919050565b6000612eb3603a8361361f565b9150612ebe82613baa565b604082019050919050565b6000612ed6601d8361361f565b9150612ee182613bf9565b602082019050919050565b6000612ef960298361361f565b9150612f0482613c22565b604082019050919050565b6000612f1c60298361361f565b9150612f2782613c71565b604082019050919050565b6000612f3f603e8361361f565b9150612f4a82613cc0565b604082019050919050565b6000612f6260208361361f565b9150612f6d82613d0f565b602082019050919050565b6000612f8560158361361f565b9150612f9082613d38565b602082019050919050565b6000612fa860138361361f565b9150612fb382613d61565b602082019050919050565b6000612fcb60208361361f565b9150612fd682613d8a565b602082019050919050565b6000612fee60158361361f565b9150612ff982613db3565b602082019050919050565b600061301160188361361f565b915061301c82613ddc565b602082019050919050565b6000613034601e8361361f565b915061303f82613e05565b602082019050919050565b600061305760218361361f565b915061306282613e2e565b604082019050919050565b600061307a600083613614565b915061308582613e7d565b600082019050919050565b600061309d602e8361361f565b91506130a882613e80565b604082019050919050565b60006130c060378361361f565b91506130cb82613ecf565b604082019050919050565b60006130e3602e8361361f565b91506130ee82613f1e565b604082019050919050565b6000613106601f8361361f565b915061311182613f6d565b602082019050919050565b6000613129601a8361361f565b915061313482613f96565b602082019050919050565b613148816137ba565b82525050565b600061315a8285612d80565b91506131668284612d80565b91508190509392505050565b600061317d8261306d565b9150819050919050565b600060208201905061319c6000830184612cf0565b92915050565b60006080820190506131b76000830187612cf0565b6131c46020830186612cf0565b6131d1604083018561313f565b81810360608301526131e38184612d0e565b905095945050505050565b60006020820190506132036000830184612cff565b92915050565b600060208201905081810360008301526132238184612d47565b905092915050565b6000602082019050818103600083015261324481612db1565b9050919050565b6000602082019050818103600083015261326481612dd4565b9050919050565b6000602082019050818103600083015261328481612df7565b9050919050565b600060208201905081810360008301526132a481612e1a565b9050919050565b600060208201905081810360008301526132c481612e3d565b9050919050565b600060208201905081810360008301526132e481612e60565b9050919050565b6000602082019050818103600083015261330481612e83565b9050919050565b6000602082019050818103600083015261332481612ea6565b9050919050565b6000602082019050818103600083015261334481612ec9565b9050919050565b6000602082019050818103600083015261336481612eec565b9050919050565b6000602082019050818103600083015261338481612f0f565b9050919050565b600060208201905081810360008301526133a481612f32565b9050919050565b600060208201905081810360008301526133c481612f55565b9050919050565b600060208201905081810360008301526133e481612f78565b9050919050565b6000602082019050818103600083015261340481612f9b565b9050919050565b6000602082019050818103600083015261342481612fbe565b9050919050565b6000602082019050818103600083015261344481612fe1565b9050919050565b6000602082019050818103600083015261346481613004565b9050919050565b6000602082019050818103600083015261348481613027565b9050919050565b600060208201905081810360008301526134a48161304a565b9050919050565b600060208201905081810360008301526134c481613090565b9050919050565b600060208201905081810360008301526134e4816130b3565b9050919050565b60006020820190508181036000830152613504816130d6565b9050919050565b60006020820190508181036000830152613524816130f9565b9050919050565b600060208201905081810360008301526135448161311c565b9050919050565b6000602082019050613560600083018461313f565b92915050565b6000613570613581565b905061357c8282613838565b919050565b6000604051905090565b600067ffffffffffffffff8211156135a6576135a561399f565b5b6135af826139e2565b9050602081019050919050565b600067ffffffffffffffff8211156135d7576135d661399f565b5b6135e0826139e2565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613646826137ba565b9150613651836137ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613686576136856138e3565b5b828201905092915050565b600061369c826137ba565b91506136a7836137ba565b9250826136b7576136b6613912565b5b828204905092915050565b60006136cd826137ba565b91506136d8836137ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613711576137106138e3565b5b828202905092915050565b6000613727826137ba565b9150613732836137ba565b925082821015613745576137446138e3565b5b828203905092915050565b600061375b8261379a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137f15780820151818401526020810190506137d6565b83811115613800576000848401525b50505050565b6000600282049050600182168061381e57607f821691505b6020821081141561383257613831613941565b5b50919050565b613841826139e2565b810181811067ffffffffffffffff821117156138605761385f61399f565b5b80604052505050565b6000613874826137ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138a7576138a66138e3565b5b600182019050919050565b60006138bd826137ba565b91506138c8836137ba565b9250826138d8576138d7613912565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c696420457468657220616d6f756e742073656e7400000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f45786365656473206d6178696d756d206e756d626572206f662072657365727660008201527f656420746f6b656e730000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f496e73756666696369656e7420737570706c7900000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206973206e6f74206163746976650000000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4d75737420626520616e20414420547261696e657220746f206d696e742e0000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f43616e206e6f7420696e63726561736520737570706c79206f76657220746f7460008201527f616c206d617820737570706c792e000000000000000000000000000000000000602082015250565b7f43616e206e6f74206d696e74206d6f7265207468616e2074686520616c6c6f7760008201527f6564206d617820706572207472616e73616374696f6e2e000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f50726f76656e616e63652068617368206973206e6f7420736574000000000000600082015250565b613fc881613750565b8114613fd357600080fd5b50565b613fdf81613762565b8114613fea57600080fd5b50565b613ff68161376e565b811461400157600080fd5b50565b61400d816137ba565b811461401857600080fd5b5056fea2646970667358221220e6ed7b32a234367992c48a6d9abb30cf0992f6d700cb048fc65945ad5a2d2e0e64736f6c63430008070033

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

000000000000000000000000eb18ae97e6f7c460e84707da0b08327e13a558ef

-----Decoded View---------------
Arg [0] : _ADTrainerAddr (address): 0xeb18AE97E6f7c460E84707da0B08327e13A558ef

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000eb18ae97e6f7c460e84707da0b08327e13a558ef


Deployed Bytecode Sourcemap

45926:5658:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24796:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49178:451;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25723:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27236:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45984:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26753:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48238:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46386:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27936:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46322:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49755:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49987:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51116:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48744:80;;;;;;;;;;;;;:::i;:::-;;51458:121;;;;;;;;;;;;;:::i;:::-;;28343:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46295:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25434:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46188:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46146:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46097:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25165:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39861:103;;;;;;;;;;;;;:::i;:::-;;46351:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48488:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50213:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39213:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25892:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50388:576;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27479:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28599:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46242:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47863:226;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47467:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48924:82;;;;;;;;;;;;;:::i;:::-;;46757:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27705:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40119:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46449:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46419:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24796:305;24898:4;24950:25;24935:40;;;:11;:40;;;;:105;;;;25007:33;24992:48;;;:11;:48;;;;24935:105;:158;;;;25057:36;25081:11;25057:23;:36::i;:::-;24935:158;24915:178;;24796:305;;;:::o;49178:451::-;39099:13;:11;:13::i;:::-;46136:3:::1;49284:6;49273:8;;:17;;;;:::i;:::-;:33;;49251:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;49418:15;;49408:6;49394:11;;:20;;;;:::i;:::-;:39;;49386:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;49475:9;49470:121;49494:6;49490:1;:10;49470:121;;;49522:26;49532:2;49536:11;;49522:9;:26::i;:::-;49578:1;49563:11;;:16;;;;;;;:::i;:::-;;;;;;;;49502:3;;;;;:::i;:::-;;;;49470:121;;;;49615:6;49603:8;;:18;;;;;;;:::i;:::-;;;;;;;;49178:451:::0;;:::o;25723:100::-;25777:13;25810:5;25803:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25723:100;:::o;27236:171::-;27312:7;27332:23;27347:7;27332:14;:23::i;:::-;27375:15;:24;27391:7;27375:24;;;;;;;;;;;;;;;;;;;;;27368:31;;27236:171;;;:::o;45984:28::-;;;;;;;;;;;;;:::o;26753:417::-;26834:13;26850:23;26865:7;26850:14;:23::i;:::-;26834:39;;26898:5;26892:11;;:2;:11;;;;26884:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26992:5;26976:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27001:37;27018:5;27025:12;:10;:12::i;:::-;27001:16;:37::i;:::-;26976:62;26954:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;27141:21;27150:2;27154:7;27141:8;:21::i;:::-;26823:347;26753:417;;:::o;48238:127::-;39099:13;:11;:13::i;:::-;48342:15:::1;48324;:33;;;;;;;;;;;;:::i;:::-;;48238:127:::0;:::o;46386:26::-;;;;:::o;27936:336::-;28131:41;28150:12;:10;:12::i;:::-;28164:7;28131:18;:41::i;:::-;28123:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;28236:28;28246:4;28252:2;28256:7;28236:9;:28::i;:::-;27936:336;;;:::o;46322:22::-;;;;;;;;;;;;;:::o;49755:99::-;39099:13;:11;:13::i;:::-;49843:3:::1;49827:13;:19;;;;;;;;;;;;:::i;:::-;;49755:99:::0;:::o;49987:102::-;39099:13;:11;:13::i;:::-;50078:3:::1;50061:14;:20;;;;;;;;;;;;:::i;:::-;;49987:102:::0;:::o;51116:255::-;46231:4;51221:9;51203:15;;:27;;;;:::i;:::-;:47;;51181:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;51354:9;51335:15;;:28;;;;;;;:::i;:::-;;;;;;;;51116:255;:::o;48744:80::-;39099:13;:11;:13::i;:::-;48808:8:::1;;;;;;;;;;;48807:9;48796:8;;:20;;;;;;;;;;;;;;;;;;48744:80::o:0;51458:121::-;39099:13;:11;:13::i;:::-;51508:63:::1;51534:12;:10;:12::i;:::-;51549:21;51508:17;:63::i;:::-;51458:121::o:0;28343:185::-;28481:39;28498:4;28504:2;28508:7;28481:39;;;;;;;;;;;;:16;:39::i;:::-;28343:185;;;:::o;46295:20::-;;;;;;;;;;;;;:::o;25434:222::-;25506:7;25526:13;25542:7;:16;25550:7;25542:16;;;;;;;;;;;;;;;;;;;;;25526:32;;25594:1;25577:19;;:5;:19;;;;25569:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25643:5;25636:12;;;25434:222;;;:::o;46188:47::-;46231:4;46188:47;:::o;46146:35::-;;;;:::o;46097:42::-;46136:3;46097:42;:::o;25165:207::-;25237:7;25282:1;25265:19;;:5;:19;;;;25257:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25348:9;:16;25358:5;25348:16;;;;;;;;;;;;;;;;25341:23;;25165:207;;;:::o;39861:103::-;39099:13;:11;:13::i;:::-;39926:30:::1;39953:1;39926:18;:30::i;:::-;39861:103::o:0;46351:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48488:116::-;39099:13;:11;:13::i;:::-;48582:14:::1;48566:13;;:30;;;;;;;;;;;;;;;;;;48488:116:::0;:::o;50213:90::-;39099:13;:11;:13::i;:::-;50289:6:::1;50278:8;:17;;;;50213:90:::0;:::o;39213:87::-;39259:7;39286:6;;;;;;;;;;;39279:13;;39213:87;:::o;25892:104::-;25948:13;25981:7;25974:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25892:104;:::o;50388:576::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;47029:25:::1;47041:12;:10;:12::i;:::-;47029:11;:25::i;:::-;47021:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50502:15:::2;;50492:6;50478:11;;:20;;;;:::i;:::-;:39;;50470:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50560:10;;;;;;;;;;;50552:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;50641:6;46279:7;50628:19;;;;:::i;:::-;50615:9;:32;50607:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50720:8;;50710:6;:18;;50688:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;50829:9;50824:131;50848:6;50844:1;:10;50824:131;;;50876:36;50886:12;:10;:12::i;:::-;50900:11;;50876:9;:36::i;:::-;50942:1;50927:11;;:16;;;;;;;:::i;:::-;;;;;;;;50856:3;;;;;:::i;:::-;;;;50824:131;;;;1768:1:::0;2722:7;:22;;;;50388:576;:::o;27479:155::-;27574:52;27593:12;:10;:12::i;:::-;27607:8;27617;27574:18;:52::i;:::-;27479:155;;:::o;28599:323::-;28773:41;28792:12;:10;:12::i;:::-;28806:7;28773:18;:41::i;:::-;28765:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;28876:38;28890:4;28896:2;28900:7;28909:4;28876:13;:38::i;:::-;28599:323;;;;:::o;46242:44::-;46279:7;46242:44;:::o;47863:226::-;47910:13;47991:1;47964:15;47958:29;;;;;:::i;:::-;;;:34;;47936:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;48066:15;48059:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47863:226;:::o;47467:279::-;47585:13;47624:16;47632:7;47624;:16::i;:::-;47616:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;47686:8;;;;;;;;;;;:52;;47724:14;47686:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47697:24;47713:7;47697:15;:24::i;:::-;47686:52;47679:59;;47467:279;;;:::o;48924:82::-;39099:13;:11;:13::i;:::-;48988:10:::1;;;;;;;;;;;48987:11;48974:10;;:24;;;;;;;;;;;;;;;;;;48924:82::o:0;46757:147::-;46816:4;46895:1;46859:13;;;;;;;;;;;46840:43;;;46884:7;46840:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;46833:63;;46757:147;;;:::o;27705:164::-;27802:4;27826:18;:25;27845:5;27826:25;;;;;;;;;;;;;;;:35;27852:8;27826:35;;;;;;;;;;;;;;;;;;;;;;;;;27819:42;;27705:164;;;;:::o;40119:201::-;39099:13;:11;:13::i;:::-;40228:1:::1;40208:22;;:8;:22;;;;40200:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40284:28;40303:8;40284:18;:28::i;:::-;40119:201:::0;:::o;46449:28::-;;;;:::o;46419:23::-;;;;:::o;16645:157::-;16730:4;16769:25;16754:40;;;:11;:40;;;;16747:47;;16645:157;;;:::o;39378:132::-;39453:12;:10;:12::i;:::-;39442:23;;:7;:5;:7::i;:::-;:23;;;39434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39378:132::o;31329:110::-;31405:26;31415:2;31419:7;31405:26;;;;;;;;;;;;:9;:26::i;:::-;31329:110;;:::o;35211:135::-;35293:16;35301:7;35293;:16::i;:::-;35285:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35211:135;:::o;23175:98::-;23228:7;23255:10;23248:17;;23175:98;:::o;34490:174::-;34592:2;34565:15;:24;34581:7;34565:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34648:7;34644:2;34610:46;;34619:23;34634:7;34619:14;:23::i;:::-;34610:46;;;;;;;;;;;;34490:174;;:::o;30723:264::-;30816:4;30833:13;30849:23;30864:7;30849:14;:23::i;:::-;30833:39;;30902:5;30891:16;;:7;:16;;;:52;;;;30911:32;30928:5;30935:7;30911:16;:32::i;:::-;30891:52;:87;;;;30971:7;30947:31;;:20;30959:7;30947:11;:20::i;:::-;:31;;;30891:87;30883:96;;;30723:264;;;;:::o;33746:625::-;33905:4;33878:31;;:23;33893:7;33878:14;:23::i;:::-;:31;;;33870:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33984:1;33970:16;;:2;:16;;;;33962:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34040:39;34061:4;34067:2;34071:7;34040:20;:39::i;:::-;34144:29;34161:1;34165:7;34144:8;:29::i;:::-;34205:1;34186:9;:15;34196:4;34186:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34234:1;34217:9;:13;34227:2;34217:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34265:2;34246:7;:16;34254:7;34246:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34304:7;34300:2;34285:27;;34294:4;34285:27;;;;;;;;;;;;34325:38;34345:4;34351:2;34355:7;34325:19;:38::i;:::-;33746:625;;;:::o;7750:317::-;7865:6;7840:21;:31;;7832:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7919:12;7937:9;:14;;7959:6;7937:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7918:52;;;7989:7;7981:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;7821:246;7750:317;;:::o;40480:191::-;40554:16;40573:6;;;;;;;;;;;40554:25;;40599:8;40590:6;;:17;;;;;;;;;;;;;;;;;;40654:8;40623:40;;40644:8;40623:40;;;;;;;;;;;;40543:128;40480:191;:::o;34807:315::-;34962:8;34953:17;;:5;:17;;;;34945:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35049:8;35011:18;:25;35030:5;35011:25;;;;;;;;;;;;;;;:35;35037:8;35011:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35095:8;35073:41;;35088:5;35073:41;;;35105:8;35073:41;;;;;;:::i;:::-;;;;;;;;34807:315;;;:::o;29803:313::-;29959:28;29969:4;29975:2;29979:7;29959:9;:28::i;:::-;30006:47;30029:4;30035:2;30039:7;30048:4;30006:22;:47::i;:::-;29998:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29803:313;;;;:::o;30429:127::-;30494:4;30546:1;30518:30;;:7;:16;30526:7;30518:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30511:37;;30429:127;;;:::o;26067:281::-;26140:13;26166:23;26181:7;26166:14;:23::i;:::-;26202:21;26226:10;:8;:10::i;:::-;26202:34;;26278:1;26260:7;26254:21;:25;:86;;;;;;;;;;;;;;;;;26306:7;26315:18;:7;:16;:18::i;:::-;26289:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26254:86;26247:93;;;26067:281;;;:::o;31666:319::-;31795:18;31801:2;31805:7;31795:5;:18::i;:::-;31846:53;31877:1;31881:2;31885:7;31894:4;31846:22;:53::i;:::-;31824:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;31666:319;;;:::o;37335:126::-;;;;:::o;37846:125::-;;;;:::o;35910:853::-;36064:4;36085:15;:2;:13;;;:15::i;:::-;36081:675;;;36137:2;36121:36;;;36158:12;:10;:12::i;:::-;36172:4;36178:7;36187:4;36121:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36117:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36379:1;36362:6;:13;:18;36358:328;;;36405:60;;;;;;;;;;:::i;:::-;;;;;;;;36358:328;36636:6;36630:13;36621:6;36617:2;36613:15;36606:38;36117:584;36253:41;;;36243:51;;;:6;:51;;;;36236:58;;;;;36081:675;36740:4;36733:11;;35910:853;;;;;;;:::o;47193:114::-;47253:13;47286;47279:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47193:114;:::o;3189:723::-;3245:13;3475:1;3466:5;:10;3462:53;;;3493:10;;;;;;;;;;;;;;;;;;;;;3462:53;3525:12;3540:5;3525:20;;3556:14;3581:78;3596:1;3588:4;:9;3581:78;;3614:8;;;;;:::i;:::-;;;;3645:2;3637:10;;;;;:::i;:::-;;;3581:78;;;3669:19;3701:6;3691:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3669:39;;3719:154;3735:1;3726:5;:10;3719:154;;3763:1;3753:11;;;;;:::i;:::-;;;3830:2;3822:5;:10;;;;:::i;:::-;3809:2;:24;;;;:::i;:::-;3796:39;;3779:6;3786;3779:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3859:2;3850:11;;;;;:::i;:::-;;;3719:154;;;3897:6;3883:21;;;;;3189:723;;;;:::o;32321:439::-;32415:1;32401:16;;:2;:16;;;;32393:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32474:16;32482:7;32474;:16::i;:::-;32473:17;32465:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32536:45;32565:1;32569:2;32573:7;32536:20;:45::i;:::-;32611:1;32594:9;:13;32604:2;32594:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32642:2;32623:7;:16;32631:7;32623:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32687:7;32683:2;32662:33;;32679:1;32662:33;;;;;;;;;;;;32708:44;32736:1;32740:2;32744:7;32708:19;:44::i;:::-;32321:439;;:::o;6489:326::-;6549:4;6806:1;6784:7;:19;;;:23;6777:30;;6489:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:143::-;2334:5;2365:6;2359:13;2350:22;;2381:33;2408:5;2381:33;:::i;:::-;2277:143;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:474::-;2829:6;2837;2886:2;2874:9;2865:7;2861:23;2857:32;2854:119;;;2892:79;;:::i;:::-;2854:119;3012:1;3037:53;3082:7;3073:6;3062:9;3058:22;3037:53;:::i;:::-;3027:63;;2983:117;3139:2;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3110:118;2761:474;;;;;:::o;3241:619::-;3318:6;3326;3334;3383:2;3371:9;3362:7;3358:23;3354:32;3351:119;;;3389:79;;:::i;:::-;3351:119;3509:1;3534:53;3579:7;3570:6;3559:9;3555:22;3534:53;:::i;:::-;3524:63;;3480:117;3636:2;3662:53;3707:7;3698:6;3687:9;3683:22;3662:53;:::i;:::-;3652:63;;3607:118;3764:2;3790:53;3835:7;3826:6;3815:9;3811:22;3790:53;:::i;:::-;3780:63;;3735:118;3241:619;;;;;:::o;3866:943::-;3961:6;3969;3977;3985;4034:3;4022:9;4013:7;4009:23;4005:33;4002:120;;;4041:79;;:::i;:::-;4002:120;4161:1;4186:53;4231:7;4222:6;4211:9;4207:22;4186:53;:::i;:::-;4176:63;;4132:117;4288:2;4314:53;4359:7;4350:6;4339:9;4335:22;4314:53;:::i;:::-;4304:63;;4259:118;4416:2;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4387:118;4572:2;4561:9;4557:18;4544:32;4603:18;4595:6;4592:30;4589:117;;;4625:79;;:::i;:::-;4589:117;4730:62;4784:7;4775:6;4764:9;4760:22;4730:62;:::i;:::-;4720:72;;4515:287;3866:943;;;;;;;:::o;4815:468::-;4880:6;4888;4937:2;4925:9;4916:7;4912:23;4908:32;4905:119;;;4943:79;;:::i;:::-;4905:119;5063:1;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5034:117;5190:2;5216:50;5258:7;5249:6;5238:9;5234:22;5216:50;:::i;:::-;5206:60;;5161:115;4815:468;;;;;:::o;5289:474::-;5357:6;5365;5414:2;5402:9;5393:7;5389:23;5385:32;5382:119;;;5420:79;;:::i;:::-;5382:119;5540:1;5565:53;5610:7;5601:6;5590:9;5586:22;5565:53;:::i;:::-;5555:63;;5511:117;5667:2;5693:53;5738:7;5729:6;5718:9;5714:22;5693:53;:::i;:::-;5683:63;;5638:118;5289:474;;;;;:::o;5769:327::-;5827:6;5876:2;5864:9;5855:7;5851:23;5847:32;5844:119;;;5882:79;;:::i;:::-;5844:119;6002:1;6027:52;6071:7;6062:6;6051:9;6047:22;6027:52;:::i;:::-;6017:62;;5973:116;5769:327;;;;:::o;6102:349::-;6171:6;6220:2;6208:9;6199:7;6195:23;6191:32;6188:119;;;6226:79;;:::i;:::-;6188:119;6346:1;6371:63;6426:7;6417:6;6406:9;6402:22;6371:63;:::i;:::-;6361:73;;6317:127;6102:349;;;;:::o;6457:509::-;6526:6;6575:2;6563:9;6554:7;6550:23;6546:32;6543:119;;;6581:79;;:::i;:::-;6543:119;6729:1;6718:9;6714:17;6701:31;6759:18;6751:6;6748:30;6745:117;;;6781:79;;:::i;:::-;6745:117;6886:63;6941:7;6932:6;6921:9;6917:22;6886:63;:::i;:::-;6876:73;;6672:287;6457:509;;;;:::o;6972:329::-;7031:6;7080:2;7068:9;7059:7;7055:23;7051:32;7048:119;;;7086:79;;:::i;:::-;7048:119;7206:1;7231:53;7276:7;7267:6;7256:9;7252:22;7231:53;:::i;:::-;7221:63;;7177:117;6972:329;;;;:::o;7307:351::-;7377:6;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:64;7633:7;7624:6;7613:9;7609:22;7577:64;:::i;:::-;7567:74;;7523:128;7307:351;;;;:::o;7664:474::-;7732:6;7740;7789:2;7777:9;7768:7;7764:23;7760:32;7757:119;;;7795:79;;:::i;:::-;7757:119;7915:1;7940:53;7985:7;7976:6;7965:9;7961:22;7940:53;:::i;:::-;7930:63;;7886:117;8042:2;8068:53;8113:7;8104:6;8093:9;8089:22;8068:53;:::i;:::-;8058:63;;8013:118;7664:474;;;;;:::o;8144:118::-;8231:24;8249:5;8231:24;:::i;:::-;8226:3;8219:37;8144:118;;:::o;8268:109::-;8349:21;8364:5;8349:21;:::i;:::-;8344:3;8337:34;8268:109;;:::o;8383:360::-;8469:3;8497:38;8529:5;8497:38;:::i;:::-;8551:70;8614:6;8609:3;8551:70;:::i;:::-;8544:77;;8630:52;8675:6;8670:3;8663:4;8656:5;8652:16;8630:52;:::i;:::-;8707:29;8729:6;8707:29;:::i;:::-;8702:3;8698:39;8691:46;;8473:270;8383:360;;;;:::o;8749:364::-;8837:3;8865:39;8898:5;8865:39;:::i;:::-;8920:71;8984:6;8979:3;8920:71;:::i;:::-;8913:78;;9000:52;9045:6;9040:3;9033:4;9026:5;9022:16;9000:52;:::i;:::-;9077:29;9099:6;9077:29;:::i;:::-;9072:3;9068:39;9061:46;;8841:272;8749:364;;;;:::o;9119:377::-;9225:3;9253:39;9286:5;9253:39;:::i;:::-;9308:89;9390:6;9385:3;9308:89;:::i;:::-;9301:96;;9406:52;9451:6;9446:3;9439:4;9432:5;9428:16;9406:52;:::i;:::-;9483:6;9478:3;9474:16;9467:23;;9229:267;9119:377;;;;:::o;9502:366::-;9644:3;9665:67;9729:2;9724:3;9665:67;:::i;:::-;9658:74;;9741:93;9830:3;9741:93;:::i;:::-;9859:2;9854:3;9850:12;9843:19;;9502:366;;;:::o;9874:::-;10016:3;10037:67;10101:2;10096:3;10037:67;:::i;:::-;10030:74;;10113:93;10202:3;10113:93;:::i;:::-;10231:2;10226:3;10222:12;10215:19;;9874:366;;;:::o;10246:::-;10388:3;10409:67;10473:2;10468:3;10409:67;:::i;:::-;10402:74;;10485:93;10574:3;10485:93;:::i;:::-;10603:2;10598:3;10594:12;10587:19;;10246:366;;;:::o;10618:::-;10760:3;10781:67;10845:2;10840:3;10781:67;:::i;:::-;10774:74;;10857:93;10946:3;10857:93;:::i;:::-;10975:2;10970:3;10966:12;10959:19;;10618:366;;;:::o;10990:::-;11132:3;11153:67;11217:2;11212:3;11153:67;:::i;:::-;11146:74;;11229:93;11318:3;11229:93;:::i;:::-;11347:2;11342:3;11338:12;11331:19;;10990:366;;;:::o;11362:::-;11504:3;11525:67;11589:2;11584:3;11525:67;:::i;:::-;11518:74;;11601:93;11690:3;11601:93;:::i;:::-;11719:2;11714:3;11710:12;11703:19;;11362:366;;;:::o;11734:::-;11876:3;11897:67;11961:2;11956:3;11897:67;:::i;:::-;11890:74;;11973:93;12062:3;11973:93;:::i;:::-;12091:2;12086:3;12082:12;12075:19;;11734:366;;;:::o;12106:::-;12248:3;12269:67;12333:2;12328:3;12269:67;:::i;:::-;12262:74;;12345:93;12434:3;12345:93;:::i;:::-;12463:2;12458:3;12454:12;12447:19;;12106:366;;;:::o;12478:::-;12620:3;12641:67;12705:2;12700:3;12641:67;:::i;:::-;12634:74;;12717:93;12806:3;12717:93;:::i;:::-;12835:2;12830:3;12826:12;12819:19;;12478:366;;;:::o;12850:::-;12992:3;13013:67;13077:2;13072:3;13013:67;:::i;:::-;13006:74;;13089:93;13178:3;13089:93;:::i;:::-;13207:2;13202:3;13198:12;13191:19;;12850:366;;;:::o;13222:::-;13364:3;13385:67;13449:2;13444:3;13385:67;:::i;:::-;13378:74;;13461:93;13550:3;13461:93;:::i;:::-;13579:2;13574:3;13570:12;13563:19;;13222:366;;;:::o;13594:::-;13736:3;13757:67;13821:2;13816:3;13757:67;:::i;:::-;13750:74;;13833:93;13922:3;13833:93;:::i;:::-;13951:2;13946:3;13942:12;13935:19;;13594:366;;;:::o;13966:::-;14108:3;14129:67;14193:2;14188:3;14129:67;:::i;:::-;14122:74;;14205:93;14294:3;14205:93;:::i;:::-;14323:2;14318:3;14314:12;14307:19;;13966:366;;;:::o;14338:::-;14480:3;14501:67;14565:2;14560:3;14501:67;:::i;:::-;14494:74;;14577:93;14666:3;14577:93;:::i;:::-;14695:2;14690:3;14686:12;14679:19;;14338:366;;;:::o;14710:::-;14852:3;14873:67;14937:2;14932:3;14873:67;:::i;:::-;14866:74;;14949:93;15038:3;14949:93;:::i;:::-;15067:2;15062:3;15058:12;15051:19;;14710:366;;;:::o;15082:::-;15224:3;15245:67;15309:2;15304:3;15245:67;:::i;:::-;15238:74;;15321:93;15410:3;15321:93;:::i;:::-;15439:2;15434:3;15430:12;15423:19;;15082:366;;;:::o;15454:::-;15596:3;15617:67;15681:2;15676:3;15617:67;:::i;:::-;15610:74;;15693:93;15782:3;15693:93;:::i;:::-;15811:2;15806:3;15802:12;15795:19;;15454:366;;;:::o;15826:::-;15968:3;15989:67;16053:2;16048:3;15989:67;:::i;:::-;15982:74;;16065:93;16154:3;16065:93;:::i;:::-;16183:2;16178:3;16174:12;16167:19;;15826:366;;;:::o;16198:::-;16340:3;16361:67;16425:2;16420:3;16361:67;:::i;:::-;16354:74;;16437:93;16526:3;16437:93;:::i;:::-;16555:2;16550:3;16546:12;16539:19;;16198:366;;;:::o;16570:::-;16712:3;16733:67;16797:2;16792:3;16733:67;:::i;:::-;16726:74;;16809:93;16898:3;16809:93;:::i;:::-;16927:2;16922:3;16918:12;16911:19;;16570:366;;;:::o;16942:398::-;17101:3;17122:83;17203:1;17198:3;17122:83;:::i;:::-;17115:90;;17214:93;17303:3;17214:93;:::i;:::-;17332:1;17327:3;17323:11;17316:18;;16942:398;;;:::o;17346:366::-;17488:3;17509:67;17573:2;17568:3;17509:67;:::i;:::-;17502:74;;17585:93;17674:3;17585:93;:::i;:::-;17703:2;17698:3;17694:12;17687:19;;17346:366;;;:::o;17718:::-;17860:3;17881:67;17945:2;17940:3;17881:67;:::i;:::-;17874:74;;17957:93;18046:3;17957:93;:::i;:::-;18075:2;18070:3;18066:12;18059:19;;17718:366;;;:::o;18090:::-;18232:3;18253:67;18317:2;18312:3;18253:67;:::i;:::-;18246:74;;18329:93;18418:3;18329:93;:::i;:::-;18447:2;18442:3;18438:12;18431:19;;18090:366;;;:::o;18462:::-;18604:3;18625:67;18689:2;18684:3;18625:67;:::i;:::-;18618:74;;18701:93;18790:3;18701:93;:::i;:::-;18819:2;18814:3;18810:12;18803:19;;18462:366;;;:::o;18834:::-;18976:3;18997:67;19061:2;19056:3;18997:67;:::i;:::-;18990:74;;19073:93;19162:3;19073:93;:::i;:::-;19191:2;19186:3;19182:12;19175:19;;18834:366;;;:::o;19206:118::-;19293:24;19311:5;19293:24;:::i;:::-;19288:3;19281:37;19206:118;;:::o;19330:435::-;19510:3;19532:95;19623:3;19614:6;19532:95;:::i;:::-;19525:102;;19644:95;19735:3;19726:6;19644:95;:::i;:::-;19637:102;;19756:3;19749:10;;19330:435;;;;;:::o;19771:379::-;19955:3;19977:147;20120:3;19977:147;:::i;:::-;19970:154;;20141:3;20134:10;;19771:379;;;:::o;20156:222::-;20249:4;20287:2;20276:9;20272:18;20264:26;;20300:71;20368:1;20357:9;20353:17;20344:6;20300:71;:::i;:::-;20156:222;;;;:::o;20384:640::-;20579:4;20617:3;20606:9;20602:19;20594:27;;20631:71;20699:1;20688:9;20684:17;20675:6;20631:71;:::i;:::-;20712:72;20780:2;20769:9;20765:18;20756:6;20712:72;:::i;:::-;20794;20862:2;20851:9;20847:18;20838:6;20794:72;:::i;:::-;20913:9;20907:4;20903:20;20898:2;20887:9;20883:18;20876:48;20941:76;21012:4;21003:6;20941:76;:::i;:::-;20933:84;;20384:640;;;;;;;:::o;21030:210::-;21117:4;21155:2;21144:9;21140:18;21132:26;;21168:65;21230:1;21219:9;21215:17;21206:6;21168:65;:::i;:::-;21030:210;;;;:::o;21246:313::-;21359:4;21397:2;21386:9;21382:18;21374:26;;21446:9;21440:4;21436:20;21432:1;21421:9;21417:17;21410:47;21474:78;21547:4;21538:6;21474:78;:::i;:::-;21466:86;;21246:313;;;;:::o;21565:419::-;21731:4;21769:2;21758:9;21754:18;21746:26;;21818:9;21812:4;21808:20;21804:1;21793:9;21789:17;21782:47;21846:131;21972:4;21846:131;:::i;:::-;21838:139;;21565:419;;;:::o;21990:::-;22156:4;22194:2;22183:9;22179:18;22171:26;;22243:9;22237:4;22233:20;22229:1;22218:9;22214:17;22207:47;22271:131;22397:4;22271:131;:::i;:::-;22263:139;;21990:419;;;:::o;22415:::-;22581:4;22619:2;22608:9;22604:18;22596:26;;22668:9;22662:4;22658:20;22654:1;22643:9;22639:17;22632:47;22696:131;22822:4;22696:131;:::i;:::-;22688:139;;22415:419;;;:::o;22840:::-;23006:4;23044:2;23033:9;23029:18;23021:26;;23093:9;23087:4;23083:20;23079:1;23068:9;23064:17;23057:47;23121:131;23247:4;23121:131;:::i;:::-;23113:139;;22840:419;;;:::o;23265:::-;23431:4;23469:2;23458:9;23454:18;23446:26;;23518:9;23512:4;23508:20;23504:1;23493:9;23489:17;23482:47;23546:131;23672:4;23546:131;:::i;:::-;23538:139;;23265:419;;;:::o;23690:::-;23856:4;23894:2;23883:9;23879:18;23871:26;;23943:9;23937:4;23933:20;23929:1;23918:9;23914:17;23907:47;23971:131;24097:4;23971:131;:::i;:::-;23963:139;;23690:419;;;:::o;24115:::-;24281:4;24319:2;24308:9;24304:18;24296:26;;24368:9;24362:4;24358:20;24354:1;24343:9;24339:17;24332:47;24396:131;24522:4;24396:131;:::i;:::-;24388:139;;24115:419;;;:::o;24540:::-;24706:4;24744:2;24733:9;24729:18;24721:26;;24793:9;24787:4;24783:20;24779:1;24768:9;24764:17;24757:47;24821:131;24947:4;24821:131;:::i;:::-;24813:139;;24540:419;;;:::o;24965:::-;25131:4;25169:2;25158:9;25154:18;25146:26;;25218:9;25212:4;25208:20;25204:1;25193:9;25189:17;25182:47;25246:131;25372:4;25246:131;:::i;:::-;25238:139;;24965:419;;;:::o;25390:::-;25556:4;25594:2;25583:9;25579:18;25571:26;;25643:9;25637:4;25633:20;25629:1;25618:9;25614:17;25607:47;25671:131;25797:4;25671:131;:::i;:::-;25663:139;;25390:419;;;:::o;25815:::-;25981:4;26019:2;26008:9;26004:18;25996:26;;26068:9;26062:4;26058:20;26054:1;26043:9;26039:17;26032:47;26096:131;26222:4;26096:131;:::i;:::-;26088:139;;25815:419;;;:::o;26240:::-;26406:4;26444:2;26433:9;26429:18;26421:26;;26493:9;26487:4;26483:20;26479:1;26468:9;26464:17;26457:47;26521:131;26647:4;26521:131;:::i;:::-;26513:139;;26240:419;;;:::o;26665:::-;26831:4;26869:2;26858:9;26854:18;26846:26;;26918:9;26912:4;26908:20;26904:1;26893:9;26889:17;26882:47;26946:131;27072:4;26946:131;:::i;:::-;26938:139;;26665:419;;;:::o;27090:::-;27256:4;27294:2;27283:9;27279:18;27271:26;;27343:9;27337:4;27333:20;27329:1;27318:9;27314:17;27307:47;27371:131;27497:4;27371:131;:::i;:::-;27363:139;;27090:419;;;:::o;27515:::-;27681:4;27719:2;27708:9;27704:18;27696:26;;27768:9;27762:4;27758:20;27754:1;27743:9;27739:17;27732:47;27796:131;27922:4;27796:131;:::i;:::-;27788:139;;27515:419;;;:::o;27940:::-;28106:4;28144:2;28133:9;28129:18;28121:26;;28193:9;28187:4;28183:20;28179:1;28168:9;28164:17;28157:47;28221:131;28347:4;28221:131;:::i;:::-;28213:139;;27940:419;;;:::o;28365:::-;28531:4;28569:2;28558:9;28554:18;28546:26;;28618:9;28612:4;28608:20;28604:1;28593:9;28589:17;28582:47;28646:131;28772:4;28646:131;:::i;:::-;28638:139;;28365:419;;;:::o;28790:::-;28956:4;28994:2;28983:9;28979:18;28971:26;;29043:9;29037:4;29033:20;29029:1;29018:9;29014:17;29007:47;29071:131;29197:4;29071:131;:::i;:::-;29063:139;;28790:419;;;:::o;29215:::-;29381:4;29419:2;29408:9;29404:18;29396:26;;29468:9;29462:4;29458:20;29454:1;29443:9;29439:17;29432:47;29496:131;29622:4;29496:131;:::i;:::-;29488:139;;29215:419;;;:::o;29640:::-;29806:4;29844:2;29833:9;29829:18;29821:26;;29893:9;29887:4;29883:20;29879:1;29868:9;29864:17;29857:47;29921:131;30047:4;29921:131;:::i;:::-;29913:139;;29640:419;;;:::o;30065:::-;30231:4;30269:2;30258:9;30254:18;30246:26;;30318:9;30312:4;30308:20;30304:1;30293:9;30289:17;30282:47;30346:131;30472:4;30346:131;:::i;:::-;30338:139;;30065:419;;;:::o;30490:::-;30656:4;30694:2;30683:9;30679:18;30671:26;;30743:9;30737:4;30733:20;30729:1;30718:9;30714:17;30707:47;30771:131;30897:4;30771:131;:::i;:::-;30763:139;;30490:419;;;:::o;30915:::-;31081:4;31119:2;31108:9;31104:18;31096:26;;31168:9;31162:4;31158:20;31154:1;31143:9;31139:17;31132:47;31196:131;31322:4;31196:131;:::i;:::-;31188:139;;30915:419;;;:::o;31340:::-;31506:4;31544:2;31533:9;31529:18;31521:26;;31593:9;31587:4;31583:20;31579:1;31568:9;31564:17;31557:47;31621:131;31747:4;31621:131;:::i;:::-;31613:139;;31340:419;;;:::o;31765:::-;31931:4;31969:2;31958:9;31954:18;31946:26;;32018:9;32012:4;32008:20;32004:1;31993:9;31989:17;31982:47;32046:131;32172:4;32046:131;:::i;:::-;32038:139;;31765:419;;;:::o;32190:222::-;32283:4;32321:2;32310:9;32306:18;32298:26;;32334:71;32402:1;32391:9;32387:17;32378:6;32334:71;:::i;:::-;32190:222;;;;:::o;32418:129::-;32452:6;32479:20;;:::i;:::-;32469:30;;32508:33;32536:4;32528:6;32508:33;:::i;:::-;32418:129;;;:::o;32553:75::-;32586:6;32619:2;32613:9;32603:19;;32553:75;:::o;32634:307::-;32695:4;32785:18;32777:6;32774:30;32771:56;;;32807:18;;:::i;:::-;32771:56;32845:29;32867:6;32845:29;:::i;:::-;32837:37;;32929:4;32923;32919:15;32911:23;;32634:307;;;:::o;32947:308::-;33009:4;33099:18;33091:6;33088:30;33085:56;;;33121:18;;:::i;:::-;33085:56;33159:29;33181:6;33159:29;:::i;:::-;33151:37;;33243:4;33237;33233:15;33225:23;;32947:308;;;:::o;33261:98::-;33312:6;33346:5;33340:12;33330:22;;33261:98;;;:::o;33365:99::-;33417:6;33451:5;33445:12;33435:22;;33365:99;;;:::o;33470:168::-;33553:11;33587:6;33582:3;33575:19;33627:4;33622:3;33618:14;33603:29;;33470:168;;;;:::o;33644:147::-;33745:11;33782:3;33767:18;;33644:147;;;;:::o;33797:169::-;33881:11;33915:6;33910:3;33903:19;33955:4;33950:3;33946:14;33931:29;;33797:169;;;;:::o;33972:148::-;34074:11;34111:3;34096:18;;33972:148;;;;:::o;34126:305::-;34166:3;34185:20;34203:1;34185:20;:::i;:::-;34180:25;;34219:20;34237:1;34219:20;:::i;:::-;34214:25;;34373:1;34305:66;34301:74;34298:1;34295:81;34292:107;;;34379:18;;:::i;:::-;34292:107;34423:1;34420;34416:9;34409:16;;34126:305;;;;:::o;34437:185::-;34477:1;34494:20;34512:1;34494:20;:::i;:::-;34489:25;;34528:20;34546:1;34528:20;:::i;:::-;34523:25;;34567:1;34557:35;;34572:18;;:::i;:::-;34557:35;34614:1;34611;34607:9;34602:14;;34437:185;;;;:::o;34628:348::-;34668:7;34691:20;34709:1;34691:20;:::i;:::-;34686:25;;34725:20;34743:1;34725:20;:::i;:::-;34720:25;;34913:1;34845:66;34841:74;34838:1;34835:81;34830:1;34823:9;34816:17;34812:105;34809:131;;;34920:18;;:::i;:::-;34809:131;34968:1;34965;34961:9;34950:20;;34628:348;;;;:::o;34982:191::-;35022:4;35042:20;35060:1;35042:20;:::i;:::-;35037:25;;35076:20;35094:1;35076:20;:::i;:::-;35071:25;;35115:1;35112;35109:8;35106:34;;;35120:18;;:::i;:::-;35106:34;35165:1;35162;35158:9;35150:17;;34982:191;;;;:::o;35179:96::-;35216:7;35245:24;35263:5;35245:24;:::i;:::-;35234:35;;35179:96;;;:::o;35281:90::-;35315:7;35358:5;35351:13;35344:21;35333:32;;35281:90;;;:::o;35377:149::-;35413:7;35453:66;35446:5;35442:78;35431:89;;35377:149;;;:::o;35532:126::-;35569:7;35609:42;35602:5;35598:54;35587:65;;35532:126;;;:::o;35664:77::-;35701:7;35730:5;35719:16;;35664:77;;;:::o;35747:154::-;35831:6;35826:3;35821;35808:30;35893:1;35884:6;35879:3;35875:16;35868:27;35747:154;;;:::o;35907:307::-;35975:1;35985:113;35999:6;35996:1;35993:13;35985:113;;;36084:1;36079:3;36075:11;36069:18;36065:1;36060:3;36056:11;36049:39;36021:2;36018:1;36014:10;36009:15;;35985:113;;;36116:6;36113:1;36110:13;36107:101;;;36196:1;36187:6;36182:3;36178:16;36171:27;36107:101;35956:258;35907:307;;;:::o;36220:320::-;36264:6;36301:1;36295:4;36291:12;36281:22;;36348:1;36342:4;36338:12;36369:18;36359:81;;36425:4;36417:6;36413:17;36403:27;;36359:81;36487:2;36479:6;36476:14;36456:18;36453:38;36450:84;;;36506:18;;:::i;:::-;36450:84;36271:269;36220:320;;;:::o;36546:281::-;36629:27;36651:4;36629:27;:::i;:::-;36621:6;36617:40;36759:6;36747:10;36744:22;36723:18;36711:10;36708:34;36705:62;36702:88;;;36770:18;;:::i;:::-;36702:88;36810:10;36806:2;36799:22;36589:238;36546:281;;:::o;36833:233::-;36872:3;36895:24;36913:5;36895:24;:::i;:::-;36886:33;;36941:66;36934:5;36931:77;36928:103;;;37011:18;;:::i;:::-;36928:103;37058:1;37051:5;37047:13;37040:20;;36833:233;;;:::o;37072:176::-;37104:1;37121:20;37139:1;37121:20;:::i;:::-;37116:25;;37155:20;37173:1;37155:20;:::i;:::-;37150:25;;37194:1;37184:35;;37199:18;;:::i;:::-;37184:35;37240:1;37237;37233:9;37228:14;;37072:176;;;;:::o;37254:180::-;37302:77;37299:1;37292:88;37399:4;37396:1;37389:15;37423:4;37420:1;37413:15;37440:180;37488:77;37485:1;37478:88;37585:4;37582:1;37575:15;37609:4;37606:1;37599:15;37626:180;37674:77;37671:1;37664:88;37771:4;37768:1;37761:15;37795:4;37792:1;37785:15;37812:180;37860:77;37857:1;37850:88;37957:4;37954:1;37947:15;37981:4;37978:1;37971:15;37998:180;38046:77;38043:1;38036:88;38143:4;38140:1;38133:15;38167:4;38164:1;38157:15;38184:117;38293:1;38290;38283:12;38307:117;38416:1;38413;38406:12;38430:117;38539:1;38536;38529:12;38553:117;38662:1;38659;38652:12;38676:102;38717:6;38768:2;38764:7;38759:2;38752:5;38748:14;38744:28;38734:38;;38676:102;;;:::o;38784:237::-;38924:34;38920:1;38912:6;38908:14;38901:58;38993:20;38988:2;38980:6;38976:15;38969:45;38784:237;:::o;39027:225::-;39167:34;39163:1;39155:6;39151:14;39144:58;39236:8;39231:2;39223:6;39219:15;39212:33;39027:225;:::o;39258:224::-;39398:34;39394:1;39386:6;39382:14;39375:58;39467:7;39462:2;39454:6;39450:15;39443:32;39258:224;:::o;39488:178::-;39628:30;39624:1;39616:6;39612:14;39605:54;39488:178;:::o;39672:175::-;39812:27;39808:1;39800:6;39796:14;39789:51;39672:175;:::o;39853:223::-;39993:34;39989:1;39981:6;39977:14;39970:58;40062:6;40057:2;40049:6;40045:15;40038:31;39853:223;:::o;40082:175::-;40222:27;40218:1;40210:6;40206:14;40199:51;40082:175;:::o;40263:245::-;40403:34;40399:1;40391:6;40387:14;40380:58;40472:28;40467:2;40459:6;40455:15;40448:53;40263:245;:::o;40514:179::-;40654:31;40650:1;40642:6;40638:14;40631:55;40514:179;:::o;40699:228::-;40839:34;40835:1;40827:6;40823:14;40816:58;40908:11;40903:2;40895:6;40891:15;40884:36;40699:228;:::o;40933:::-;41073:34;41069:1;41061:6;41057:14;41050:58;41142:11;41137:2;41129:6;41125:15;41118:36;40933:228;:::o;41167:249::-;41307:34;41303:1;41295:6;41291:14;41284:58;41376:32;41371:2;41363:6;41359:15;41352:57;41167:249;:::o;41422:182::-;41562:34;41558:1;41550:6;41546:14;41539:58;41422:182;:::o;41610:171::-;41750:23;41746:1;41738:6;41734:14;41727:47;41610:171;:::o;41787:169::-;41927:21;41923:1;41915:6;41911:14;41904:45;41787:169;:::o;41962:182::-;42102:34;42098:1;42090:6;42086:14;42079:58;41962:182;:::o;42150:171::-;42290:23;42286:1;42278:6;42274:14;42267:47;42150:171;:::o;42327:174::-;42467:26;42463:1;42455:6;42451:14;42444:50;42327:174;:::o;42507:180::-;42647:32;42643:1;42635:6;42631:14;42624:56;42507:180;:::o;42693:220::-;42833:34;42829:1;42821:6;42817:14;42810:58;42902:3;42897:2;42889:6;42885:15;42878:28;42693:220;:::o;42919:114::-;;:::o;43039:233::-;43179:34;43175:1;43167:6;43163:14;43156:58;43248:16;43243:2;43235:6;43231:15;43224:41;43039:233;:::o;43278:242::-;43418:34;43414:1;43406:6;43402:14;43395:58;43487:25;43482:2;43474:6;43470:15;43463:50;43278:242;:::o;43526:233::-;43666:34;43662:1;43654:6;43650:14;43643:58;43735:16;43730:2;43722:6;43718:15;43711:41;43526:233;:::o;43765:181::-;43905:33;43901:1;43893:6;43889:14;43882:57;43765:181;:::o;43952:176::-;44092:28;44088:1;44080:6;44076:14;44069:52;43952:176;:::o;44134:122::-;44207:24;44225:5;44207:24;:::i;:::-;44200:5;44197:35;44187:63;;44246:1;44243;44236:12;44187:63;44134:122;:::o;44262:116::-;44332:21;44347:5;44332:21;:::i;:::-;44325:5;44322:32;44312:60;;44368:1;44365;44358:12;44312:60;44262:116;:::o;44384:120::-;44456:23;44473:5;44456:23;:::i;:::-;44449:5;44446:34;44436:62;;44494:1;44491;44484:12;44436:62;44384:120;:::o;44510:122::-;44583:24;44601:5;44583:24;:::i;:::-;44576:5;44573:35;44563:63;;44622:1;44619;44612:12;44563:63;44510:122;:::o

Swarm Source

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