ETH Price: $3,655.51 (+10.51%)

Token

HETAODAO1 (HTD1)
 

Overview

Max Total Supply

271 HTD1

Holders

260

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 HTD1
0x4c54E9bA7406938b317ab59D6f9B6AB14181B5A9
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:
HETAOMEDAL_1

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-26
*/

// 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/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/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: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// 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/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/token/ERC721/extensions/ERC721Burnable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _burn(tokenId);
    }
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721URIStorage.sol)

pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @dev See {ERC721-_burn}. This override additionally checks to see if a
     * token-specific URI was set for the token, and if so, it deletes the token URI from
     * the storage mapping.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File: HetaoDao_A1.sol


// author: hetaodao.eth
pragma solidity ^0.8.4;






contract HETAOMEDAL_1 is ERC721, ERC721URIStorage, Pausable, Ownable, ERC721Burnable {
    using Strings for uint256;
    //Legendary, 30
    //Epic, 150
    //Rare, 750
    //Common, 3750
    enum CardType {Legendary,Epic,Rare,Common,Free}

    uint256 public price = 0;

    string public baseURI;
    string public baseExtension = ".json";

    uint256 private minted_legendary = 0;
    uint256 private minted_epic = 0;
    uint256 private minted_rare = 0;
    uint256 private minted_common = 0;

    uint256 private start_legendary = 0;
    uint256 private start_epic = 30;
    uint256 private start_rare = 180;
    uint256 private start_common = 930;

    uint256 public maxMintAmount = 1;
    uint256 public maxSupply = 4680;

    mapping(address => bool) public addressMintedBalance;

    mapping(address => bool) private whitelisted_legendary;
    mapping(address => bool) private whitelisted_epic;
    mapping(address => bool) private whitelisted_rare;

    constructor() ERC721("HETAODAO1", "HTD1") {
        pause();
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }
    
      // internal
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function totalSupply() public view returns(uint256) {
        return minted_legendary + minted_epic + minted_rare + minted_common;
    }    


    function mint(uint _mintAmount) public {
        address _user = msg.sender;
        require(_mintAmount > 0);
        require(_mintAmount <= 1);
        require(addressMintedBalance[_user]==false, "max NFT per address exceeded.");
        uint tokenId = 0;

        if (whitelisted_legendary[_user]) {

            tokenId = minted_legendary + start_legendary;
            require(tokenId < start_epic, "max legendary NFT limit exceeded");

        } else if (whitelisted_epic[_user]) {

            tokenId = minted_epic + start_epic;
            require(tokenId < start_rare, "max NFT limit exceeded");

        } else if (whitelisted_rare[_user]) {

            tokenId = minted_rare + start_rare;
            require(tokenId < start_common, "max NFT limit exceeded");

        } else {
            tokenId = minted_common + start_common;
            require(tokenId < maxSupply, "max NFT limit exceeded");

        }
        safeMint(_user, tokenId);
    }

    function adminMint(address to, uint256 tokenId) public onlyOwner {
        safeMint(to, tokenId);
    }

    function safeMint(address to, uint256 tokenId) private whenNotPaused{
        require((tokenId>=0) && (tokenId <4680), "invalid token id");
        _safeMint(to, tokenId);
        addressMintedBalance[to] = true;

        if (tokenId < start_epic) {
            minted_legendary++;
        }
        else if (tokenId < start_rare) {
            minted_epic++;
        }     
        else if (tokenId < start_common) {
            minted_rare++;
        }
        else {
            minted_common++;
        }

        string memory currentBaseURI = _baseURI();
        string memory uri =  bytes(currentBaseURI).length > 0  
            ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
            : "";
        _setTokenURI(tokenId, uri);
    }

    function mint_type(address to) public view returns(string memory) {
        if (whitelisted_legendary[to]) {
            return "legendary";
        }
        if (whitelisted_epic[to]) {
            return "epic";
        }
        if (whitelisted_rare[to]) {
            return "rare";
        }
        return "normal";
    }


    function minteCount(CardType cardType) public view returns(uint256) {
        require(cardType < CardType.Free, "wrong card type.");
        if (cardType == CardType.Legendary)
            return minted_legendary;
        else if (cardType == CardType.Epic)
            return minted_epic;
        else if (cardType == CardType.Rare)
            return minted_rare;
        else if (cardType == CardType.Common)
            return minted_common;
        return 0;
    }

    function mintTotal() public view returns(uint256) {
        return minted_legendary + minted_epic + minted_rare + minted_common;
    }


    function removeWhitelistUser(CardType cardType, address _user) public onlyOwner {
        require(cardType<CardType.Common, "wrong card type.");
        if(cardType == CardType.Legendary) {
            whitelisted_legendary[_user] = false;
        }
        else if(cardType == CardType.Epic) {
            whitelisted_epic[_user] = false;
        }
        else if(cardType == CardType.Rare) {
            whitelisted_rare[_user] = false;
        }
    }

    function whitelistAddress (CardType cardType, address[] memory users) external onlyOwner {
        require(cardType<CardType.Common, "wrong card type.");
        require(users.length>0, "at least have 1 address.");

        if(cardType == CardType.Legendary) {
            for (uint i = 0; i < users.length; i++) {
                whitelisted_legendary[users[i]] = true;
            }
        }
        else if(cardType == CardType.Epic) {
            for (uint i = 0; i < users.length; i++) {
                whitelisted_epic[users[i]] = true;
            }
        }
        else if(cardType == CardType.Rare) {
            for (uint i = 0; i < users.length; i++) {
                whitelisted_rare[users[i]] = true;
            }
        }
    }

    function isWithlistAdress(CardType cardType, address _user) public view returns(bool) {
        require(cardType<CardType.Common, "wrong card type.");
        if(cardType == CardType.Legendary) {
            return whitelisted_legendary[_user];
        }
        else if(cardType == CardType.Epic) {
            return whitelisted_epic[_user];
        }
        else if(cardType == CardType.Rare) {
            return whitelisted_rare[_user];
        }
        return false;
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId)
        internal
        whenNotPaused
        override
    {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    // The following functions are overrides required by Solidity.

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory) {        
        // return super.tokenURI(tokenId);

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

    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
        require(success);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","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":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum HETAOMEDAL_1.CardType","name":"cardType","type":"uint8"},{"internalType":"address","name":"_user","type":"address"}],"name":"isWithlistAdress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint_type","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum HETAOMEDAL_1.CardType","name":"cardType","type":"uint8"}],"name":"minteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum HETAOMEDAL_1.CardType","name":"cardType","type":"uint8"},{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum HETAOMEDAL_1.CardType","name":"cardType","type":"uint8"},{"internalType":"address[]","name":"users","type":"address[]"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405260006008556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a90805190602001906200005692919062000416565b506000600b556000600c556000600d556000600e556000600f55601e60105560b46011556103a260125560016013556112486014553480156200009857600080fd5b506040518060400160405280600981526020017f484554414f44414f3100000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f485444310000000000000000000000000000000000000000000000000000000081525081600090805190602001906200011d92919062000416565b5080600190805190602001906200013692919062000416565b5050506000600760006101000a81548160ff02191690831515021790555062000174620001686200018a60201b60201c565b6200019260201b60201c565b620001846200025860201b60201c565b62000682565b600033905090565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002686200027a60201b60201c565b620002786200030b60201b60201c565b565b6200028a6200018a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002b06200038060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000309576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003009062000564565b60405180910390fd5b565b6200031b620003aa60201b60201c565b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620003676200018a60201b60201c565b60405162000376919062000525565b60405180910390a1565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003ba620003ff60201b60201c565b15620003fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003f49062000542565b60405180910390fd5b565b6000600760009054906101000a900460ff16905090565b8280546200042490620005cb565b90600052602060002090601f01602090048101928262000448576000855562000494565b82601f106200046357805160ff191683800117855562000494565b8280016001018555821562000494579182015b828111156200049357825182559160200191906001019062000476565b5b509050620004a39190620004a7565b5090565b5b80821115620004c2576000816000905550600101620004a8565b5090565b620004d18162000597565b82525050565b6000620004e660108362000586565b9150620004f38262000630565b602082019050919050565b60006200050d60208362000586565b91506200051a8262000659565b602082019050919050565b60006020820190506200053c6000830184620004c6565b92915050565b600060208201905081810360008301526200055d81620004d7565b9050919050565b600060208201905081810360008301526200057f81620004fe565b9050919050565b600082825260208201905092915050565b6000620005a482620005ab565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006002820490506001821680620005e457607f821691505b60208210811415620005fb57620005fa62000601565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614c2280620006926000396000f3fe60806040526004361061021a5760003560e01c80638456cb5911610123578063a22cb465116100ab578063ca8254de1161006f578063ca8254de1461079e578063d5abeb01146107db578063e58306f914610806578063e985e9c51461082f578063f2fde38b1461086c5761021a565b8063a22cb465146106b9578063b88d4fde146106e2578063bca63e501461070b578063c668286214610736578063c87b56dd146107615761021a565b806395d89b41116100f257806395d89b41146105d45780639a414833146105ff578063a035b1fe14610628578063a0712d6814610653578063a1ce23cd1461067c5761021a565b80638456cb591461052c57806385e31ba7146105435780638da5cb5b1461058057806392be511f146105ab5761021a565b80633f4ba83a116101a65780635c975abb116101755780635c975abb146104455780636352211e146104705780636c0360eb146104ad57806370a08231146104d8578063715018a6146105155761021a565b80633f4ba83a146103b357806342842e0e146103ca57806342966c68146103f357806355f804b31461041c5761021a565b806318160ddd116101ed57806318160ddd146102ed57806318cae26914610318578063239c70ae1461035557806323b872dd146103805780633ccfd60b146103a95761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613827565b610895565b6040516102539190613ee1565b60405180910390f35b34801561026857600080fd5b50610271610977565b60405161027e9190613efc565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613993565b610a09565b6040516102bb9190613e7a565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e691906137e7565b610a4f565b005b3480156102f957600080fd5b50610302610b67565b60405161030f91906141de565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190613664565b610b98565b60405161034c9190613ee1565b60405180910390f35b34801561036157600080fd5b5061036a610bb8565b60405161037791906141de565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a291906136d1565b610bbe565b005b6103b1610c1e565b005b3480156103bf57600080fd5b506103c8610c9f565b005b3480156103d657600080fd5b506103f160048036038101906103ec91906136d1565b610cb1565b005b3480156103ff57600080fd5b5061041a60048036038101906104159190613993565b610cd1565b005b34801561042857600080fd5b50610443600480360381019061043e919061394a565b610d2d565b005b34801561045157600080fd5b5061045a610d4f565b6040516104679190613ee1565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190613993565b610d66565b6040516104a49190613e7a565b60405180910390f35b3480156104b957600080fd5b506104c2610e18565b6040516104cf9190613efc565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190613664565b610ea6565b60405161050c91906141de565b60405180910390f35b34801561052157600080fd5b5061052a610f5e565b005b34801561053857600080fd5b50610541610f72565b005b34801561054f57600080fd5b5061056a60048036038101906105659190613881565b610f84565b60405161057791906141de565b60405180910390f35b34801561058c57600080fd5b506105956110d2565b6040516105a29190613e7a565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd91906138ee565b6110fc565b005b3480156105e057600080fd5b506105e96113fd565b6040516105f69190613efc565b60405180910390f35b34801561060b57600080fd5b50610626600480360381019061062191906138ae565b61148f565b005b34801561063457600080fd5b5061063d61169e565b60405161064a91906141de565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190613993565b6116a4565b005b34801561068857600080fd5b506106a3600480360381019061069e91906138ae565b6119c8565b6040516106b09190613ee1565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db91906137a7565b611bbf565b005b3480156106ee57600080fd5b5061070960048036038101906107049190613724565b611bd5565b005b34801561071757600080fd5b50610720611c37565b60405161072d91906141de565b60405180910390f35b34801561074257600080fd5b5061074b611c68565b6040516107589190613efc565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190613993565b611cf6565b6040516107959190613efc565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190613664565b611d58565b6040516107d29190613efc565b60405180910390f35b3480156107e757600080fd5b506107f0611f45565b6040516107fd91906141de565b60405180910390f35b34801561081257600080fd5b5061082d600480360381019061082891906137e7565b611f4b565b005b34801561083b57600080fd5b5061085660048036038101906108519190613691565b611f61565b6040516108639190613ee1565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190613664565b611ff5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610970575061096f82612079565b5b9050919050565b60606000805461098690614480565b80601f01602080910402602001604051908101604052809291908181526020018280546109b290614480565b80156109ff5780601f106109d4576101008083540402835291602001916109ff565b820191906000526020600020905b8154815290600101906020018083116109e257829003601f168201915b5050505050905090565b6000610a14826120e3565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a5a82610d66565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac29061419e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aea61212e565b73ffffffffffffffffffffffffffffffffffffffff161480610b195750610b1881610b1361212e565b611f61565b5b610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f906140de565b60405180910390fd5b610b628383612136565b505050565b6000600e54600d54600c54600b54610b7f919061430f565b610b89919061430f565b610b93919061430f565b905090565b60156020528060005260406000206000915054906101000a900460ff1681565b60135481565b610bcf610bc961212e565b826121ef565b610c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c05906141be565b60405180910390fd5b610c19838383612284565b505050565b610c266124eb565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610c4c90613e65565b60006040518083038185875af1925050503d8060008114610c89576040519150601f19603f3d011682016040523d82523d6000602084013e610c8e565b606091505b5050905080610c9c57600080fd5b50565b610ca76124eb565b610caf612569565b565b610ccc83838360405180602001604052806000815250611bd5565b505050565b610ce2610cdc61212e565b826121ef565b610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d18906141be565b60405180910390fd5b610d2a816125cc565b50565b610d356124eb565b8060099080519060200190610d4b929190613385565b5050565b6000600760009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e069061417e565b60405180910390fd5b80915050919050565b60098054610e2590614480565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5190614480565b8015610e9e5780601f10610e7357610100808354040283529160200191610e9e565b820191906000526020600020905b815481529060010190602001808311610e8157829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e9061403e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f666124eb565b610f7060006125d8565b565b610f7a6124eb565b610f8261269e565b565b6000600480811115610f9957610f986145bb565b5b826004811115610fac57610fab6145bb565b5b10610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe39061411e565b60405180910390fd5b6000600481111561100057610fff6145bb565b5b826004811115611013576110126145bb565b5b141561102357600b5490506110cd565b60016004811115611037576110366145bb565b5b82600481111561104a576110496145bb565b5b141561105a57600c5490506110cd565b6002600481111561106e5761106d6145bb565b5b826004811115611081576110806145bb565b5b141561109157600d5490506110cd565b600360048111156110a5576110a46145bb565b5b8260048111156110b8576110b76145bb565b5b14156110c857600e5490506110cd565b600090505b919050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111046124eb565b60036004811115611118576111176145bb565b5b82600481111561112b5761112a6145bb565b5b1061116b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111629061411e565b60405180910390fd5b60008151116111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a69061413e565b60405180910390fd5b600060048111156111c3576111c26145bb565b5b8260048111156111d6576111d56145bb565b5b14156112735760005b815181101561126d5760016016600084848151811061120157611200614619565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611265906144e3565b9150506111df565b506113f9565b60016004811115611287576112866145bb565b5b82600481111561129a576112996145bb565b5b14156113375760005b8151811015611331576001601760008484815181106112c5576112c4614619565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611329906144e3565b9150506112a3565b506113f8565b6002600481111561134b5761134a6145bb565b5b82600481111561135e5761135d6145bb565b5b14156113f75760005b81518110156113f55760016018600084848151811061138957611388614619565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113ed906144e3565b915050611367565b505b5b5b5050565b60606001805461140c90614480565b80601f016020809104026020016040519081016040528092919081815260200182805461143890614480565b80156114855780601f1061145a57610100808354040283529160200191611485565b820191906000526020600020905b81548152906001019060200180831161146857829003601f168201915b5050505050905090565b6114976124eb565b600360048111156114ab576114aa6145bb565b5b8260048111156114be576114bd6145bb565b5b106114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f59061411e565b60405180910390fd5b60006004811115611512576115116145bb565b5b826004811115611525576115246145bb565b5b1415611588576000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061169a565b6001600481111561159c5761159b6145bb565b5b8260048111156115af576115ae6145bb565b5b1415611612576000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611699565b60026004811115611626576116256145bb565b5b826004811115611639576116386145bb565b5b1415611698576000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5050565b60085481565b6000339050600082116116b657600080fd5b60018211156116c457600080fd5b60001515601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e9061409e565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561180657600f54600b546117bb919061430f565b90506010548110611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f89061405e565b60405180910390fd5b6119b9565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118b357601054600c54611868919061430f565b905060115481106118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a5906140be565b60405180910390fd5b6119b8565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561196057601154600d54611915919061430f565b9050601254811061195b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611952906140be565b60405180910390fd5b6119b7565b601254600e54611970919061430f565b905060145481106119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad906140be565b60405180910390fd5b5b5b5b6119c38282612701565b505050565b6000600360048111156119de576119dd6145bb565b5b8360048111156119f1576119f06145bb565b5b10611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a289061411e565b60405180910390fd5b60006004811115611a4557611a446145bb565b5b836004811115611a5857611a576145bb565b5b1415611ab257601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050611bb9565b60016004811115611ac657611ac56145bb565b5b836004811115611ad957611ad86145bb565b5b1415611b3357601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050611bb9565b60026004811115611b4757611b466145bb565b5b836004811115611b5a57611b596145bb565b5b1415611bb457601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050611bb9565b600090505b92915050565b611bd1611bca61212e565b83836128b7565b5050565b611be6611be061212e565b836121ef565b611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c906141be565b60405180910390fd5b611c3184848484612a24565b50505050565b6000600e54600d54600c54600b54611c4f919061430f565b611c59919061430f565b611c63919061430f565b905090565b600a8054611c7590614480565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca190614480565b8015611cee5780601f10611cc357610100808354040283529160200191611cee565b820191906000526020600020905b815481529060010190602001808311611cd157829003601f168201915b505050505081565b60606000611d02612a80565b90506000815111611d225760405180602001604052806000815250611d50565b80611d2c84612b12565b600a604051602001611d4093929190613e34565b6040516020818303038152906040525b915050919050565b6060601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611de9576040518060400160405280600981526020017f6c6567656e6461727900000000000000000000000000000000000000000000008152509050611f40565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e78576040518060400160405280600481526020017f65706963000000000000000000000000000000000000000000000000000000008152509050611f40565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f07576040518060400160405280600481526020017f72617265000000000000000000000000000000000000000000000000000000008152509050611f40565b6040518060400160405280600681526020017f6e6f726d616c000000000000000000000000000000000000000000000000000081525090505b919050565b60145481565b611f536124eb565b611f5d8282612701565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ffd6124eb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490613f5e565b60405180910390fd5b612076816125d8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6120ec81612c73565b61212b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121229061417e565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121a983610d66565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806121fb83610d66565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061223d575061223c8185611f61565b5b8061227b57508373ffffffffffffffffffffffffffffffffffffffff1661226384610a09565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122a482610d66565b73ffffffffffffffffffffffffffffffffffffffff16146122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f190613f7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561236a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236190613fbe565b60405180910390fd5b612375838383612cdf565b612380600082612136565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123d09190614396565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612427919061430f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124e6838383612cf7565b505050565b6124f361212e565b73ffffffffffffffffffffffffffffffffffffffff166125116110d2565b73ffffffffffffffffffffffffffffffffffffffff1614612567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255e9061415e565b60405180910390fd5b565b612571612cfc565b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6125b561212e565b6040516125c29190613e7a565b60405180910390a1565b6125d581612d45565b50565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126a6612d98565b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586126ea61212e565b6040516126f79190613e7a565b60405180910390a1565b612709612d98565b6000811015801561271b575061124881105b61275a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275190613ffe565b60405180910390fd5b6127648282612de2565b6001601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506010548110156127e357600b60008154809291906127d9906144e3565b919050555061284c565b60115481101561280a57600c6000815480929190612800906144e3565b919050555061284b565b60125481101561283157600d6000815480929190612827906144e3565b919050555061284a565b600e6000815480929190612844906144e3565b91905055505b5b5b6000612856612a80565b905060008082511161287757604051806020016040528060008152506128a5565b8161288184612b12565b600a60405160200161289593929190613e34565b6040516020818303038152906040525b90506128b18382612e00565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291d90613fde565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a179190613ee1565b60405180910390a3505050565b612a2f848484612284565b612a3b84848484612e74565b612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7190613f3e565b60405180910390fd5b50505050565b606060098054612a8f90614480565b80601f0160208091040260200160405190810160405280929190818152602001828054612abb90614480565b8015612b085780601f10612add57610100808354040283529160200191612b08565b820191906000526020600020905b815481529060010190602001808311612aeb57829003601f168201915b5050505050905090565b60606000821415612b5a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c6e565b600082905060005b60008214612b8c578080612b75906144e3565b915050600a82612b859190614365565b9150612b62565b60008167ffffffffffffffff811115612ba857612ba7614648565b5b6040519080825280601f01601f191660200182016040528015612bda5781602001600182028036833780820191505090505b5090505b60008514612c6757600182612bf39190614396565b9150600a85612c02919061452c565b6030612c0e919061430f565b60f81b818381518110612c2457612c23614619565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c609190614365565b9450612bde565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b612ce7612d98565b612cf283838361300b565b505050565b505050565b612d04610d4f565b612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a90613f1e565b60405180910390fd5b565b612d4e81613010565b6000600660008381526020019081526020016000208054612d6e90614480565b905014612d9557600660008281526020019081526020016000206000612d94919061340b565b5b50565b612da0610d4f565b15612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd79061401e565b60405180910390fd5b565b612dfc82826040518060200160405280600081525061312d565b5050565b612e0982612c73565b612e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f9061407e565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190612e6f929190613385565b505050565b6000612e958473ffffffffffffffffffffffffffffffffffffffff16613188565b15612ffe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ebe61212e565b8786866040518563ffffffff1660e01b8152600401612ee09493929190613e95565b602060405180830381600087803b158015612efa57600080fd5b505af1925050508015612f2b57506040513d601f19601f82011682018060405250810190612f289190613854565b60015b612fae573d8060008114612f5b576040519150601f19603f3d011682016040523d82523d6000602084013e612f60565b606091505b50600081511415612fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9d90613f3e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613003565b600190505b949350505050565b505050565b600061301b82610d66565b905061302981600084612cdf565b613034600083612136565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130849190614396565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461312981600084612cf7565b5050565b61313783836131ab565b6131446000848484612e74565b613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a90613f3e565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561321b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613212906140fe565b60405180910390fd5b61322481612c73565b15613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325b90613f9e565b60405180910390fd5b61327060008383612cdf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132c0919061430f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461338160008383612cf7565b5050565b82805461339190614480565b90600052602060002090601f0160209004810192826133b357600085556133fa565b82601f106133cc57805160ff19168380011785556133fa565b828001600101855582156133fa579182015b828111156133f95782518255916020019190600101906133de565b5b509050613407919061344b565b5090565b50805461341790614480565b6000825580601f106134295750613448565b601f016020900490600052602060002090810190613447919061344b565b5b50565b5b8082111561346457600081600090555060010161344c565b5090565b600061347b6134768461421e565b6141f9565b9050808382526020820190508285602086028201111561349e5761349d61467c565b5b60005b858110156134ce57816134b4888261355c565b8452602084019350602083019250506001810190506134a1565b5050509392505050565b60006134eb6134e68461424a565b6141f9565b90508281526020810184848401111561350757613506614681565b5b61351284828561443e565b509392505050565b600061352d6135288461427b565b6141f9565b90508281526020810184848401111561354957613548614681565b5b61355484828561443e565b509392505050565b60008135905061356b81614b80565b92915050565b600082601f83011261358657613585614677565b5b8135613596848260208601613468565b91505092915050565b6000813590506135ae81614b97565b92915050565b6000813590506135c381614bae565b92915050565b6000815190506135d881614bae565b92915050565b600082601f8301126135f3576135f2614677565b5b81356136038482602086016134d8565b91505092915050565b60008135905061361b81614bc5565b92915050565b600082601f83011261363657613635614677565b5b813561364684826020860161351a565b91505092915050565b60008135905061365e81614bd5565b92915050565b60006020828403121561367a5761367961468b565b5b60006136888482850161355c565b91505092915050565b600080604083850312156136a8576136a761468b565b5b60006136b68582860161355c565b92505060206136c78582860161355c565b9150509250929050565b6000806000606084860312156136ea576136e961468b565b5b60006136f88682870161355c565b93505060206137098682870161355c565b925050604061371a8682870161364f565b9150509250925092565b6000806000806080858703121561373e5761373d61468b565b5b600061374c8782880161355c565b945050602061375d8782880161355c565b935050604061376e8782880161364f565b925050606085013567ffffffffffffffff81111561378f5761378e614686565b5b61379b878288016135de565b91505092959194509250565b600080604083850312156137be576137bd61468b565b5b60006137cc8582860161355c565b92505060206137dd8582860161359f565b9150509250929050565b600080604083850312156137fe576137fd61468b565b5b600061380c8582860161355c565b925050602061381d8582860161364f565b9150509250929050565b60006020828403121561383d5761383c61468b565b5b600061384b848285016135b4565b91505092915050565b60006020828403121561386a5761386961468b565b5b6000613878848285016135c9565b91505092915050565b6000602082840312156138975761389661468b565b5b60006138a58482850161360c565b91505092915050565b600080604083850312156138c5576138c461468b565b5b60006138d38582860161360c565b92505060206138e48582860161355c565b9150509250929050565b600080604083850312156139055761390461468b565b5b60006139138582860161360c565b925050602083013567ffffffffffffffff81111561393457613933614686565b5b61394085828601613571565b9150509250929050565b6000602082840312156139605761395f61468b565b5b600082013567ffffffffffffffff81111561397e5761397d614686565b5b61398a84828501613621565b91505092915050565b6000602082840312156139a9576139a861468b565b5b60006139b78482850161364f565b91505092915050565b6139c9816143ca565b82525050565b6139d8816143dc565b82525050565b60006139e9826142c1565b6139f381856142d7565b9350613a0381856020860161444d565b613a0c81614690565b840191505092915050565b6000613a22826142cc565b613a2c81856142f3565b9350613a3c81856020860161444d565b613a4581614690565b840191505092915050565b6000613a5b826142cc565b613a658185614304565b9350613a7581856020860161444d565b80840191505092915050565b60008154613a8e81614480565b613a988186614304565b94506001821660008114613ab35760018114613ac457613af7565b60ff19831686528186019350613af7565b613acd856142ac565b60005b83811015613aef57815481890152600182019150602081019050613ad0565b838801955050505b50505092915050565b6000613b0d6014836142f3565b9150613b18826146a1565b602082019050919050565b6000613b306032836142f3565b9150613b3b826146ca565b604082019050919050565b6000613b536026836142f3565b9150613b5e82614719565b604082019050919050565b6000613b766025836142f3565b9150613b8182614768565b604082019050919050565b6000613b99601c836142f3565b9150613ba4826147b7565b602082019050919050565b6000613bbc6024836142f3565b9150613bc7826147e0565b604082019050919050565b6000613bdf6019836142f3565b9150613bea8261482f565b602082019050919050565b6000613c026010836142f3565b9150613c0d82614858565b602082019050919050565b6000613c256010836142f3565b9150613c3082614881565b602082019050919050565b6000613c486029836142f3565b9150613c53826148aa565b604082019050919050565b6000613c6b6020836142f3565b9150613c76826148f9565b602082019050919050565b6000613c8e602e836142f3565b9150613c9982614922565b604082019050919050565b6000613cb1601d836142f3565b9150613cbc82614971565b602082019050919050565b6000613cd46016836142f3565b9150613cdf8261499a565b602082019050919050565b6000613cf7603e836142f3565b9150613d02826149c3565b604082019050919050565b6000613d1a6020836142f3565b9150613d2582614a12565b602082019050919050565b6000613d3d6010836142f3565b9150613d4882614a3b565b602082019050919050565b6000613d606018836142f3565b9150613d6b82614a64565b602082019050919050565b6000613d836020836142f3565b9150613d8e82614a8d565b602082019050919050565b6000613da66018836142f3565b9150613db182614ab6565b602082019050919050565b6000613dc96021836142f3565b9150613dd482614adf565b604082019050919050565b6000613dec6000836142e8565b9150613df782614b2e565b600082019050919050565b6000613e0f602e836142f3565b9150613e1a82614b31565b604082019050919050565b613e2e81614434565b82525050565b6000613e408286613a50565b9150613e4c8285613a50565b9150613e588284613a81565b9150819050949350505050565b6000613e7082613ddf565b9150819050919050565b6000602082019050613e8f60008301846139c0565b92915050565b6000608082019050613eaa60008301876139c0565b613eb760208301866139c0565b613ec46040830185613e25565b8181036060830152613ed681846139de565b905095945050505050565b6000602082019050613ef660008301846139cf565b92915050565b60006020820190508181036000830152613f168184613a17565b905092915050565b60006020820190508181036000830152613f3781613b00565b9050919050565b60006020820190508181036000830152613f5781613b23565b9050919050565b60006020820190508181036000830152613f7781613b46565b9050919050565b60006020820190508181036000830152613f9781613b69565b9050919050565b60006020820190508181036000830152613fb781613b8c565b9050919050565b60006020820190508181036000830152613fd781613baf565b9050919050565b60006020820190508181036000830152613ff781613bd2565b9050919050565b6000602082019050818103600083015261401781613bf5565b9050919050565b6000602082019050818103600083015261403781613c18565b9050919050565b6000602082019050818103600083015261405781613c3b565b9050919050565b6000602082019050818103600083015261407781613c5e565b9050919050565b6000602082019050818103600083015261409781613c81565b9050919050565b600060208201905081810360008301526140b781613ca4565b9050919050565b600060208201905081810360008301526140d781613cc7565b9050919050565b600060208201905081810360008301526140f781613cea565b9050919050565b6000602082019050818103600083015261411781613d0d565b9050919050565b6000602082019050818103600083015261413781613d30565b9050919050565b6000602082019050818103600083015261415781613d53565b9050919050565b6000602082019050818103600083015261417781613d76565b9050919050565b6000602082019050818103600083015261419781613d99565b9050919050565b600060208201905081810360008301526141b781613dbc565b9050919050565b600060208201905081810360008301526141d781613e02565b9050919050565b60006020820190506141f36000830184613e25565b92915050565b6000614203614214565b905061420f82826144b2565b919050565b6000604051905090565b600067ffffffffffffffff82111561423957614238614648565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561426557614264614648565b5b61426e82614690565b9050602081019050919050565b600067ffffffffffffffff82111561429657614295614648565b5b61429f82614690565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061431a82614434565b915061432583614434565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561435a5761435961455d565b5b828201905092915050565b600061437082614434565b915061437b83614434565b92508261438b5761438a61458c565b5b828204905092915050565b60006143a182614434565b91506143ac83614434565b9250828210156143bf576143be61455d565b5b828203905092915050565b60006143d582614414565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561446b578082015181840152602081019050614450565b8381111561447a576000848401525b50505050565b6000600282049050600182168061449857607f821691505b602082108114156144ac576144ab6145ea565b5b50919050565b6144bb82614690565b810181811067ffffffffffffffff821117156144da576144d9614648565b5b80604052505050565b60006144ee82614434565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145215761452061455d565b5b600182019050919050565b600061453782614434565b915061454283614434565b9250826145525761455161458c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f696e76616c696420746f6b656e20696400000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6d6178206c6567656e64617279204e4654206c696d6974206578636565646564600082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f6d6178204e46542070657220616464726573732065786365656465642e000000600082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f77726f6e67206361726420747970652e00000000000000000000000000000000600082015250565b7f6174206c656173742068617665203120616464726573732e0000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b614b89816143ca565b8114614b9457600080fd5b50565b614ba0816143dc565b8114614bab57600080fd5b50565b614bb7816143e8565b8114614bc257600080fd5b50565b60058110614bd257600080fd5b50565b614bde81614434565b8114614be957600080fd5b5056fea2646970667358221220f777aacee0fdfa70417d36ece15091e410904e77dd1fe0b2d1ac13250be7d59264736f6c63430008070033

Deployed Bytecode

0x60806040526004361061021a5760003560e01c80638456cb5911610123578063a22cb465116100ab578063ca8254de1161006f578063ca8254de1461079e578063d5abeb01146107db578063e58306f914610806578063e985e9c51461082f578063f2fde38b1461086c5761021a565b8063a22cb465146106b9578063b88d4fde146106e2578063bca63e501461070b578063c668286214610736578063c87b56dd146107615761021a565b806395d89b41116100f257806395d89b41146105d45780639a414833146105ff578063a035b1fe14610628578063a0712d6814610653578063a1ce23cd1461067c5761021a565b80638456cb591461052c57806385e31ba7146105435780638da5cb5b1461058057806392be511f146105ab5761021a565b80633f4ba83a116101a65780635c975abb116101755780635c975abb146104455780636352211e146104705780636c0360eb146104ad57806370a08231146104d8578063715018a6146105155761021a565b80633f4ba83a146103b357806342842e0e146103ca57806342966c68146103f357806355f804b31461041c5761021a565b806318160ddd116101ed57806318160ddd146102ed57806318cae26914610318578063239c70ae1461035557806323b872dd146103805780633ccfd60b146103a95761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613827565b610895565b6040516102539190613ee1565b60405180910390f35b34801561026857600080fd5b50610271610977565b60405161027e9190613efc565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613993565b610a09565b6040516102bb9190613e7a565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e691906137e7565b610a4f565b005b3480156102f957600080fd5b50610302610b67565b60405161030f91906141de565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190613664565b610b98565b60405161034c9190613ee1565b60405180910390f35b34801561036157600080fd5b5061036a610bb8565b60405161037791906141de565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a291906136d1565b610bbe565b005b6103b1610c1e565b005b3480156103bf57600080fd5b506103c8610c9f565b005b3480156103d657600080fd5b506103f160048036038101906103ec91906136d1565b610cb1565b005b3480156103ff57600080fd5b5061041a60048036038101906104159190613993565b610cd1565b005b34801561042857600080fd5b50610443600480360381019061043e919061394a565b610d2d565b005b34801561045157600080fd5b5061045a610d4f565b6040516104679190613ee1565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190613993565b610d66565b6040516104a49190613e7a565b60405180910390f35b3480156104b957600080fd5b506104c2610e18565b6040516104cf9190613efc565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190613664565b610ea6565b60405161050c91906141de565b60405180910390f35b34801561052157600080fd5b5061052a610f5e565b005b34801561053857600080fd5b50610541610f72565b005b34801561054f57600080fd5b5061056a60048036038101906105659190613881565b610f84565b60405161057791906141de565b60405180910390f35b34801561058c57600080fd5b506105956110d2565b6040516105a29190613e7a565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd91906138ee565b6110fc565b005b3480156105e057600080fd5b506105e96113fd565b6040516105f69190613efc565b60405180910390f35b34801561060b57600080fd5b50610626600480360381019061062191906138ae565b61148f565b005b34801561063457600080fd5b5061063d61169e565b60405161064a91906141de565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190613993565b6116a4565b005b34801561068857600080fd5b506106a3600480360381019061069e91906138ae565b6119c8565b6040516106b09190613ee1565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db91906137a7565b611bbf565b005b3480156106ee57600080fd5b5061070960048036038101906107049190613724565b611bd5565b005b34801561071757600080fd5b50610720611c37565b60405161072d91906141de565b60405180910390f35b34801561074257600080fd5b5061074b611c68565b6040516107589190613efc565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190613993565b611cf6565b6040516107959190613efc565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190613664565b611d58565b6040516107d29190613efc565b60405180910390f35b3480156107e757600080fd5b506107f0611f45565b6040516107fd91906141de565b60405180910390f35b34801561081257600080fd5b5061082d600480360381019061082891906137e7565b611f4b565b005b34801561083b57600080fd5b5061085660048036038101906108519190613691565b611f61565b6040516108639190613ee1565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190613664565b611ff5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610970575061096f82612079565b5b9050919050565b60606000805461098690614480565b80601f01602080910402602001604051908101604052809291908181526020018280546109b290614480565b80156109ff5780601f106109d4576101008083540402835291602001916109ff565b820191906000526020600020905b8154815290600101906020018083116109e257829003601f168201915b5050505050905090565b6000610a14826120e3565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a5a82610d66565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac29061419e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aea61212e565b73ffffffffffffffffffffffffffffffffffffffff161480610b195750610b1881610b1361212e565b611f61565b5b610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f906140de565b60405180910390fd5b610b628383612136565b505050565b6000600e54600d54600c54600b54610b7f919061430f565b610b89919061430f565b610b93919061430f565b905090565b60156020528060005260406000206000915054906101000a900460ff1681565b60135481565b610bcf610bc961212e565b826121ef565b610c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c05906141be565b60405180910390fd5b610c19838383612284565b505050565b610c266124eb565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610c4c90613e65565b60006040518083038185875af1925050503d8060008114610c89576040519150601f19603f3d011682016040523d82523d6000602084013e610c8e565b606091505b5050905080610c9c57600080fd5b50565b610ca76124eb565b610caf612569565b565b610ccc83838360405180602001604052806000815250611bd5565b505050565b610ce2610cdc61212e565b826121ef565b610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d18906141be565b60405180910390fd5b610d2a816125cc565b50565b610d356124eb565b8060099080519060200190610d4b929190613385565b5050565b6000600760009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e069061417e565b60405180910390fd5b80915050919050565b60098054610e2590614480565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5190614480565b8015610e9e5780601f10610e7357610100808354040283529160200191610e9e565b820191906000526020600020905b815481529060010190602001808311610e8157829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e9061403e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f666124eb565b610f7060006125d8565b565b610f7a6124eb565b610f8261269e565b565b6000600480811115610f9957610f986145bb565b5b826004811115610fac57610fab6145bb565b5b10610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe39061411e565b60405180910390fd5b6000600481111561100057610fff6145bb565b5b826004811115611013576110126145bb565b5b141561102357600b5490506110cd565b60016004811115611037576110366145bb565b5b82600481111561104a576110496145bb565b5b141561105a57600c5490506110cd565b6002600481111561106e5761106d6145bb565b5b826004811115611081576110806145bb565b5b141561109157600d5490506110cd565b600360048111156110a5576110a46145bb565b5b8260048111156110b8576110b76145bb565b5b14156110c857600e5490506110cd565b600090505b919050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111046124eb565b60036004811115611118576111176145bb565b5b82600481111561112b5761112a6145bb565b5b1061116b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111629061411e565b60405180910390fd5b60008151116111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a69061413e565b60405180910390fd5b600060048111156111c3576111c26145bb565b5b8260048111156111d6576111d56145bb565b5b14156112735760005b815181101561126d5760016016600084848151811061120157611200614619565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611265906144e3565b9150506111df565b506113f9565b60016004811115611287576112866145bb565b5b82600481111561129a576112996145bb565b5b14156113375760005b8151811015611331576001601760008484815181106112c5576112c4614619565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611329906144e3565b9150506112a3565b506113f8565b6002600481111561134b5761134a6145bb565b5b82600481111561135e5761135d6145bb565b5b14156113f75760005b81518110156113f55760016018600084848151811061138957611388614619565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113ed906144e3565b915050611367565b505b5b5b5050565b60606001805461140c90614480565b80601f016020809104026020016040519081016040528092919081815260200182805461143890614480565b80156114855780601f1061145a57610100808354040283529160200191611485565b820191906000526020600020905b81548152906001019060200180831161146857829003601f168201915b5050505050905090565b6114976124eb565b600360048111156114ab576114aa6145bb565b5b8260048111156114be576114bd6145bb565b5b106114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f59061411e565b60405180910390fd5b60006004811115611512576115116145bb565b5b826004811115611525576115246145bb565b5b1415611588576000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061169a565b6001600481111561159c5761159b6145bb565b5b8260048111156115af576115ae6145bb565b5b1415611612576000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611699565b60026004811115611626576116256145bb565b5b826004811115611639576116386145bb565b5b1415611698576000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5050565b60085481565b6000339050600082116116b657600080fd5b60018211156116c457600080fd5b60001515601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611757576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174e9061409e565b60405180910390fd5b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561180657600f54600b546117bb919061430f565b90506010548110611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f89061405e565b60405180910390fd5b6119b9565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118b357601054600c54611868919061430f565b905060115481106118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a5906140be565b60405180910390fd5b6119b8565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561196057601154600d54611915919061430f565b9050601254811061195b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611952906140be565b60405180910390fd5b6119b7565b601254600e54611970919061430f565b905060145481106119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad906140be565b60405180910390fd5b5b5b5b6119c38282612701565b505050565b6000600360048111156119de576119dd6145bb565b5b8360048111156119f1576119f06145bb565b5b10611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a289061411e565b60405180910390fd5b60006004811115611a4557611a446145bb565b5b836004811115611a5857611a576145bb565b5b1415611ab257601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050611bb9565b60016004811115611ac657611ac56145bb565b5b836004811115611ad957611ad86145bb565b5b1415611b3357601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050611bb9565b60026004811115611b4757611b466145bb565b5b836004811115611b5a57611b596145bb565b5b1415611bb457601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050611bb9565b600090505b92915050565b611bd1611bca61212e565b83836128b7565b5050565b611be6611be061212e565b836121ef565b611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c906141be565b60405180910390fd5b611c3184848484612a24565b50505050565b6000600e54600d54600c54600b54611c4f919061430f565b611c59919061430f565b611c63919061430f565b905090565b600a8054611c7590614480565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca190614480565b8015611cee5780601f10611cc357610100808354040283529160200191611cee565b820191906000526020600020905b815481529060010190602001808311611cd157829003601f168201915b505050505081565b60606000611d02612a80565b90506000815111611d225760405180602001604052806000815250611d50565b80611d2c84612b12565b600a604051602001611d4093929190613e34565b6040516020818303038152906040525b915050919050565b6060601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611de9576040518060400160405280600981526020017f6c6567656e6461727900000000000000000000000000000000000000000000008152509050611f40565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e78576040518060400160405280600481526020017f65706963000000000000000000000000000000000000000000000000000000008152509050611f40565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f07576040518060400160405280600481526020017f72617265000000000000000000000000000000000000000000000000000000008152509050611f40565b6040518060400160405280600681526020017f6e6f726d616c000000000000000000000000000000000000000000000000000081525090505b919050565b60145481565b611f536124eb565b611f5d8282612701565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ffd6124eb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490613f5e565b60405180910390fd5b612076816125d8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6120ec81612c73565b61212b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121229061417e565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121a983610d66565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806121fb83610d66565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061223d575061223c8185611f61565b5b8061227b57508373ffffffffffffffffffffffffffffffffffffffff1661226384610a09565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122a482610d66565b73ffffffffffffffffffffffffffffffffffffffff16146122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f190613f7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561236a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236190613fbe565b60405180910390fd5b612375838383612cdf565b612380600082612136565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123d09190614396565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612427919061430f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124e6838383612cf7565b505050565b6124f361212e565b73ffffffffffffffffffffffffffffffffffffffff166125116110d2565b73ffffffffffffffffffffffffffffffffffffffff1614612567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255e9061415e565b60405180910390fd5b565b612571612cfc565b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6125b561212e565b6040516125c29190613e7a565b60405180910390a1565b6125d581612d45565b50565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126a6612d98565b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586126ea61212e565b6040516126f79190613e7a565b60405180910390a1565b612709612d98565b6000811015801561271b575061124881105b61275a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275190613ffe565b60405180910390fd5b6127648282612de2565b6001601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506010548110156127e357600b60008154809291906127d9906144e3565b919050555061284c565b60115481101561280a57600c6000815480929190612800906144e3565b919050555061284b565b60125481101561283157600d6000815480929190612827906144e3565b919050555061284a565b600e6000815480929190612844906144e3565b91905055505b5b5b6000612856612a80565b905060008082511161287757604051806020016040528060008152506128a5565b8161288184612b12565b600a60405160200161289593929190613e34565b6040516020818303038152906040525b90506128b18382612e00565b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291d90613fde565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a179190613ee1565b60405180910390a3505050565b612a2f848484612284565b612a3b84848484612e74565b612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7190613f3e565b60405180910390fd5b50505050565b606060098054612a8f90614480565b80601f0160208091040260200160405190810160405280929190818152602001828054612abb90614480565b8015612b085780601f10612add57610100808354040283529160200191612b08565b820191906000526020600020905b815481529060010190602001808311612aeb57829003601f168201915b5050505050905090565b60606000821415612b5a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c6e565b600082905060005b60008214612b8c578080612b75906144e3565b915050600a82612b859190614365565b9150612b62565b60008167ffffffffffffffff811115612ba857612ba7614648565b5b6040519080825280601f01601f191660200182016040528015612bda5781602001600182028036833780820191505090505b5090505b60008514612c6757600182612bf39190614396565b9150600a85612c02919061452c565b6030612c0e919061430f565b60f81b818381518110612c2457612c23614619565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c609190614365565b9450612bde565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b612ce7612d98565b612cf283838361300b565b505050565b505050565b612d04610d4f565b612d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3a90613f1e565b60405180910390fd5b565b612d4e81613010565b6000600660008381526020019081526020016000208054612d6e90614480565b905014612d9557600660008281526020019081526020016000206000612d94919061340b565b5b50565b612da0610d4f565b15612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd79061401e565b60405180910390fd5b565b612dfc82826040518060200160405280600081525061312d565b5050565b612e0982612c73565b612e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f9061407e565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190612e6f929190613385565b505050565b6000612e958473ffffffffffffffffffffffffffffffffffffffff16613188565b15612ffe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ebe61212e565b8786866040518563ffffffff1660e01b8152600401612ee09493929190613e95565b602060405180830381600087803b158015612efa57600080fd5b505af1925050508015612f2b57506040513d601f19601f82011682018060405250810190612f289190613854565b60015b612fae573d8060008114612f5b576040519150601f19603f3d011682016040523d82523d6000602084013e612f60565b606091505b50600081511415612fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9d90613f3e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613003565b600190505b949350505050565b505050565b600061301b82610d66565b905061302981600084612cdf565b613034600083612136565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130849190614396565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461312981600084612cf7565b5050565b61313783836131ab565b6131446000848484612e74565b613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a90613f3e565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561321b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613212906140fe565b60405180910390fd5b61322481612c73565b15613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325b90613f9e565b60405180910390fd5b61327060008383612cdf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132c0919061430f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461338160008383612cf7565b5050565b82805461339190614480565b90600052602060002090601f0160209004810192826133b357600085556133fa565b82601f106133cc57805160ff19168380011785556133fa565b828001600101855582156133fa579182015b828111156133f95782518255916020019190600101906133de565b5b509050613407919061344b565b5090565b50805461341790614480565b6000825580601f106134295750613448565b601f016020900490600052602060002090810190613447919061344b565b5b50565b5b8082111561346457600081600090555060010161344c565b5090565b600061347b6134768461421e565b6141f9565b9050808382526020820190508285602086028201111561349e5761349d61467c565b5b60005b858110156134ce57816134b4888261355c565b8452602084019350602083019250506001810190506134a1565b5050509392505050565b60006134eb6134e68461424a565b6141f9565b90508281526020810184848401111561350757613506614681565b5b61351284828561443e565b509392505050565b600061352d6135288461427b565b6141f9565b90508281526020810184848401111561354957613548614681565b5b61355484828561443e565b509392505050565b60008135905061356b81614b80565b92915050565b600082601f83011261358657613585614677565b5b8135613596848260208601613468565b91505092915050565b6000813590506135ae81614b97565b92915050565b6000813590506135c381614bae565b92915050565b6000815190506135d881614bae565b92915050565b600082601f8301126135f3576135f2614677565b5b81356136038482602086016134d8565b91505092915050565b60008135905061361b81614bc5565b92915050565b600082601f83011261363657613635614677565b5b813561364684826020860161351a565b91505092915050565b60008135905061365e81614bd5565b92915050565b60006020828403121561367a5761367961468b565b5b60006136888482850161355c565b91505092915050565b600080604083850312156136a8576136a761468b565b5b60006136b68582860161355c565b92505060206136c78582860161355c565b9150509250929050565b6000806000606084860312156136ea576136e961468b565b5b60006136f88682870161355c565b93505060206137098682870161355c565b925050604061371a8682870161364f565b9150509250925092565b6000806000806080858703121561373e5761373d61468b565b5b600061374c8782880161355c565b945050602061375d8782880161355c565b935050604061376e8782880161364f565b925050606085013567ffffffffffffffff81111561378f5761378e614686565b5b61379b878288016135de565b91505092959194509250565b600080604083850312156137be576137bd61468b565b5b60006137cc8582860161355c565b92505060206137dd8582860161359f565b9150509250929050565b600080604083850312156137fe576137fd61468b565b5b600061380c8582860161355c565b925050602061381d8582860161364f565b9150509250929050565b60006020828403121561383d5761383c61468b565b5b600061384b848285016135b4565b91505092915050565b60006020828403121561386a5761386961468b565b5b6000613878848285016135c9565b91505092915050565b6000602082840312156138975761389661468b565b5b60006138a58482850161360c565b91505092915050565b600080604083850312156138c5576138c461468b565b5b60006138d38582860161360c565b92505060206138e48582860161355c565b9150509250929050565b600080604083850312156139055761390461468b565b5b60006139138582860161360c565b925050602083013567ffffffffffffffff81111561393457613933614686565b5b61394085828601613571565b9150509250929050565b6000602082840312156139605761395f61468b565b5b600082013567ffffffffffffffff81111561397e5761397d614686565b5b61398a84828501613621565b91505092915050565b6000602082840312156139a9576139a861468b565b5b60006139b78482850161364f565b91505092915050565b6139c9816143ca565b82525050565b6139d8816143dc565b82525050565b60006139e9826142c1565b6139f381856142d7565b9350613a0381856020860161444d565b613a0c81614690565b840191505092915050565b6000613a22826142cc565b613a2c81856142f3565b9350613a3c81856020860161444d565b613a4581614690565b840191505092915050565b6000613a5b826142cc565b613a658185614304565b9350613a7581856020860161444d565b80840191505092915050565b60008154613a8e81614480565b613a988186614304565b94506001821660008114613ab35760018114613ac457613af7565b60ff19831686528186019350613af7565b613acd856142ac565b60005b83811015613aef57815481890152600182019150602081019050613ad0565b838801955050505b50505092915050565b6000613b0d6014836142f3565b9150613b18826146a1565b602082019050919050565b6000613b306032836142f3565b9150613b3b826146ca565b604082019050919050565b6000613b536026836142f3565b9150613b5e82614719565b604082019050919050565b6000613b766025836142f3565b9150613b8182614768565b604082019050919050565b6000613b99601c836142f3565b9150613ba4826147b7565b602082019050919050565b6000613bbc6024836142f3565b9150613bc7826147e0565b604082019050919050565b6000613bdf6019836142f3565b9150613bea8261482f565b602082019050919050565b6000613c026010836142f3565b9150613c0d82614858565b602082019050919050565b6000613c256010836142f3565b9150613c3082614881565b602082019050919050565b6000613c486029836142f3565b9150613c53826148aa565b604082019050919050565b6000613c6b6020836142f3565b9150613c76826148f9565b602082019050919050565b6000613c8e602e836142f3565b9150613c9982614922565b604082019050919050565b6000613cb1601d836142f3565b9150613cbc82614971565b602082019050919050565b6000613cd46016836142f3565b9150613cdf8261499a565b602082019050919050565b6000613cf7603e836142f3565b9150613d02826149c3565b604082019050919050565b6000613d1a6020836142f3565b9150613d2582614a12565b602082019050919050565b6000613d3d6010836142f3565b9150613d4882614a3b565b602082019050919050565b6000613d606018836142f3565b9150613d6b82614a64565b602082019050919050565b6000613d836020836142f3565b9150613d8e82614a8d565b602082019050919050565b6000613da66018836142f3565b9150613db182614ab6565b602082019050919050565b6000613dc96021836142f3565b9150613dd482614adf565b604082019050919050565b6000613dec6000836142e8565b9150613df782614b2e565b600082019050919050565b6000613e0f602e836142f3565b9150613e1a82614b31565b604082019050919050565b613e2e81614434565b82525050565b6000613e408286613a50565b9150613e4c8285613a50565b9150613e588284613a81565b9150819050949350505050565b6000613e7082613ddf565b9150819050919050565b6000602082019050613e8f60008301846139c0565b92915050565b6000608082019050613eaa60008301876139c0565b613eb760208301866139c0565b613ec46040830185613e25565b8181036060830152613ed681846139de565b905095945050505050565b6000602082019050613ef660008301846139cf565b92915050565b60006020820190508181036000830152613f168184613a17565b905092915050565b60006020820190508181036000830152613f3781613b00565b9050919050565b60006020820190508181036000830152613f5781613b23565b9050919050565b60006020820190508181036000830152613f7781613b46565b9050919050565b60006020820190508181036000830152613f9781613b69565b9050919050565b60006020820190508181036000830152613fb781613b8c565b9050919050565b60006020820190508181036000830152613fd781613baf565b9050919050565b60006020820190508181036000830152613ff781613bd2565b9050919050565b6000602082019050818103600083015261401781613bf5565b9050919050565b6000602082019050818103600083015261403781613c18565b9050919050565b6000602082019050818103600083015261405781613c3b565b9050919050565b6000602082019050818103600083015261407781613c5e565b9050919050565b6000602082019050818103600083015261409781613c81565b9050919050565b600060208201905081810360008301526140b781613ca4565b9050919050565b600060208201905081810360008301526140d781613cc7565b9050919050565b600060208201905081810360008301526140f781613cea565b9050919050565b6000602082019050818103600083015261411781613d0d565b9050919050565b6000602082019050818103600083015261413781613d30565b9050919050565b6000602082019050818103600083015261415781613d53565b9050919050565b6000602082019050818103600083015261417781613d76565b9050919050565b6000602082019050818103600083015261419781613d99565b9050919050565b600060208201905081810360008301526141b781613dbc565b9050919050565b600060208201905081810360008301526141d781613e02565b9050919050565b60006020820190506141f36000830184613e25565b92915050565b6000614203614214565b905061420f82826144b2565b919050565b6000604051905090565b600067ffffffffffffffff82111561423957614238614648565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561426557614264614648565b5b61426e82614690565b9050602081019050919050565b600067ffffffffffffffff82111561429657614295614648565b5b61429f82614690565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061431a82614434565b915061432583614434565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561435a5761435961455d565b5b828201905092915050565b600061437082614434565b915061437b83614434565b92508261438b5761438a61458c565b5b828204905092915050565b60006143a182614434565b91506143ac83614434565b9250828210156143bf576143be61455d565b5b828203905092915050565b60006143d582614414565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561446b578082015181840152602081019050614450565b8381111561447a576000848401525b50505050565b6000600282049050600182168061449857607f821691505b602082108114156144ac576144ab6145ea565b5b50919050565b6144bb82614690565b810181811067ffffffffffffffff821117156144da576144d9614648565b5b80604052505050565b60006144ee82614434565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145215761452061455d565b5b600182019050919050565b600061453782614434565b915061454283614434565b9250826145525761455161458c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f696e76616c696420746f6b656e20696400000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6d6178206c6567656e64617279204e4654206c696d6974206578636565646564600082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f6d6178204e46542070657220616464726573732065786365656465642e000000600082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f77726f6e67206361726420747970652e00000000000000000000000000000000600082015250565b7f6174206c656173742068617665203120616464726573732e0000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b614b89816143ca565b8114614b9457600080fd5b50565b614ba0816143dc565b8114614bab57600080fd5b50565b614bb7816143e8565b8114614bc257600080fd5b50565b60058110614bd257600080fd5b50565b614bde81614434565b8114614be957600080fd5b5056fea2646970667358221220f777aacee0fdfa70417d36ece15091e410904e77dd1fe0b2d1ac13250be7d59264736f6c63430008070033

Deployed Bytecode Sourcemap

43415:7255:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27392:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28319:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29832:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29349:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44741:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44178:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44099:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30532:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50499:168;;;:::i;:::-;;49608:65;;;;;;;;;;;;;:::i;:::-;;30939:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41112:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44490:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7763:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28030:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43702:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27761:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5273:103;;;;;;;;;;;;;:::i;:::-;;49539:61;;;;;;;;;;;;;:::i;:::-;;47156:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4625:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48264:767;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28488:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47790:466;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43669:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44893:989;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49039:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30075:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31195:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47644:136;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43730:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50083:408;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46808:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44138:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45890:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30301:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5531:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27392:305;27494:4;27546:25;27531:40;;;:11;:40;;;;:105;;;;27603:33;27588:48;;;:11;:48;;;;27531:105;:158;;;;27653:36;27677:11;27653:23;:36::i;:::-;27531:158;27511:178;;27392:305;;;:::o;28319:100::-;28373:13;28406:5;28399:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28319:100;:::o;29832:171::-;29908:7;29928:23;29943:7;29928:14;:23::i;:::-;29971:15;:24;29987:7;29971:24;;;;;;;;;;;;;;;;;;;;;29964:31;;29832:171;;;:::o;29349:417::-;29430:13;29446:23;29461:7;29446:14;:23::i;:::-;29430:39;;29494:5;29488:11;;:2;:11;;;;29480:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29588:5;29572:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29597:37;29614:5;29621:12;:10;:12::i;:::-;29597:16;:37::i;:::-;29572:62;29550:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;29737:21;29746:2;29750:7;29737:8;:21::i;:::-;29419:347;29349:417;;:::o;44741:138::-;44784:7;44858:13;;44844:11;;44830;;44811:16;;:30;;;;:::i;:::-;:44;;;;:::i;:::-;:60;;;;:::i;:::-;44804:67;;44741:138;:::o;44178:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;44099:32::-;;;;:::o;30532:336::-;30727:41;30746:12;:10;:12::i;:::-;30760:7;30727:18;:41::i;:::-;30719:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30832:28;30842:4;30848:2;30852:7;30832:9;:28::i;:::-;30532:336;;;:::o;50499:168::-;4511:13;:11;:13::i;:::-;50556:12:::1;50582:10;50574:24;;50606:21;50574:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50555:77;;;50651:7;50643:16;;;::::0;::::1;;50544:123;50499:168::o:0;49608:65::-;4511:13;:11;:13::i;:::-;49655:10:::1;:8;:10::i;:::-;49608:65::o:0;30939:185::-;31077:39;31094:4;31100:2;31104:7;31077:39;;;;;;;;;;;;:16;:39::i;:::-;30939:185;;;:::o;41112:243::-;41230:41;41249:12;:10;:12::i;:::-;41263:7;41230:18;:41::i;:::-;41222:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;41333:14;41339:7;41333:5;:14::i;:::-;41112:243;:::o;44490:104::-;4511:13;:11;:13::i;:::-;44575:11:::1;44565:7;:21;;;;;;;;;;;;:::i;:::-;;44490:104:::0;:::o;7763:86::-;7810:4;7834:7;;;;;;;;;;;7827:14;;7763:86;:::o;28030:222::-;28102:7;28122:13;28138:7;:16;28146:7;28138:16;;;;;;;;;;;;;;;;;;;;;28122:32;;28190:1;28173:19;;:5;:19;;;;28165:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28239:5;28232:12;;;28030:222;;;:::o;43702:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27761:207::-;27833:7;27878:1;27861:19;;:5;:19;;;;27853:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27944:9;:16;27954:5;27944:16;;;;;;;;;;;;;;;;27937:23;;27761:207;;;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;49539:61::-;4511:13;:11;:13::i;:::-;49584:8:::1;:6;:8::i;:::-;49539:61::o:0;47156:480::-;47215:7;47254:13;47243:24;;;;;;;;:::i;:::-;;:8;:24;;;;;;;;:::i;:::-;;;47235:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;47315:18;47303:30;;;;;;;;:::i;:::-;;:8;:30;;;;;;;;:::i;:::-;;;47299:310;;;47355:16;;47348:23;;;;47299:310;47403:13;47391:25;;;;;;;;:::i;:::-;;:8;:25;;;;;;;;:::i;:::-;;;47387:222;;;47438:11;;47431:18;;;;47387:222;47481:13;47469:25;;;;;;;;:::i;:::-;;:8;:25;;;;;;;;:::i;:::-;;;47465:144;;;47516:11;;47509:18;;;;47465:144;47559:15;47547:27;;;;;;;;:::i;:::-;;:8;:27;;;;;;;;:::i;:::-;;;47543:66;;;47596:13;;47589:20;;;;47543:66;47627:1;47620:8;;47156:480;;;;:::o;4625:87::-;4671:7;4698:6;;;;;;;;;;;4691:13;;4625:87;:::o;48264:767::-;4511:13;:11;:13::i;:::-;48381:15:::1;48372:24;;;;;;;;:::i;:::-;;:8;:24;;;;;;;;:::i;:::-;;;48364:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;48449:1;48436:5;:12;:14;48428:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;48507:18;48495:30;;;;;;;;:::i;:::-;;:8;:30;;;;;;;;:::i;:::-;;;48492:532;;;48547:6;48542:113;48563:5;:12;48559:1;:16;48542:113;;;48635:4;48601:21;:31;48623:5;48629:1;48623:8;;;;;;;;:::i;:::-;;;;;;;;48601:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;48577:3;;;;;:::i;:::-;;;;48542:113;;;;48492:532;;;48696:13;48684:25;;;;;;;;:::i;:::-;;:8;:25;;;;;;;;:::i;:::-;;;48681:343;;;48731:6;48726:108;48747:5;:12;48743:1;:16;48726:108;;;48814:4;48785:16;:26;48802:5;48808:1;48802:8;;;;;;;;:::i;:::-;;;;;;;;48785:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;48761:3;;;;;:::i;:::-;;;;48726:108;;;;48681:343;;;48875:13;48863:25;;;;;;;;:::i;:::-;;:8;:25;;;;;;;;:::i;:::-;;;48860:164;;;48910:6;48905:108;48926:5;:12;48922:1;:16;48905:108;;;48993:4;48964:16;:26;48981:5;48987:1;48981:8;;;;;;;;:::i;:::-;;;;;;;;48964:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;48940:3;;;;;:::i;:::-;;;;48905:108;;;;48860:164;48681:343;48492:532;48264:767:::0;;:::o;28488:104::-;28544:13;28577:7;28570:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28488:104;:::o;47790:466::-;4511:13;:11;:13::i;:::-;47898:15:::1;47889:24;;;;;;;;:::i;:::-;;:8;:24;;;;;;;;:::i;:::-;;;47881:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;47960:18;47948:30;;;;;;;;:::i;:::-;;:8;:30;;;;;;;;:::i;:::-;;;47945:304;;;48026:5;47995:21;:28;48017:5;47995:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;47945:304;;;48073:13;48061:25;;;;;;;;:::i;:::-;;:8;:25;;;;;;;;:::i;:::-;;;48058:191;;;48129:5;48103:16;:23;48120:5;48103:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;48058:191;;;48176:13;48164:25;;;;;;;;:::i;:::-;;:8;:25;;;;;;;;:::i;:::-;;;48161:88;;;48232:5;48206:16;:23;48223:5;48206:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;48161:88;48058:191;47945:304;47790:466:::0;;:::o;43669:24::-;;;;:::o;44893:989::-;44943:13;44959:10;44943:26;;45002:1;44988:11;:15;44980:24;;;;;;45038:1;45023:11;:16;;45015:25;;;;;;45088:5;45059:34;;:20;:27;45080:5;45059:27;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;45051:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;45138:12;45171:21;:28;45193:5;45171:28;;;;;;;;;;;;;;;;;;;;;;;;;45167:673;;;45247:15;;45228:16;;:34;;;;:::i;:::-;45218:44;;45295:10;;45285:7;:20;45277:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45167:673;;;45366:16;:23;45383:5;45366:23;;;;;;;;;;;;;;;;;;;;;;;;;45362:478;;;45432:10;;45418:11;;:24;;;;:::i;:::-;45408:34;;45475:10;;45465:7;:20;45457:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45362:478;;;45536:16;:23;45553:5;45536:23;;;;;;;;;;;;;;;;;;;;;;;;;45532:308;;;45602:10;;45588:11;;:24;;;;:::i;:::-;45578:34;;45645:12;;45635:7;:22;45627:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;45532:308;;;45745:12;;45729:13;;:28;;;;:::i;:::-;45719:38;;45790:9;;45780:7;:19;45772:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;45532:308;45362:478;45167:673;45850:24;45859:5;45866:7;45850:8;:24::i;:::-;44932:950;;44893:989;:::o;49039:492::-;49119:4;49153:15;49144:24;;;;;;;;:::i;:::-;;:8;:24;;;;;;;;:::i;:::-;;;49136:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;49215:18;49203:30;;;;;;;;:::i;:::-;;:8;:30;;;;;;;;:::i;:::-;;;49200:301;;;49257:21;:28;49279:5;49257:28;;;;;;;;;;;;;;;;;;;;;;;;;49250:35;;;;49200:301;49327:13;49315:25;;;;;;;;:::i;:::-;;:8;:25;;;;;;;;:::i;:::-;;;49312:189;;;49364:16;:23;49381:5;49364:23;;;;;;;;;;;;;;;;;;;;;;;;;49357:30;;;;49312:189;49429:13;49417:25;;;;;;;;:::i;:::-;;:8;:25;;;;;;;;:::i;:::-;;;49414:87;;;49466:16;:23;49483:5;49466:23;;;;;;;;;;;;;;;;;;;;;;;;;49459:30;;;;49414:87;49518:5;49511:12;;49039:492;;;;;:::o;30075:155::-;30170:52;30189:12;:10;:12::i;:::-;30203:8;30213;30170:18;:52::i;:::-;30075:155;;:::o;31195:323::-;31369:41;31388:12;:10;:12::i;:::-;31402:7;31369:18;:41::i;:::-;31361:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;31472:38;31486:4;31492:2;31496:7;31505:4;31472:13;:38::i;:::-;31195:323;;;;:::o;47644:136::-;47685:7;47759:13;;47745:11;;47731;;47712:16;;:30;;;;:::i;:::-;:44;;;;:::i;:::-;:60;;;;:::i;:::-;47705:67;;47644:136;:::o;43730:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50083:408::-;50210:13;50290:28;50321:10;:8;:10::i;:::-;50290:41;;50380:1;50355:14;50349:28;:32;:134;;;;;;;;;;;;;;;;;50418:14;50434:18;:7;:16;:18::i;:::-;50454:13;50401:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50349:134;50342:141;;;50083:408;;;:::o;46808:338::-;46859:13;46889:21;:25;46911:2;46889:25;;;;;;;;;;;;;;;;;;;;;;;;;46885:76;;;46931:18;;;;;;;;;;;;;;;;;;;;;46885:76;46975:16;:20;46992:2;46975:20;;;;;;;;;;;;;;;;;;;;;;;;;46971:66;;;47012:13;;;;;;;;;;;;;;;;;;;;;46971:66;47051:16;:20;47068:2;47051:20;;;;;;;;;;;;;;;;;;;;;;;;;47047:66;;;47088:13;;;;;;;;;;;;;;;;;;;;;47047:66;47123:15;;;;;;;;;;;;;;;;;;;46808:338;;;;:::o;44138:31::-;;;;:::o;45890:105::-;4511:13;:11;:13::i;:::-;45966:21:::1;45975:2;45979:7;45966:8;:21::i;:::-;45890:105:::0;;:::o;30301:164::-;30398:4;30422:18;:25;30441:5;30422:25;;;;;;;;;;;;;;;:35;30448:8;30422:35;;;;;;;;;;;;;;;;;;;;;;;;;30415:42;;30301:164;;;;:::o;5531:201::-;4511:13;:11;:13::i;:::-;5640:1:::1;5620:22;;:8;:22;;;;5612:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;20134:157::-;20219:4;20258:25;20243:40;;;:11;:40;;;;20236:47;;20134:157;;;:::o;37807:135::-;37889:16;37897:7;37889;:16::i;:::-;37881:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37807:135;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;37086:174::-;37188:2;37161:15;:24;37177:7;37161:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37244:7;37240:2;37206:46;;37215:23;37230:7;37215:14;:23::i;:::-;37206:46;;;;;;;;;;;;37086:174;;:::o;33319:264::-;33412:4;33429:13;33445:23;33460:7;33445:14;:23::i;:::-;33429:39;;33498:5;33487:16;;:7;:16;;;:52;;;;33507:32;33524:5;33531:7;33507:16;:32::i;:::-;33487:52;:87;;;;33567:7;33543:31;;:20;33555:7;33543:11;:20::i;:::-;:31;;;33487:87;33479:96;;;33319:264;;;;:::o;36342:625::-;36501:4;36474:31;;:23;36489:7;36474:14;:23::i;:::-;:31;;;36466:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36580:1;36566:16;;:2;:16;;;;36558:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36636:39;36657:4;36663:2;36667:7;36636:20;:39::i;:::-;36740:29;36757:1;36761:7;36740:8;:29::i;:::-;36801:1;36782:9;:15;36792:4;36782:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36830:1;36813:9;:13;36823:2;36813:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36861:2;36842:7;:16;36850:7;36842:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36900:7;36896:2;36881:27;;36890:4;36881:27;;;;;;;;;;;;36921:38;36941:4;36947:2;36951:7;36921:19;:38::i;:::-;36342:625;;;:::o;4790:132::-;4865:12;:10;:12::i;:::-;4854:23;;:7;:5;:7::i;:::-;:23;;;4846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:132::o;8618:120::-;7627:16;:14;:16::i;:::-;8687:5:::1;8677:7;;:15;;;;;;;;;;;;;;;;;;8708:22;8717:12;:10;:12::i;:::-;8708:22;;;;;;:::i;:::-;;;;;;;;8618:120::o:0;49960:115::-;50047:20;50059:7;50047:11;:20::i;:::-;49960:115;:::o;5892:191::-;5966:16;5985:6;;;;;;;;;;;5966:25;;6011:8;6002:6;;:17;;;;;;;;;;;;;;;;;;6066:8;6035:40;;6056:8;6035:40;;;;;;;;;;;;5955:128;5892:191;:::o;8359:118::-;7368:19;:17;:19::i;:::-;8429:4:::1;8419:7;;:14;;;;;;;;;;;;;;;;;;8449:20;8456:12;:10;:12::i;:::-;8449:20;;;;;;:::i;:::-;;;;;;;;8359:118::o:0;46003:797::-;7368:19;:17;:19::i;:::-;46100:1:::1;46091:7;:10;;46090:31;;;;;46116:4;46107:7;:13;46090:31;46082:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46153:22;46163:2;46167:7;46153:9;:22::i;:::-;46213:4;46186:20;:24;46207:2;46186:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;46244:10;;46234:7;:20;46230:297;;;46271:16;;:18;;;;;;;;;:::i;:::-;;;;;;46230:297;;;46330:10;;46320:7;:20;46316:211;;;46357:11;;:13;;;;;;;;;:::i;:::-;;;;;;46316:211;;;46416:12;;46406:7;:22;46402:125;;;46445:11;;:13;;;;;;;;;:::i;:::-;;;;;;46402:125;;;46500:13;;:15;;;;;;;;;:::i;:::-;;;;;;46402:125;46316:211;46230:297;46539:28;46570:10;:8;:10::i;:::-;46539:41;;46591:17;46643:1:::0;46618:14:::1;46612:28;:32;:143;;;;;;;;;;;;;::::0;::::1;;;46686:14;46702:18;:7;:16;:18::i;:::-;46722:13;46669:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46612:143;46591:164;;46766:26;46779:7;46788:3;46766:12;:26::i;:::-;46071:729;;46003:797:::0;;:::o;37403:315::-;37558:8;37549:17;;:5;:17;;;;37541:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37645:8;37607:18;:25;37626:5;37607:25;;;;;;;;;;;;;;;:35;37633:8;37607:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37691:8;37669:41;;37684:5;37669:41;;;37701:8;37669:41;;;;;;:::i;:::-;;;;;;;;37403:315;;;:::o;32399:313::-;32555:28;32565:4;32571:2;32575:7;32555:9;:28::i;:::-;32602:47;32625:4;32631:2;32635:7;32644:4;32602:22;:47::i;:::-;32594:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32399:313;;;;:::o;44625:108::-;44685:13;44718:7;44711:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44625:108;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;33025:127::-;33090:4;33142:1;33114:30;;:7;:16;33122:7;33114:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33107:37;;33025:127;;;:::o;49681:201::-;7368:19;:17;:19::i;:::-;49829:45:::1;49856:4;49862:2;49866:7;49829:26;:45::i;:::-;49681:201:::0;;;:::o;40442:125::-;;;;:::o;8107:108::-;8174:8;:6;:8::i;:::-;8166:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;8107:108::o;43110:206::-;43179:20;43191:7;43179:11;:20::i;:::-;43253:1;43222:10;:19;43233:7;43222:19;;;;;;;;;;;43216:33;;;;;:::i;:::-;;;:38;43212:97;;43278:10;:19;43289:7;43278:19;;;;;;;;;;;;43271:26;;;;:::i;:::-;43212:97;43110:206;:::o;7922:108::-;7993:8;:6;:8::i;:::-;7992:9;7984:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7922:108::o;33925:110::-;34001:26;34011:2;34015:7;34001:26;;;;;;;;;;;;:9;:26::i;:::-;33925:110;;:::o;42668:217::-;42768:16;42776:7;42768;:16::i;:::-;42760:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42868:9;42846:10;:19;42857:7;42846:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;42668:217;;:::o;38506:853::-;38660:4;38681:15;:2;:13;;;:15::i;:::-;38677:675;;;38733:2;38717:36;;;38754:12;:10;:12::i;:::-;38768:4;38774:7;38783:4;38717:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38713:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38975:1;38958:6;:13;:18;38954:328;;;39001:60;;;;;;;;;;:::i;:::-;;;;;;;;38954:328;39232:6;39226:13;39217:6;39213:2;39209:15;39202:38;38713:584;38849:41;;;38839:51;;;:6;:51;;;;38832:58;;;;;38677:675;39336:4;39329:11;;38506:853;;;;;;;:::o;39931:126::-;;;;:::o;35585:420::-;35645:13;35661:23;35676:7;35661:14;:23::i;:::-;35645:39;;35697:48;35718:5;35733:1;35737:7;35697:20;:48::i;:::-;35786:29;35803:1;35807:7;35786:8;:29::i;:::-;35848:1;35828:9;:16;35838:5;35828:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;35867:7;:16;35875:7;35867:16;;;;;;;;;;;;35860:23;;;;;;;;;;;35929:7;35925:1;35901:36;;35910:5;35901:36;;;;;;;;;;;;35950:47;35970:5;35985:1;35989:7;35950:19;:47::i;:::-;35634:371;35585:420;:::o;34262:319::-;34391:18;34397:2;34401:7;34391:5;:18::i;:::-;34442:53;34473:1;34477:2;34481:7;34490:4;34442:22;:53::i;:::-;34420:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;34262:319;;;:::o;9978:326::-;10038:4;10295:1;10273:7;:19;;;:23;10266:30;;9978:326;;;:::o;34917:439::-;35011:1;34997:16;;:2;:16;;;;34989:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35070:16;35078:7;35070;:16::i;:::-;35069:17;35061:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35132:45;35161:1;35165:2;35169:7;35132:20;:45::i;:::-;35207:1;35190:9;:13;35200:2;35190:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35238:2;35219:7;:16;35227:7;35219:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35283:7;35279:2;35258:33;;35275:1;35258:33;;;;;;;;;;;;35304:44;35332:1;35336:2;35340:7;35304:19;:44::i;:::-;34917:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2910:165::-;2969:5;3007:6;2994:20;2985:29;;3023:46;3063:5;3023:46;:::i;:::-;2910:165;;;;:::o;3095:340::-;3151:5;3200:3;3193:4;3185:6;3181:17;3177:27;3167:122;;3208:79;;:::i;:::-;3167:122;3325:6;3312:20;3350:79;3425:3;3417:6;3410:4;3402:6;3398:17;3350:79;:::i;:::-;3341:88;;3157:278;3095:340;;;;:::o;3441:139::-;3487:5;3525:6;3512:20;3503:29;;3541:33;3568:5;3541:33;:::i;:::-;3441:139;;;;:::o;3586:329::-;3645:6;3694:2;3682:9;3673:7;3669:23;3665:32;3662:119;;;3700:79;;:::i;:::-;3662:119;3820:1;3845:53;3890:7;3881:6;3870:9;3866:22;3845:53;:::i;:::-;3835:63;;3791:117;3586:329;;;;:::o;3921:474::-;3989:6;3997;4046:2;4034:9;4025:7;4021:23;4017:32;4014:119;;;4052:79;;:::i;:::-;4014:119;4172:1;4197:53;4242:7;4233:6;4222:9;4218:22;4197:53;:::i;:::-;4187:63;;4143:117;4299:2;4325:53;4370:7;4361:6;4350:9;4346:22;4325:53;:::i;:::-;4315:63;;4270:118;3921:474;;;;;:::o;4401:619::-;4478:6;4486;4494;4543:2;4531:9;4522:7;4518:23;4514:32;4511:119;;;4549:79;;:::i;:::-;4511:119;4669:1;4694:53;4739:7;4730:6;4719:9;4715:22;4694:53;:::i;:::-;4684:63;;4640:117;4796:2;4822:53;4867:7;4858:6;4847:9;4843:22;4822:53;:::i;:::-;4812:63;;4767:118;4924:2;4950:53;4995:7;4986:6;4975:9;4971:22;4950:53;:::i;:::-;4940:63;;4895:118;4401:619;;;;;:::o;5026:943::-;5121:6;5129;5137;5145;5194:3;5182:9;5173:7;5169:23;5165:33;5162:120;;;5201:79;;:::i;:::-;5162:120;5321:1;5346:53;5391:7;5382:6;5371:9;5367:22;5346:53;:::i;:::-;5336:63;;5292:117;5448:2;5474:53;5519:7;5510:6;5499:9;5495:22;5474:53;:::i;:::-;5464:63;;5419:118;5576:2;5602:53;5647:7;5638:6;5627:9;5623:22;5602:53;:::i;:::-;5592:63;;5547:118;5732:2;5721:9;5717:18;5704:32;5763:18;5755:6;5752:30;5749:117;;;5785:79;;:::i;:::-;5749:117;5890:62;5944:7;5935:6;5924:9;5920:22;5890:62;:::i;:::-;5880:72;;5675:287;5026:943;;;;;;;:::o;5975:468::-;6040:6;6048;6097:2;6085:9;6076:7;6072:23;6068:32;6065:119;;;6103:79;;:::i;:::-;6065:119;6223:1;6248:53;6293:7;6284:6;6273:9;6269:22;6248:53;:::i;:::-;6238:63;;6194:117;6350:2;6376:50;6418:7;6409:6;6398:9;6394:22;6376:50;:::i;:::-;6366:60;;6321:115;5975:468;;;;;:::o;6449:474::-;6517:6;6525;6574:2;6562:9;6553:7;6549:23;6545:32;6542:119;;;6580:79;;:::i;:::-;6542:119;6700:1;6725:53;6770:7;6761:6;6750:9;6746:22;6725:53;:::i;:::-;6715:63;;6671:117;6827:2;6853:53;6898:7;6889:6;6878:9;6874:22;6853:53;:::i;:::-;6843:63;;6798:118;6449:474;;;;;:::o;6929:327::-;6987:6;7036:2;7024:9;7015:7;7011:23;7007:32;7004:119;;;7042:79;;:::i;:::-;7004:119;7162:1;7187:52;7231:7;7222:6;7211:9;7207:22;7187:52;:::i;:::-;7177:62;;7133:116;6929:327;;;;:::o;7262:349::-;7331:6;7380:2;7368:9;7359:7;7355:23;7351:32;7348:119;;;7386:79;;:::i;:::-;7348:119;7506:1;7531:63;7586:7;7577:6;7566:9;7562:22;7531:63;:::i;:::-;7521:73;;7477:127;7262:349;;;;:::o;7617:355::-;7689:6;7738:2;7726:9;7717:7;7713:23;7709:32;7706:119;;;7744:79;;:::i;:::-;7706:119;7864:1;7889:66;7947:7;7938:6;7927:9;7923:22;7889:66;:::i;:::-;7879:76;;7835:130;7617:355;;;;:::o;7978:500::-;8059:6;8067;8116:2;8104:9;8095:7;8091:23;8087:32;8084:119;;;8122:79;;:::i;:::-;8084:119;8242:1;8267:66;8325:7;8316:6;8305:9;8301:22;8267:66;:::i;:::-;8257:76;;8213:130;8382:2;8408:53;8453:7;8444:6;8433:9;8429:22;8408:53;:::i;:::-;8398:63;;8353:118;7978:500;;;;;:::o;8484:710::-;8590:6;8598;8647:2;8635:9;8626:7;8622:23;8618:32;8615:119;;;8653:79;;:::i;:::-;8615:119;8773:1;8798:66;8856:7;8847:6;8836:9;8832:22;8798:66;:::i;:::-;8788:76;;8744:130;8941:2;8930:9;8926:18;8913:32;8972:18;8964:6;8961:30;8958:117;;;8994:79;;:::i;:::-;8958:117;9099:78;9169:7;9160:6;9149:9;9145:22;9099:78;:::i;:::-;9089:88;;8884:303;8484:710;;;;;:::o;9200:509::-;9269:6;9318:2;9306:9;9297:7;9293:23;9289:32;9286:119;;;9324:79;;:::i;:::-;9286:119;9472:1;9461:9;9457:17;9444:31;9502:18;9494:6;9491:30;9488:117;;;9524:79;;:::i;:::-;9488:117;9629:63;9684:7;9675:6;9664:9;9660:22;9629:63;:::i;:::-;9619:73;;9415:287;9200:509;;;;:::o;9715:329::-;9774:6;9823:2;9811:9;9802:7;9798:23;9794:32;9791:119;;;9829:79;;:::i;:::-;9791:119;9949:1;9974:53;10019:7;10010:6;9999:9;9995:22;9974:53;:::i;:::-;9964:63;;9920:117;9715:329;;;;:::o;10050:118::-;10137:24;10155:5;10137:24;:::i;:::-;10132:3;10125:37;10050:118;;:::o;10174:109::-;10255:21;10270:5;10255:21;:::i;:::-;10250:3;10243:34;10174:109;;:::o;10289:360::-;10375:3;10403:38;10435:5;10403:38;:::i;:::-;10457:70;10520:6;10515:3;10457:70;:::i;:::-;10450:77;;10536:52;10581:6;10576:3;10569:4;10562:5;10558:16;10536:52;:::i;:::-;10613:29;10635:6;10613:29;:::i;:::-;10608:3;10604:39;10597:46;;10379:270;10289:360;;;;:::o;10655:364::-;10743:3;10771:39;10804:5;10771:39;:::i;:::-;10826:71;10890:6;10885:3;10826:71;:::i;:::-;10819:78;;10906:52;10951:6;10946:3;10939:4;10932:5;10928:16;10906:52;:::i;:::-;10983:29;11005:6;10983:29;:::i;:::-;10978:3;10974:39;10967:46;;10747:272;10655:364;;;;:::o;11025:377::-;11131:3;11159:39;11192:5;11159:39;:::i;:::-;11214:89;11296:6;11291:3;11214:89;:::i;:::-;11207:96;;11312:52;11357:6;11352:3;11345:4;11338:5;11334:16;11312:52;:::i;:::-;11389:6;11384:3;11380:16;11373:23;;11135:267;11025:377;;;;:::o;11432:845::-;11535:3;11572:5;11566:12;11601:36;11627:9;11601:36;:::i;:::-;11653:89;11735:6;11730:3;11653:89;:::i;:::-;11646:96;;11773:1;11762:9;11758:17;11789:1;11784:137;;;;11935:1;11930:341;;;;11751:520;;11784:137;11868:4;11864:9;11853;11849:25;11844:3;11837:38;11904:6;11899:3;11895:16;11888:23;;11784:137;;11930:341;11997:38;12029:5;11997:38;:::i;:::-;12057:1;12071:154;12085:6;12082:1;12079:13;12071:154;;;12159:7;12153:14;12149:1;12144:3;12140:11;12133:35;12209:1;12200:7;12196:15;12185:26;;12107:4;12104:1;12100:12;12095:17;;12071:154;;;12254:6;12249:3;12245:16;12238:23;;11937:334;;11751:520;;11539:738;;11432:845;;;;:::o;12283:366::-;12425:3;12446:67;12510:2;12505:3;12446:67;:::i;:::-;12439:74;;12522:93;12611:3;12522:93;:::i;:::-;12640:2;12635:3;12631:12;12624:19;;12283:366;;;:::o;12655:::-;12797:3;12818:67;12882:2;12877:3;12818:67;:::i;:::-;12811:74;;12894:93;12983:3;12894:93;:::i;:::-;13012:2;13007:3;13003:12;12996:19;;12655:366;;;:::o;13027:::-;13169:3;13190:67;13254:2;13249:3;13190:67;:::i;:::-;13183:74;;13266:93;13355:3;13266:93;:::i;:::-;13384:2;13379:3;13375:12;13368:19;;13027:366;;;:::o;13399:::-;13541:3;13562:67;13626:2;13621:3;13562:67;:::i;:::-;13555:74;;13638:93;13727:3;13638:93;:::i;:::-;13756:2;13751:3;13747:12;13740:19;;13399:366;;;:::o;13771:::-;13913:3;13934:67;13998:2;13993:3;13934:67;:::i;:::-;13927:74;;14010:93;14099:3;14010:93;:::i;:::-;14128:2;14123:3;14119:12;14112:19;;13771:366;;;:::o;14143:::-;14285:3;14306:67;14370:2;14365:3;14306:67;:::i;:::-;14299:74;;14382:93;14471:3;14382:93;:::i;:::-;14500:2;14495:3;14491:12;14484:19;;14143:366;;;:::o;14515:::-;14657:3;14678:67;14742:2;14737:3;14678:67;:::i;:::-;14671:74;;14754:93;14843:3;14754:93;:::i;:::-;14872:2;14867:3;14863:12;14856:19;;14515:366;;;:::o;14887:::-;15029:3;15050:67;15114:2;15109:3;15050:67;:::i;:::-;15043:74;;15126:93;15215:3;15126:93;:::i;:::-;15244:2;15239:3;15235:12;15228:19;;14887:366;;;:::o;15259:::-;15401:3;15422:67;15486:2;15481:3;15422:67;:::i;:::-;15415:74;;15498:93;15587:3;15498:93;:::i;:::-;15616:2;15611:3;15607:12;15600:19;;15259:366;;;:::o;15631:::-;15773:3;15794:67;15858:2;15853:3;15794:67;:::i;:::-;15787:74;;15870:93;15959:3;15870:93;:::i;:::-;15988:2;15983:3;15979:12;15972:19;;15631:366;;;:::o;16003:::-;16145:3;16166:67;16230:2;16225:3;16166:67;:::i;:::-;16159:74;;16242:93;16331:3;16242:93;:::i;:::-;16360:2;16355:3;16351:12;16344:19;;16003:366;;;:::o;16375:::-;16517:3;16538:67;16602:2;16597:3;16538:67;:::i;:::-;16531:74;;16614:93;16703:3;16614:93;:::i;:::-;16732:2;16727:3;16723:12;16716:19;;16375:366;;;:::o;16747:::-;16889:3;16910:67;16974:2;16969:3;16910:67;:::i;:::-;16903:74;;16986:93;17075:3;16986:93;:::i;:::-;17104:2;17099:3;17095:12;17088:19;;16747:366;;;:::o;17119:::-;17261:3;17282:67;17346:2;17341:3;17282:67;:::i;:::-;17275:74;;17358:93;17447:3;17358:93;:::i;:::-;17476:2;17471:3;17467:12;17460:19;;17119:366;;;:::o;17491:::-;17633:3;17654:67;17718:2;17713:3;17654:67;:::i;:::-;17647:74;;17730:93;17819:3;17730:93;:::i;:::-;17848:2;17843:3;17839:12;17832:19;;17491:366;;;:::o;17863:::-;18005:3;18026:67;18090:2;18085:3;18026:67;:::i;:::-;18019:74;;18102:93;18191:3;18102:93;:::i;:::-;18220:2;18215:3;18211:12;18204:19;;17863:366;;;:::o;18235:::-;18377:3;18398:67;18462:2;18457:3;18398:67;:::i;:::-;18391:74;;18474:93;18563:3;18474:93;:::i;:::-;18592:2;18587:3;18583:12;18576:19;;18235:366;;;:::o;18607:::-;18749:3;18770:67;18834:2;18829:3;18770:67;:::i;:::-;18763:74;;18846:93;18935:3;18846:93;:::i;:::-;18964:2;18959:3;18955:12;18948:19;;18607:366;;;:::o;18979:::-;19121:3;19142:67;19206:2;19201:3;19142:67;:::i;:::-;19135:74;;19218:93;19307:3;19218:93;:::i;:::-;19336:2;19331:3;19327:12;19320:19;;18979:366;;;:::o;19351:::-;19493:3;19514:67;19578:2;19573:3;19514:67;:::i;:::-;19507:74;;19590:93;19679:3;19590:93;:::i;:::-;19708:2;19703:3;19699:12;19692:19;;19351:366;;;:::o;19723:::-;19865:3;19886:67;19950:2;19945:3;19886:67;:::i;:::-;19879:74;;19962:93;20051:3;19962:93;:::i;:::-;20080:2;20075:3;20071:12;20064:19;;19723:366;;;:::o;20095:398::-;20254:3;20275:83;20356:1;20351:3;20275:83;:::i;:::-;20268:90;;20367:93;20456:3;20367:93;:::i;:::-;20485:1;20480:3;20476:11;20469:18;;20095:398;;;:::o;20499:366::-;20641:3;20662:67;20726:2;20721:3;20662:67;:::i;:::-;20655:74;;20738:93;20827:3;20738:93;:::i;:::-;20856:2;20851:3;20847:12;20840:19;;20499:366;;;:::o;20871:118::-;20958:24;20976:5;20958:24;:::i;:::-;20953:3;20946:37;20871:118;;:::o;20995:589::-;21220:3;21242:95;21333:3;21324:6;21242:95;:::i;:::-;21235:102;;21354:95;21445:3;21436:6;21354:95;:::i;:::-;21347:102;;21466:92;21554:3;21545:6;21466:92;:::i;:::-;21459:99;;21575:3;21568:10;;20995:589;;;;;;:::o;21590:379::-;21774:3;21796:147;21939:3;21796:147;:::i;:::-;21789:154;;21960:3;21953:10;;21590:379;;;:::o;21975:222::-;22068:4;22106:2;22095:9;22091:18;22083:26;;22119:71;22187:1;22176:9;22172:17;22163:6;22119:71;:::i;:::-;21975:222;;;;:::o;22203:640::-;22398:4;22436:3;22425:9;22421:19;22413:27;;22450:71;22518:1;22507:9;22503:17;22494:6;22450:71;:::i;:::-;22531:72;22599:2;22588:9;22584:18;22575:6;22531:72;:::i;:::-;22613;22681:2;22670:9;22666:18;22657:6;22613:72;:::i;:::-;22732:9;22726:4;22722:20;22717:2;22706:9;22702:18;22695:48;22760:76;22831:4;22822:6;22760:76;:::i;:::-;22752:84;;22203:640;;;;;;;:::o;22849:210::-;22936:4;22974:2;22963:9;22959:18;22951:26;;22987:65;23049:1;23038:9;23034:17;23025:6;22987:65;:::i;:::-;22849:210;;;;:::o;23065:313::-;23178:4;23216:2;23205:9;23201:18;23193:26;;23265:9;23259:4;23255:20;23251:1;23240:9;23236:17;23229:47;23293:78;23366:4;23357:6;23293:78;:::i;:::-;23285:86;;23065:313;;;;:::o;23384:419::-;23550:4;23588:2;23577:9;23573:18;23565:26;;23637:9;23631:4;23627:20;23623:1;23612:9;23608:17;23601:47;23665:131;23791:4;23665:131;:::i;:::-;23657:139;;23384:419;;;:::o;23809:::-;23975:4;24013:2;24002:9;23998:18;23990:26;;24062:9;24056:4;24052:20;24048:1;24037:9;24033:17;24026:47;24090:131;24216:4;24090:131;:::i;:::-;24082:139;;23809:419;;;:::o;24234:::-;24400:4;24438:2;24427:9;24423:18;24415:26;;24487:9;24481:4;24477:20;24473:1;24462:9;24458:17;24451:47;24515:131;24641:4;24515:131;:::i;:::-;24507:139;;24234:419;;;:::o;24659:::-;24825:4;24863:2;24852:9;24848:18;24840:26;;24912:9;24906:4;24902:20;24898:1;24887:9;24883:17;24876:47;24940:131;25066:4;24940:131;:::i;:::-;24932:139;;24659:419;;;:::o;25084:::-;25250:4;25288:2;25277:9;25273:18;25265:26;;25337:9;25331:4;25327:20;25323:1;25312:9;25308:17;25301:47;25365:131;25491:4;25365:131;:::i;:::-;25357:139;;25084:419;;;:::o;25509:::-;25675:4;25713:2;25702:9;25698:18;25690:26;;25762:9;25756:4;25752:20;25748:1;25737:9;25733:17;25726:47;25790:131;25916:4;25790:131;:::i;:::-;25782:139;;25509:419;;;:::o;25934:::-;26100:4;26138:2;26127:9;26123:18;26115:26;;26187:9;26181:4;26177:20;26173:1;26162:9;26158:17;26151:47;26215:131;26341:4;26215:131;:::i;:::-;26207:139;;25934:419;;;:::o;26359:::-;26525:4;26563:2;26552:9;26548:18;26540:26;;26612:9;26606:4;26602:20;26598:1;26587:9;26583:17;26576:47;26640:131;26766:4;26640:131;:::i;:::-;26632:139;;26359:419;;;:::o;26784:::-;26950:4;26988:2;26977:9;26973:18;26965:26;;27037:9;27031:4;27027:20;27023:1;27012:9;27008:17;27001:47;27065:131;27191:4;27065:131;:::i;:::-;27057:139;;26784:419;;;:::o;27209:::-;27375:4;27413:2;27402:9;27398:18;27390:26;;27462:9;27456:4;27452:20;27448:1;27437:9;27433:17;27426:47;27490:131;27616:4;27490:131;:::i;:::-;27482:139;;27209:419;;;:::o;27634:::-;27800:4;27838:2;27827:9;27823:18;27815:26;;27887:9;27881:4;27877:20;27873:1;27862:9;27858:17;27851:47;27915:131;28041:4;27915:131;:::i;:::-;27907:139;;27634:419;;;:::o;28059:::-;28225:4;28263:2;28252:9;28248:18;28240:26;;28312:9;28306:4;28302:20;28298:1;28287:9;28283:17;28276:47;28340:131;28466:4;28340:131;:::i;:::-;28332:139;;28059:419;;;:::o;28484:::-;28650:4;28688:2;28677:9;28673:18;28665:26;;28737:9;28731:4;28727:20;28723:1;28712:9;28708:17;28701:47;28765:131;28891:4;28765:131;:::i;:::-;28757:139;;28484:419;;;:::o;28909:::-;29075:4;29113:2;29102:9;29098:18;29090:26;;29162:9;29156:4;29152:20;29148:1;29137:9;29133:17;29126:47;29190:131;29316:4;29190:131;:::i;:::-;29182:139;;28909:419;;;:::o;29334:::-;29500:4;29538:2;29527:9;29523:18;29515:26;;29587:9;29581:4;29577:20;29573:1;29562:9;29558:17;29551:47;29615:131;29741:4;29615:131;:::i;:::-;29607:139;;29334:419;;;:::o;29759:::-;29925:4;29963:2;29952:9;29948:18;29940:26;;30012:9;30006:4;30002:20;29998:1;29987:9;29983:17;29976:47;30040:131;30166:4;30040:131;:::i;:::-;30032:139;;29759:419;;;:::o;30184:::-;30350:4;30388:2;30377:9;30373:18;30365:26;;30437:9;30431:4;30427:20;30423:1;30412:9;30408:17;30401:47;30465:131;30591:4;30465:131;:::i;:::-;30457:139;;30184:419;;;:::o;30609:::-;30775:4;30813:2;30802:9;30798:18;30790:26;;30862:9;30856:4;30852:20;30848:1;30837:9;30833:17;30826:47;30890:131;31016:4;30890:131;:::i;:::-;30882:139;;30609:419;;;:::o;31034:::-;31200:4;31238:2;31227:9;31223:18;31215:26;;31287:9;31281:4;31277:20;31273:1;31262:9;31258:17;31251:47;31315:131;31441:4;31315:131;:::i;:::-;31307:139;;31034:419;;;:::o;31459:::-;31625:4;31663:2;31652:9;31648:18;31640:26;;31712:9;31706:4;31702:20;31698:1;31687:9;31683:17;31676:47;31740:131;31866:4;31740:131;:::i;:::-;31732:139;;31459:419;;;:::o;31884:::-;32050:4;32088:2;32077:9;32073:18;32065:26;;32137:9;32131:4;32127:20;32123:1;32112:9;32108:17;32101:47;32165:131;32291:4;32165:131;:::i;:::-;32157:139;;31884:419;;;:::o;32309:::-;32475:4;32513:2;32502:9;32498:18;32490:26;;32562:9;32556:4;32552:20;32548:1;32537:9;32533:17;32526:47;32590:131;32716:4;32590:131;:::i;:::-;32582:139;;32309:419;;;:::o;32734:222::-;32827:4;32865:2;32854:9;32850:18;32842:26;;32878:71;32946:1;32935:9;32931:17;32922:6;32878:71;:::i;:::-;32734:222;;;;:::o;32962:129::-;32996:6;33023:20;;:::i;:::-;33013:30;;33052:33;33080:4;33072:6;33052:33;:::i;:::-;32962:129;;;:::o;33097:75::-;33130:6;33163:2;33157:9;33147:19;;33097:75;:::o;33178:311::-;33255:4;33345:18;33337:6;33334:30;33331:56;;;33367:18;;:::i;:::-;33331:56;33417:4;33409:6;33405:17;33397:25;;33477:4;33471;33467:15;33459:23;;33178:311;;;:::o;33495:307::-;33556:4;33646:18;33638:6;33635:30;33632:56;;;33668:18;;:::i;:::-;33632:56;33706:29;33728:6;33706:29;:::i;:::-;33698:37;;33790:4;33784;33780:15;33772:23;;33495:307;;;:::o;33808:308::-;33870:4;33960:18;33952:6;33949:30;33946:56;;;33982:18;;:::i;:::-;33946:56;34020:29;34042:6;34020:29;:::i;:::-;34012:37;;34104:4;34098;34094:15;34086:23;;33808:308;;;:::o;34122:141::-;34171:4;34194:3;34186:11;;34217:3;34214:1;34207:14;34251:4;34248:1;34238:18;34230:26;;34122:141;;;:::o;34269:98::-;34320:6;34354:5;34348:12;34338:22;;34269:98;;;:::o;34373:99::-;34425:6;34459:5;34453:12;34443:22;;34373:99;;;:::o;34478:168::-;34561:11;34595:6;34590:3;34583:19;34635:4;34630:3;34626:14;34611:29;;34478:168;;;;:::o;34652:147::-;34753:11;34790:3;34775:18;;34652:147;;;;:::o;34805:169::-;34889:11;34923:6;34918:3;34911:19;34963:4;34958:3;34954:14;34939:29;;34805:169;;;;:::o;34980:148::-;35082:11;35119:3;35104:18;;34980:148;;;;:::o;35134:305::-;35174:3;35193:20;35211:1;35193:20;:::i;:::-;35188:25;;35227:20;35245:1;35227:20;:::i;:::-;35222:25;;35381:1;35313:66;35309:74;35306:1;35303:81;35300:107;;;35387:18;;:::i;:::-;35300:107;35431:1;35428;35424:9;35417:16;;35134:305;;;;:::o;35445:185::-;35485:1;35502:20;35520:1;35502:20;:::i;:::-;35497:25;;35536:20;35554:1;35536:20;:::i;:::-;35531:25;;35575:1;35565:35;;35580:18;;:::i;:::-;35565:35;35622:1;35619;35615:9;35610:14;;35445:185;;;;:::o;35636:191::-;35676:4;35696:20;35714:1;35696:20;:::i;:::-;35691:25;;35730:20;35748:1;35730:20;:::i;:::-;35725:25;;35769:1;35766;35763:8;35760:34;;;35774:18;;:::i;:::-;35760:34;35819:1;35816;35812:9;35804:17;;35636:191;;;;:::o;35833:96::-;35870:7;35899:24;35917:5;35899:24;:::i;:::-;35888:35;;35833:96;;;:::o;35935:90::-;35969:7;36012:5;36005:13;35998:21;35987:32;;35935:90;;;:::o;36031:149::-;36067:7;36107:66;36100:5;36096:78;36085:89;;36031:149;;;:::o;36186:126::-;36223:7;36263:42;36256:5;36252:54;36241:65;;36186:126;;;:::o;36318:77::-;36355:7;36384:5;36373:16;;36318:77;;;:::o;36401:154::-;36485:6;36480:3;36475;36462:30;36547:1;36538:6;36533:3;36529:16;36522:27;36401:154;;;:::o;36561:307::-;36629:1;36639:113;36653:6;36650:1;36647:13;36639:113;;;36738:1;36733:3;36729:11;36723:18;36719:1;36714:3;36710:11;36703:39;36675:2;36672:1;36668:10;36663:15;;36639:113;;;36770:6;36767:1;36764:13;36761:101;;;36850:1;36841:6;36836:3;36832:16;36825:27;36761:101;36610:258;36561:307;;;:::o;36874:320::-;36918:6;36955:1;36949:4;36945:12;36935:22;;37002:1;36996:4;36992:12;37023:18;37013:81;;37079:4;37071:6;37067:17;37057:27;;37013:81;37141:2;37133:6;37130:14;37110:18;37107:38;37104:84;;;37160:18;;:::i;:::-;37104:84;36925:269;36874:320;;;:::o;37200:281::-;37283:27;37305:4;37283:27;:::i;:::-;37275:6;37271:40;37413:6;37401:10;37398:22;37377:18;37365:10;37362:34;37359:62;37356:88;;;37424:18;;:::i;:::-;37356:88;37464:10;37460:2;37453:22;37243:238;37200:281;;:::o;37487:233::-;37526:3;37549:24;37567:5;37549:24;:::i;:::-;37540:33;;37595:66;37588:5;37585:77;37582:103;;;37665:18;;:::i;:::-;37582:103;37712:1;37705:5;37701:13;37694:20;;37487:233;;;:::o;37726:176::-;37758:1;37775:20;37793:1;37775:20;:::i;:::-;37770:25;;37809:20;37827:1;37809:20;:::i;:::-;37804:25;;37848:1;37838:35;;37853:18;;:::i;:::-;37838:35;37894:1;37891;37887:9;37882:14;;37726:176;;;;:::o;37908:180::-;37956:77;37953:1;37946:88;38053:4;38050:1;38043:15;38077:4;38074:1;38067:15;38094:180;38142:77;38139:1;38132:88;38239:4;38236:1;38229:15;38263:4;38260:1;38253:15;38280:180;38328:77;38325:1;38318:88;38425:4;38422:1;38415:15;38449:4;38446:1;38439:15;38466:180;38514:77;38511:1;38504:88;38611:4;38608:1;38601:15;38635:4;38632:1;38625:15;38652:180;38700:77;38697:1;38690:88;38797:4;38794:1;38787:15;38821:4;38818:1;38811:15;38838:180;38886:77;38883:1;38876:88;38983:4;38980:1;38973:15;39007:4;39004:1;38997:15;39024:117;39133:1;39130;39123:12;39147:117;39256:1;39253;39246:12;39270:117;39379:1;39376;39369:12;39393:117;39502:1;39499;39492:12;39516:117;39625:1;39622;39615:12;39639:102;39680:6;39731:2;39727:7;39722:2;39715:5;39711:14;39707:28;39697:38;;39639:102;;;:::o;39747:170::-;39887:22;39883:1;39875:6;39871:14;39864:46;39747:170;:::o;39923:237::-;40063:34;40059:1;40051:6;40047:14;40040:58;40132:20;40127:2;40119:6;40115:15;40108:45;39923:237;:::o;40166:225::-;40306:34;40302:1;40294:6;40290:14;40283:58;40375:8;40370:2;40362:6;40358:15;40351:33;40166:225;:::o;40397:224::-;40537:34;40533:1;40525:6;40521:14;40514:58;40606:7;40601:2;40593:6;40589:15;40582:32;40397:224;:::o;40627:178::-;40767:30;40763:1;40755:6;40751:14;40744:54;40627:178;:::o;40811:223::-;40951:34;40947:1;40939:6;40935:14;40928:58;41020:6;41015:2;41007:6;41003:15;40996:31;40811:223;:::o;41040:175::-;41180:27;41176:1;41168:6;41164:14;41157:51;41040:175;:::o;41221:166::-;41361:18;41357:1;41349:6;41345:14;41338:42;41221:166;:::o;41393:::-;41533:18;41529:1;41521:6;41517:14;41510:42;41393:166;:::o;41565:228::-;41705:34;41701:1;41693:6;41689:14;41682:58;41774:11;41769:2;41761:6;41757:15;41750:36;41565:228;:::o;41799:182::-;41939:34;41935:1;41927:6;41923:14;41916:58;41799:182;:::o;41987:233::-;42127:34;42123:1;42115:6;42111:14;42104:58;42196:16;42191:2;42183:6;42179:15;42172:41;41987:233;:::o;42226:179::-;42366:31;42362:1;42354:6;42350:14;42343:55;42226:179;:::o;42411:172::-;42551:24;42547:1;42539:6;42535:14;42528:48;42411:172;:::o;42589:249::-;42729:34;42725:1;42717:6;42713:14;42706:58;42798:32;42793:2;42785:6;42781:15;42774:57;42589:249;:::o;42844:182::-;42984:34;42980:1;42972:6;42968:14;42961:58;42844:182;:::o;43032:166::-;43172:18;43168:1;43160:6;43156:14;43149:42;43032:166;:::o;43204:174::-;43344:26;43340:1;43332:6;43328:14;43321:50;43204:174;:::o;43384:182::-;43524:34;43520:1;43512:6;43508:14;43501:58;43384:182;:::o;43572:174::-;43712:26;43708:1;43700:6;43696:14;43689:50;43572:174;:::o;43752:220::-;43892:34;43888:1;43880:6;43876:14;43869:58;43961:3;43956:2;43948:6;43944:15;43937:28;43752:220;:::o;43978:114::-;;:::o;44098:233::-;44238:34;44234:1;44226:6;44222:14;44215:58;44307:16;44302:2;44294:6;44290:15;44283:41;44098:233;:::o;44337:122::-;44410:24;44428:5;44410:24;:::i;:::-;44403:5;44400:35;44390:63;;44449:1;44446;44439:12;44390:63;44337:122;:::o;44465:116::-;44535:21;44550:5;44535:21;:::i;:::-;44528:5;44525:32;44515:60;;44571:1;44568;44561:12;44515:60;44465:116;:::o;44587:120::-;44659:23;44676:5;44659:23;:::i;:::-;44652:5;44649:34;44639:62;;44697:1;44694;44687:12;44639:62;44587:120;:::o;44713:112::-;44799:1;44792:5;44789:12;44779:40;;44815:1;44812;44805:12;44779:40;44713:112;:::o;44831:122::-;44904:24;44922:5;44904:24;:::i;:::-;44897:5;44894:35;44884:63;;44943:1;44940;44933:12;44884:63;44831:122;:::o

Swarm Source

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