ETH Price: $2,493.05 (-2.27%)

Token

HighRollers Casino Club (HRCC)
 

Overview

Max Total Supply

452 HRCC

Holders

192

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 HRCC
0xe3dc4fe9d79affab2085da14d414834532f739e4
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:
HRCCNFT

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-10
*/

// Sources flattened with hardhat v2.8.3 https://hardhat.org

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


// 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/token/ERC721/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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


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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

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

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

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


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


// OpenZeppelin Contracts (last updated v4.5.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

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


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


// 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/utils/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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


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


// 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/[email protected]


// OpenZeppelin Contracts (last updated v4.5.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: balance query for the zero address");
        return _balances[owner];
    }

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _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: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @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/[email protected]


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

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

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

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


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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/access/[email protected]
// OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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


pragma solidity >=0.7.0 <0.9.0;

contract HRCCNFT is ERC721Enumerable, Ownable {
    using Strings for uint256;

    string public baseURI;
    uint256 public cost = 0.0988 ether;
    uint256 public maxSupply = 7777;
    uint256 public maxMintAmount = 20;
    bool public paused = true;
    bool public revealed = false;
    string public notRevealedUri;

    mapping(address => bool) claims;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        string memory _initNotRevealedUri
    ) ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);
        setNotRevealedURI(_initNotRevealedUri);
    }

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

    function mintAndBonus(address[] calldata addrs, uint[] calldata amounts) public onlyOwner {
        for (uint i = 0; i< addrs.length; i++) {
            _mintNFTS(addrs[i], amounts[i]);
            claims[addrs[i]] = true;
        }
    }

    // internal
    function _mintNFTS(address _to, uint256 _mintAmount) internal {
        uint256 supply = totalSupply();
        require(supply + _mintAmount <= maxSupply);

        for (uint256 i = 1; i <= _mintAmount; i++) {
            _safeMint(_to, supply + i);
        }
    }


    // public
    function mint(address _to, uint256 _mintAmount) public payable {
        require(!paused);
        require(_mintAmount > 0);
        require(_mintAmount <= maxMintAmount);

        if (msg.sender != owner()) {
            require(msg.value >= cost * _mintAmount);
        }
        _mintNFTS(_to, _mintAmount);
    }

    function claim() public {
        require(!paused);
        require(claims[msg.sender]);
        claims[msg.sender] = false;
        _mintNFTS(msg.sender, 2);
    }

    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i; i < ownerTokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        if (revealed == false) {
            return notRevealedUri;
        }

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

    //only owner
    function reveal() public onlyOwner {
        revealed = true;
    }

    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

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

    function pause(bool _state) public onlyOwner {
        paused = _state;
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintAndBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405267015f021397cf0000600c55611e61600d556014600e556001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055503480156200005e57600080fd5b5060405162004e0e38038062004e0e8339818101604052810190620000849190620005a1565b838381600090805190602001906200009e92919062000354565b508060019080519060200190620000b792919062000354565b505050620000da620000ce6200010660201b60201c565b6200010e60201b60201c565b620000eb82620001d460201b60201c565b620000fc816200027f60201b60201c565b5050505062000777565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001e46200010660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200020a6200032a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000263576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025a90620006f0565b60405180910390fd5b80600b90805190602001906200027b92919062000354565b5050565b6200028f6200010660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002b56200032a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200030e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030590620006f0565b60405180910390fd5b80601090805190602001906200032692919062000354565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003629062000741565b90600052602060002090601f016020900481019282620003865760008555620003d2565b82601f10620003a157805160ff1916838001178555620003d2565b82800160010185558215620003d2579182015b82811115620003d1578251825591602001919060010190620003b4565b5b509050620003e19190620003e5565b5090565b5b8082111562000400576000816000905550600101620003e6565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200046d8262000422565b810181811067ffffffffffffffff821117156200048f576200048e62000433565b5b80604052505050565b6000620004a462000404565b9050620004b2828262000462565b919050565b600067ffffffffffffffff821115620004d557620004d462000433565b5b620004e08262000422565b9050602081019050919050565b60005b838110156200050d578082015181840152602081019050620004f0565b838111156200051d576000848401525b50505050565b60006200053a6200053484620004b7565b62000498565b9050828152602081018484840111156200055957620005586200041d565b5b62000566848285620004ed565b509392505050565b600082601f83011262000586576200058562000418565b5b81516200059884826020860162000523565b91505092915050565b60008060008060808587031215620005be57620005bd6200040e565b5b600085015167ffffffffffffffff811115620005df57620005de62000413565b5b620005ed878288016200056e565b945050602085015167ffffffffffffffff81111562000611576200061062000413565b5b6200061f878288016200056e565b935050604085015167ffffffffffffffff81111562000643576200064262000413565b5b62000651878288016200056e565b925050606085015167ffffffffffffffff81111562000675576200067462000413565b5b62000683878288016200056e565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620006d86020836200068f565b9150620006e582620006a0565b602082019050919050565b600060208201905081810360008301526200070b81620006c9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200075a57607f821691505b6020821081141562000771576200077062000712565b5b50919050565b61468780620007876000396000f3fe60806040526004361061021a5760003560e01c806351830227116101235780638da5cb5b116100ab578063c87b56dd1161006f578063c87b56dd1461078a578063d5abeb01146107c7578063e985e9c5146107f2578063f2c4ce1e1461082f578063f2fde38b146108585761021a565b80638da5cb5b146106cb57806395d89b41146106f6578063a22cb46514610721578063a475b5dd1461074a578063b88d4fde146107615761021a565b8063674e0de6116100f2578063674e0de6146105fa5780636c0360eb1461062357806370a082311461064e578063715018a61461068b5780637f00c7a6146106a25761021a565b8063518302271461053e57806355f804b3146105695780635c975abb146105925780636352211e146105bd5761021a565b806323b872dd116101a657806342842e0e1161017557806342842e0e1461045b578063438b63001461048457806344a0d68a146104c15780634e71d92d146104ea5780634f6ccce7146105015761021a565b806323b872dd146103c25780632f745c59146103eb5780633ccfd60b1461042857806340c10f191461043f5761021a565b8063081c8c44116101ed578063081c8c44146102ed578063095ea7b31461031857806313faede61461034157806318160ddd1461036c578063239c70ae146103975761021a565b806301ffc9a71461021f57806302329a291461025c57806306fdde0314610285578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612feb565b610881565b6040516102539190613033565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e919061307a565b6108fb565b005b34801561029157600080fd5b5061029a610994565b6040516102a79190613140565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190613198565b610a26565b6040516102e49190613206565b60405180910390f35b3480156102f957600080fd5b50610302610aab565b60405161030f9190613140565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a919061324d565b610b39565b005b34801561034d57600080fd5b50610356610c51565b604051610363919061329c565b60405180910390f35b34801561037857600080fd5b50610381610c57565b60405161038e919061329c565b60405180910390f35b3480156103a357600080fd5b506103ac610c64565b6040516103b9919061329c565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e491906132b7565b610c6a565b005b3480156103f757600080fd5b50610412600480360381019061040d919061324d565b610cca565b60405161041f919061329c565b60405180910390f35b34801561043457600080fd5b5061043d610d6f565b005b6104596004803603810190610454919061324d565b610e6b565b005b34801561046757600080fd5b50610482600480360381019061047d91906132b7565b610f04565b005b34801561049057600080fd5b506104ab60048036038101906104a6919061330a565b610f24565b6040516104b891906133f5565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190613198565b610fd2565b005b3480156104f657600080fd5b506104ff611058565b005b34801561050d57600080fd5b5061052860048036038101906105239190613198565b61112d565b604051610535919061329c565b60405180910390f35b34801561054a57600080fd5b5061055361119e565b6040516105609190613033565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b919061354c565b6111b1565b005b34801561059e57600080fd5b506105a7611247565b6040516105b49190613033565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190613198565b61125a565b6040516105f19190613206565b60405180910390f35b34801561060657600080fd5b50610621600480360381019061061c919061364b565b61130c565b005b34801561062f57600080fd5b50610638611479565b6040516106459190613140565b60405180910390f35b34801561065a57600080fd5b506106756004803603810190610670919061330a565b611507565b604051610682919061329c565b60405180910390f35b34801561069757600080fd5b506106a06115bf565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613198565b611647565b005b3480156106d757600080fd5b506106e06116cd565b6040516106ed9190613206565b60405180910390f35b34801561070257600080fd5b5061070b6116f7565b6040516107189190613140565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906136cc565b611789565b005b34801561075657600080fd5b5061075f61179f565b005b34801561076d57600080fd5b50610788600480360381019061078391906137ad565b611838565b005b34801561079657600080fd5b506107b160048036038101906107ac9190613198565b61189a565b6040516107be9190613140565b60405180910390f35b3480156107d357600080fd5b506107dc6119f0565b6040516107e9919061329c565b60405180910390f35b3480156107fe57600080fd5b5061081960048036038101906108149190613830565b6119f6565b6040516108269190613033565b60405180910390f35b34801561083b57600080fd5b506108566004803603810190610851919061354c565b611a8a565b005b34801561086457600080fd5b5061087f600480360381019061087a919061330a565b611b20565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f457506108f382611c18565b5b9050919050565b610903611cfa565b73ffffffffffffffffffffffffffffffffffffffff166109216116cd565b73ffffffffffffffffffffffffffffffffffffffff1614610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e906138bc565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6060600080546109a39061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546109cf9061390b565b8015610a1c5780601f106109f157610100808354040283529160200191610a1c565b820191906000526020600020905b8154815290600101906020018083116109ff57829003601f168201915b5050505050905090565b6000610a3182611d02565b610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a67906139af565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60108054610ab89061390b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae49061390b565b8015610b315780601f10610b0657610100808354040283529160200191610b31565b820191906000526020600020905b815481529060010190602001808311610b1457829003601f168201915b505050505081565b6000610b448261125a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90613a41565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd4611cfa565b73ffffffffffffffffffffffffffffffffffffffff161480610c035750610c0281610bfd611cfa565b6119f6565b5b610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990613ad3565b60405180910390fd5b610c4c8383611d6e565b505050565b600c5481565b6000600880549050905090565b600e5481565b610c7b610c75611cfa565b82611e27565b610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613b65565b60405180910390fd5b610cc5838383611f05565b505050565b6000610cd583611507565b8210610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613bf7565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d77611cfa565b73ffffffffffffffffffffffffffffffffffffffff16610d956116cd565b73ffffffffffffffffffffffffffffffffffffffff1614610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de2906138bc565b60405180910390fd5b6000610df56116cd565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e1890613c48565b60006040518083038185875af1925050503d8060008114610e55576040519150601f19603f3d011682016040523d82523d6000602084013e610e5a565b606091505b5050905080610e6857600080fd5b50565b600f60009054906101000a900460ff1615610e8557600080fd5b60008111610e9257600080fd5b600e54811115610ea157600080fd5b610ea96116cd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ef65780600c54610ee99190613c8c565b341015610ef557600080fd5b5b610f00828261216c565b5050565b610f1f83838360405180602001604052806000815250611838565b505050565b60606000610f3183611507565b905060008167ffffffffffffffff811115610f4f57610f4e613421565b5b604051908082528060200260200182016040528015610f7d5781602001602082028036833780820191505090505b50905060005b82811015610fc757610f958582610cca565b828281518110610fa857610fa7613ce6565b5b6020026020010181815250508080610fbf90613d15565b915050610f83565b508092505050919050565b610fda611cfa565b73ffffffffffffffffffffffffffffffffffffffff16610ff86116cd565b73ffffffffffffffffffffffffffffffffffffffff161461104e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611045906138bc565b60405180910390fd5b80600c8190555050565b600f60009054906101000a900460ff161561107257600080fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110c857600080fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061112b33600261216c565b565b6000611137610c57565b8210611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90613dd0565b60405180910390fd5b6008828154811061118c5761118b613ce6565b5b90600052602060002001549050919050565b600f60019054906101000a900460ff1681565b6111b9611cfa565b73ffffffffffffffffffffffffffffffffffffffff166111d76116cd565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611224906138bc565b60405180910390fd5b80600b9080519060200190611243929190612edc565b5050565b600f60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90613e62565b60405180910390fd5b80915050919050565b611314611cfa565b73ffffffffffffffffffffffffffffffffffffffff166113326116cd565b73ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f906138bc565b60405180910390fd5b60005b84849050811015611472576113e08585838181106113ac576113ab613ce6565b5b90506020020160208101906113c1919061330a565b8484848181106113d4576113d3613ce6565b5b9050602002013561216c565b6001601160008787858181106113f9576113f8613ce6565b5b905060200201602081019061140e919061330a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061146a90613d15565b91505061138b565b5050505050565b600b80546114869061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546114b29061390b565b80156114ff5780601f106114d4576101008083540402835291602001916114ff565b820191906000526020600020905b8154815290600101906020018083116114e257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f90613ef4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115c7611cfa565b73ffffffffffffffffffffffffffffffffffffffff166115e56116cd565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611632906138bc565b60405180910390fd5b61164560006121ce565b565b61164f611cfa565b73ffffffffffffffffffffffffffffffffffffffff1661166d6116cd565b73ffffffffffffffffffffffffffffffffffffffff16146116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba906138bc565b60405180910390fd5b80600e8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117069061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546117329061390b565b801561177f5780601f106117545761010080835404028352916020019161177f565b820191906000526020600020905b81548152906001019060200180831161176257829003601f168201915b5050505050905090565b61179b611794611cfa565b8383612294565b5050565b6117a7611cfa565b73ffffffffffffffffffffffffffffffffffffffff166117c56116cd565b73ffffffffffffffffffffffffffffffffffffffff161461181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906138bc565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550565b611849611843611cfa565b83611e27565b611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f90613b65565b60405180910390fd5b61189484848484612401565b50505050565b60606118a582611d02565b6118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db90613f86565b60405180910390fd5b60001515600f60019054906101000a900460ff1615151415611992576010805461190d9061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546119399061390b565b80156119865780601f1061195b57610100808354040283529160200191611986565b820191906000526020600020905b81548152906001019060200180831161196957829003601f168201915b505050505090506119eb565b600061199c61245d565b905060008151116119bc57604051806020016040528060008152506119e7565b806119c6846124ef565b6040516020016119d7929190613fe2565b6040516020818303038152906040525b9150505b919050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a92611cfa565b73ffffffffffffffffffffffffffffffffffffffff16611ab06116cd565b73ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd906138bc565b60405180910390fd5b8060109080519060200190611b1c929190612edc565b5050565b611b28611cfa565b73ffffffffffffffffffffffffffffffffffffffff16611b466116cd565b73ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b93906138bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0390614078565b60405180910390fd5b611c15816121ce565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ce357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cf35750611cf282612650565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611de18361125a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e3282611d02565b611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e689061410a565b60405180910390fd5b6000611e7c8361125a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eeb57508373ffffffffffffffffffffffffffffffffffffffff16611ed384610a26565b73ffffffffffffffffffffffffffffffffffffffff16145b80611efc5750611efb81856119f6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f258261125a565b73ffffffffffffffffffffffffffffffffffffffff1614611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f729061419c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe29061422e565b60405180910390fd5b611ff68383836126ba565b612001600082611d6e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612051919061424e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120a89190614282565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121678383836127ce565b505050565b6000612176610c57565b9050600d5482826121879190614282565b111561219257600080fd5b6000600190505b8281116121c8576121b58482846121b09190614282565b6127d3565b80806121c090613d15565b915050612199565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614324565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123f49190613033565b60405180910390a3505050565b61240c848484611f05565b612418848484846127f1565b612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e906143b6565b60405180910390fd5b50505050565b6060600b805461246c9061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546124989061390b565b80156124e55780601f106124ba576101008083540402835291602001916124e5565b820191906000526020600020905b8154815290600101906020018083116124c857829003601f168201915b5050505050905090565b60606000821415612537576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061264b565b600082905060005b6000821461256957808061255290613d15565b915050600a826125629190614405565b915061253f565b60008167ffffffffffffffff81111561258557612584613421565b5b6040519080825280601f01601f1916602001820160405280156125b75781602001600182028036833780820191505090505b5090505b60008514612644576001826125d0919061424e565b9150600a856125df9190614436565b60306125eb9190614282565b60f81b81838151811061260157612600613ce6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561263d9190614405565b94506125bb565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126c5838383612979565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612708576127038161297e565b612747565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127465761274583826129c7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561278a5761278581612b34565b6127c9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127c8576127c78282612c05565b5b5b505050565b505050565b6127ed828260405180602001604052806000815250612c84565b5050565b60006128128473ffffffffffffffffffffffffffffffffffffffff16612cdf565b1561296c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261283b611cfa565b8786866040518563ffffffff1660e01b815260040161285d94939291906144bc565b6020604051808303816000875af192505050801561289957506040513d601f19601f82011682018060405250810190612896919061451d565b60015b61291c573d80600081146128c9576040519150601f19603f3d011682016040523d82523d6000602084013e6128ce565b606091505b50600081511415612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b906143b6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612971565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129d484611507565b6129de919061424e565b9050600060076000848152602001908152602001600020549050818114612ac3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b48919061424e565b9050600060096000848152602001908152602001600020549050600060088381548110612b7857612b77613ce6565b5b906000526020600020015490508060088381548110612b9a57612b99613ce6565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612be957612be861454a565b5b6001900381819060005260206000200160009055905550505050565b6000612c1083611507565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b612c8e8383612d02565b612c9b60008484846127f1565b612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd1906143b6565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d69906145c5565b60405180910390fd5b612d7b81611d02565b15612dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db290614631565b60405180910390fd5b612dc7600083836126ba565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e179190614282565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ed8600083836127ce565b5050565b828054612ee89061390b565b90600052602060002090601f016020900481019282612f0a5760008555612f51565b82601f10612f2357805160ff1916838001178555612f51565b82800160010185558215612f51579182015b82811115612f50578251825591602001919060010190612f35565b5b509050612f5e9190612f62565b5090565b5b80821115612f7b576000816000905550600101612f63565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fc881612f93565b8114612fd357600080fd5b50565b600081359050612fe581612fbf565b92915050565b60006020828403121561300157613000612f89565b5b600061300f84828501612fd6565b91505092915050565b60008115159050919050565b61302d81613018565b82525050565b60006020820190506130486000830184613024565b92915050565b61305781613018565b811461306257600080fd5b50565b6000813590506130748161304e565b92915050565b6000602082840312156130905761308f612f89565b5b600061309e84828501613065565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130e15780820151818401526020810190506130c6565b838111156130f0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613112826130a7565b61311c81856130b2565b935061312c8185602086016130c3565b613135816130f6565b840191505092915050565b6000602082019050818103600083015261315a8184613107565b905092915050565b6000819050919050565b61317581613162565b811461318057600080fd5b50565b6000813590506131928161316c565b92915050565b6000602082840312156131ae576131ad612f89565b5b60006131bc84828501613183565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131f0826131c5565b9050919050565b613200816131e5565b82525050565b600060208201905061321b60008301846131f7565b92915050565b61322a816131e5565b811461323557600080fd5b50565b60008135905061324781613221565b92915050565b6000806040838503121561326457613263612f89565b5b600061327285828601613238565b925050602061328385828601613183565b9150509250929050565b61329681613162565b82525050565b60006020820190506132b1600083018461328d565b92915050565b6000806000606084860312156132d0576132cf612f89565b5b60006132de86828701613238565b93505060206132ef86828701613238565b925050604061330086828701613183565b9150509250925092565b6000602082840312156133205761331f612f89565b5b600061332e84828501613238565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61336c81613162565b82525050565b600061337e8383613363565b60208301905092915050565b6000602082019050919050565b60006133a282613337565b6133ac8185613342565b93506133b783613353565b8060005b838110156133e85781516133cf8882613372565b97506133da8361338a565b9250506001810190506133bb565b5085935050505092915050565b6000602082019050818103600083015261340f8184613397565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613459826130f6565b810181811067ffffffffffffffff8211171561347857613477613421565b5b80604052505050565b600061348b612f7f565b90506134978282613450565b919050565b600067ffffffffffffffff8211156134b7576134b6613421565b5b6134c0826130f6565b9050602081019050919050565b82818337600083830152505050565b60006134ef6134ea8461349c565b613481565b90508281526020810184848401111561350b5761350a61341c565b5b6135168482856134cd565b509392505050565b600082601f83011261353357613532613417565b5b81356135438482602086016134dc565b91505092915050565b60006020828403121561356257613561612f89565b5b600082013567ffffffffffffffff8111156135805761357f612f8e565b5b61358c8482850161351e565b91505092915050565b600080fd5b600080fd5b60008083601f8401126135b5576135b4613417565b5b8235905067ffffffffffffffff8111156135d2576135d1613595565b5b6020830191508360208202830111156135ee576135ed61359a565b5b9250929050565b60008083601f84011261360b5761360a613417565b5b8235905067ffffffffffffffff81111561362857613627613595565b5b6020830191508360208202830111156136445761364361359a565b5b9250929050565b6000806000806040858703121561366557613664612f89565b5b600085013567ffffffffffffffff81111561368357613682612f8e565b5b61368f8782880161359f565b9450945050602085013567ffffffffffffffff8111156136b2576136b1612f8e565b5b6136be878288016135f5565b925092505092959194509250565b600080604083850312156136e3576136e2612f89565b5b60006136f185828601613238565b925050602061370285828601613065565b9150509250929050565b600067ffffffffffffffff82111561372757613726613421565b5b613730826130f6565b9050602081019050919050565b600061375061374b8461370c565b613481565b90508281526020810184848401111561376c5761376b61341c565b5b6137778482856134cd565b509392505050565b600082601f83011261379457613793613417565b5b81356137a484826020860161373d565b91505092915050565b600080600080608085870312156137c7576137c6612f89565b5b60006137d587828801613238565b94505060206137e687828801613238565b93505060406137f787828801613183565b925050606085013567ffffffffffffffff81111561381857613817612f8e565b5b6138248782880161377f565b91505092959194509250565b6000806040838503121561384757613846612f89565b5b600061385585828601613238565b925050602061386685828601613238565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138a66020836130b2565b91506138b182613870565b602082019050919050565b600060208201905081810360008301526138d581613899565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061392357607f821691505b60208210811415613937576139366138dc565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613999602c836130b2565b91506139a48261393d565b604082019050919050565b600060208201905081810360008301526139c88161398c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a2b6021836130b2565b9150613a36826139cf565b604082019050919050565b60006020820190508181036000830152613a5a81613a1e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613abd6038836130b2565b9150613ac882613a61565b604082019050919050565b60006020820190508181036000830152613aec81613ab0565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b4f6031836130b2565b9150613b5a82613af3565b604082019050919050565b60006020820190508181036000830152613b7e81613b42565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613be1602b836130b2565b9150613bec82613b85565b604082019050919050565b60006020820190508181036000830152613c1081613bd4565b9050919050565b600081905092915050565b50565b6000613c32600083613c17565b9150613c3d82613c22565b600082019050919050565b6000613c5382613c25565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c9782613162565b9150613ca283613162565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cdb57613cda613c5d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613d2082613162565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d5357613d52613c5d565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613dba602c836130b2565b9150613dc582613d5e565b604082019050919050565b60006020820190508181036000830152613de981613dad565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613e4c6029836130b2565b9150613e5782613df0565b604082019050919050565b60006020820190508181036000830152613e7b81613e3f565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613ede602a836130b2565b9150613ee982613e82565b604082019050919050565b60006020820190508181036000830152613f0d81613ed1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613f70602f836130b2565b9150613f7b82613f14565b604082019050919050565b60006020820190508181036000830152613f9f81613f63565b9050919050565b600081905092915050565b6000613fbc826130a7565b613fc68185613fa6565b9350613fd68185602086016130c3565b80840191505092915050565b6000613fee8285613fb1565b9150613ffa8284613fb1565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140626026836130b2565b915061406d82614006565b604082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140f4602c836130b2565b91506140ff82614098565b604082019050919050565b60006020820190508181036000830152614123816140e7565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006141866025836130b2565b91506141918261412a565b604082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142186024836130b2565b9150614223826141bc565b604082019050919050565b600060208201905081810360008301526142478161420b565b9050919050565b600061425982613162565b915061426483613162565b92508282101561427757614276613c5d565b5b828203905092915050565b600061428d82613162565b915061429883613162565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142cd576142cc613c5d565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061430e6019836130b2565b9150614319826142d8565b602082019050919050565b6000602082019050818103600083015261433d81614301565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006143a06032836130b2565b91506143ab82614344565b604082019050919050565b600060208201905081810360008301526143cf81614393565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061441082613162565b915061441b83613162565b92508261442b5761442a6143d6565b5b828204905092915050565b600061444182613162565b915061444c83613162565b92508261445c5761445b6143d6565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061448e82614467565b6144988185614472565b93506144a88185602086016130c3565b6144b1816130f6565b840191505092915050565b60006080820190506144d160008301876131f7565b6144de60208301866131f7565b6144eb604083018561328d565b81810360608301526144fd8184614483565b905095945050505050565b60008151905061451781612fbf565b92915050565b60006020828403121561453357614532612f89565b5b600061454184828501614508565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006145af6020836130b2565b91506145ba82614579565b602082019050919050565b600060208201905081810360008301526145de816145a2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061461b601c836130b2565b9150614626826145e5565b602082019050919050565b6000602082019050818103600083015261464a8161460e565b905091905056fea264697066735822122094a41a3ff38842deec73af18d672f91ec36c75d9c9ac7ef5548dbf22a8fdf4f264736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001748696768526f6c6c65727320436173696e6f20436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000044852434300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f697066732e696f2f697066732f626166796265696477676a6d76627067616a7576323269616e3667776f7974686576706f65756f75747563753737656533377575777376377a67692f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f697066732e696f2f697066732f516d564842376935793654526e57544c7558445366627168696b62623265536d31714d594c785365416f666472582f31000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061021a5760003560e01c806351830227116101235780638da5cb5b116100ab578063c87b56dd1161006f578063c87b56dd1461078a578063d5abeb01146107c7578063e985e9c5146107f2578063f2c4ce1e1461082f578063f2fde38b146108585761021a565b80638da5cb5b146106cb57806395d89b41146106f6578063a22cb46514610721578063a475b5dd1461074a578063b88d4fde146107615761021a565b8063674e0de6116100f2578063674e0de6146105fa5780636c0360eb1461062357806370a082311461064e578063715018a61461068b5780637f00c7a6146106a25761021a565b8063518302271461053e57806355f804b3146105695780635c975abb146105925780636352211e146105bd5761021a565b806323b872dd116101a657806342842e0e1161017557806342842e0e1461045b578063438b63001461048457806344a0d68a146104c15780634e71d92d146104ea5780634f6ccce7146105015761021a565b806323b872dd146103c25780632f745c59146103eb5780633ccfd60b1461042857806340c10f191461043f5761021a565b8063081c8c44116101ed578063081c8c44146102ed578063095ea7b31461031857806313faede61461034157806318160ddd1461036c578063239c70ae146103975761021a565b806301ffc9a71461021f57806302329a291461025c57806306fdde0314610285578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612feb565b610881565b6040516102539190613033565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e919061307a565b6108fb565b005b34801561029157600080fd5b5061029a610994565b6040516102a79190613140565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190613198565b610a26565b6040516102e49190613206565b60405180910390f35b3480156102f957600080fd5b50610302610aab565b60405161030f9190613140565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a919061324d565b610b39565b005b34801561034d57600080fd5b50610356610c51565b604051610363919061329c565b60405180910390f35b34801561037857600080fd5b50610381610c57565b60405161038e919061329c565b60405180910390f35b3480156103a357600080fd5b506103ac610c64565b6040516103b9919061329c565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e491906132b7565b610c6a565b005b3480156103f757600080fd5b50610412600480360381019061040d919061324d565b610cca565b60405161041f919061329c565b60405180910390f35b34801561043457600080fd5b5061043d610d6f565b005b6104596004803603810190610454919061324d565b610e6b565b005b34801561046757600080fd5b50610482600480360381019061047d91906132b7565b610f04565b005b34801561049057600080fd5b506104ab60048036038101906104a6919061330a565b610f24565b6040516104b891906133f5565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190613198565b610fd2565b005b3480156104f657600080fd5b506104ff611058565b005b34801561050d57600080fd5b5061052860048036038101906105239190613198565b61112d565b604051610535919061329c565b60405180910390f35b34801561054a57600080fd5b5061055361119e565b6040516105609190613033565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b919061354c565b6111b1565b005b34801561059e57600080fd5b506105a7611247565b6040516105b49190613033565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190613198565b61125a565b6040516105f19190613206565b60405180910390f35b34801561060657600080fd5b50610621600480360381019061061c919061364b565b61130c565b005b34801561062f57600080fd5b50610638611479565b6040516106459190613140565b60405180910390f35b34801561065a57600080fd5b506106756004803603810190610670919061330a565b611507565b604051610682919061329c565b60405180910390f35b34801561069757600080fd5b506106a06115bf565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613198565b611647565b005b3480156106d757600080fd5b506106e06116cd565b6040516106ed9190613206565b60405180910390f35b34801561070257600080fd5b5061070b6116f7565b6040516107189190613140565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906136cc565b611789565b005b34801561075657600080fd5b5061075f61179f565b005b34801561076d57600080fd5b50610788600480360381019061078391906137ad565b611838565b005b34801561079657600080fd5b506107b160048036038101906107ac9190613198565b61189a565b6040516107be9190613140565b60405180910390f35b3480156107d357600080fd5b506107dc6119f0565b6040516107e9919061329c565b60405180910390f35b3480156107fe57600080fd5b5061081960048036038101906108149190613830565b6119f6565b6040516108269190613033565b60405180910390f35b34801561083b57600080fd5b506108566004803603810190610851919061354c565b611a8a565b005b34801561086457600080fd5b5061087f600480360381019061087a919061330a565b611b20565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f457506108f382611c18565b5b9050919050565b610903611cfa565b73ffffffffffffffffffffffffffffffffffffffff166109216116cd565b73ffffffffffffffffffffffffffffffffffffffff1614610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e906138bc565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6060600080546109a39061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546109cf9061390b565b8015610a1c5780601f106109f157610100808354040283529160200191610a1c565b820191906000526020600020905b8154815290600101906020018083116109ff57829003601f168201915b5050505050905090565b6000610a3182611d02565b610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a67906139af565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60108054610ab89061390b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae49061390b565b8015610b315780601f10610b0657610100808354040283529160200191610b31565b820191906000526020600020905b815481529060010190602001808311610b1457829003601f168201915b505050505081565b6000610b448261125a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90613a41565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd4611cfa565b73ffffffffffffffffffffffffffffffffffffffff161480610c035750610c0281610bfd611cfa565b6119f6565b5b610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990613ad3565b60405180910390fd5b610c4c8383611d6e565b505050565b600c5481565b6000600880549050905090565b600e5481565b610c7b610c75611cfa565b82611e27565b610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613b65565b60405180910390fd5b610cc5838383611f05565b505050565b6000610cd583611507565b8210610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613bf7565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d77611cfa565b73ffffffffffffffffffffffffffffffffffffffff16610d956116cd565b73ffffffffffffffffffffffffffffffffffffffff1614610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de2906138bc565b60405180910390fd5b6000610df56116cd565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e1890613c48565b60006040518083038185875af1925050503d8060008114610e55576040519150601f19603f3d011682016040523d82523d6000602084013e610e5a565b606091505b5050905080610e6857600080fd5b50565b600f60009054906101000a900460ff1615610e8557600080fd5b60008111610e9257600080fd5b600e54811115610ea157600080fd5b610ea96116cd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ef65780600c54610ee99190613c8c565b341015610ef557600080fd5b5b610f00828261216c565b5050565b610f1f83838360405180602001604052806000815250611838565b505050565b60606000610f3183611507565b905060008167ffffffffffffffff811115610f4f57610f4e613421565b5b604051908082528060200260200182016040528015610f7d5781602001602082028036833780820191505090505b50905060005b82811015610fc757610f958582610cca565b828281518110610fa857610fa7613ce6565b5b6020026020010181815250508080610fbf90613d15565b915050610f83565b508092505050919050565b610fda611cfa565b73ffffffffffffffffffffffffffffffffffffffff16610ff86116cd565b73ffffffffffffffffffffffffffffffffffffffff161461104e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611045906138bc565b60405180910390fd5b80600c8190555050565b600f60009054906101000a900460ff161561107257600080fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110c857600080fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061112b33600261216c565b565b6000611137610c57565b8210611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90613dd0565b60405180910390fd5b6008828154811061118c5761118b613ce6565b5b90600052602060002001549050919050565b600f60019054906101000a900460ff1681565b6111b9611cfa565b73ffffffffffffffffffffffffffffffffffffffff166111d76116cd565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611224906138bc565b60405180910390fd5b80600b9080519060200190611243929190612edc565b5050565b600f60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90613e62565b60405180910390fd5b80915050919050565b611314611cfa565b73ffffffffffffffffffffffffffffffffffffffff166113326116cd565b73ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f906138bc565b60405180910390fd5b60005b84849050811015611472576113e08585838181106113ac576113ab613ce6565b5b90506020020160208101906113c1919061330a565b8484848181106113d4576113d3613ce6565b5b9050602002013561216c565b6001601160008787858181106113f9576113f8613ce6565b5b905060200201602081019061140e919061330a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061146a90613d15565b91505061138b565b5050505050565b600b80546114869061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546114b29061390b565b80156114ff5780601f106114d4576101008083540402835291602001916114ff565b820191906000526020600020905b8154815290600101906020018083116114e257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f90613ef4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115c7611cfa565b73ffffffffffffffffffffffffffffffffffffffff166115e56116cd565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611632906138bc565b60405180910390fd5b61164560006121ce565b565b61164f611cfa565b73ffffffffffffffffffffffffffffffffffffffff1661166d6116cd565b73ffffffffffffffffffffffffffffffffffffffff16146116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba906138bc565b60405180910390fd5b80600e8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117069061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546117329061390b565b801561177f5780601f106117545761010080835404028352916020019161177f565b820191906000526020600020905b81548152906001019060200180831161176257829003601f168201915b5050505050905090565b61179b611794611cfa565b8383612294565b5050565b6117a7611cfa565b73ffffffffffffffffffffffffffffffffffffffff166117c56116cd565b73ffffffffffffffffffffffffffffffffffffffff161461181b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611812906138bc565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550565b611849611843611cfa565b83611e27565b611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f90613b65565b60405180910390fd5b61189484848484612401565b50505050565b60606118a582611d02565b6118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db90613f86565b60405180910390fd5b60001515600f60019054906101000a900460ff1615151415611992576010805461190d9061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546119399061390b565b80156119865780601f1061195b57610100808354040283529160200191611986565b820191906000526020600020905b81548152906001019060200180831161196957829003601f168201915b505050505090506119eb565b600061199c61245d565b905060008151116119bc57604051806020016040528060008152506119e7565b806119c6846124ef565b6040516020016119d7929190613fe2565b6040516020818303038152906040525b9150505b919050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a92611cfa565b73ffffffffffffffffffffffffffffffffffffffff16611ab06116cd565b73ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd906138bc565b60405180910390fd5b8060109080519060200190611b1c929190612edc565b5050565b611b28611cfa565b73ffffffffffffffffffffffffffffffffffffffff16611b466116cd565b73ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b93906138bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0390614078565b60405180910390fd5b611c15816121ce565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ce357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cf35750611cf282612650565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611de18361125a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e3282611d02565b611e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e689061410a565b60405180910390fd5b6000611e7c8361125a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eeb57508373ffffffffffffffffffffffffffffffffffffffff16611ed384610a26565b73ffffffffffffffffffffffffffffffffffffffff16145b80611efc5750611efb81856119f6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f258261125a565b73ffffffffffffffffffffffffffffffffffffffff1614611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f729061419c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe29061422e565b60405180910390fd5b611ff68383836126ba565b612001600082611d6e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612051919061424e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120a89190614282565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121678383836127ce565b505050565b6000612176610c57565b9050600d5482826121879190614282565b111561219257600080fd5b6000600190505b8281116121c8576121b58482846121b09190614282565b6127d3565b80806121c090613d15565b915050612199565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614324565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123f49190613033565b60405180910390a3505050565b61240c848484611f05565b612418848484846127f1565b612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e906143b6565b60405180910390fd5b50505050565b6060600b805461246c9061390b565b80601f01602080910402602001604051908101604052809291908181526020018280546124989061390b565b80156124e55780601f106124ba576101008083540402835291602001916124e5565b820191906000526020600020905b8154815290600101906020018083116124c857829003601f168201915b5050505050905090565b60606000821415612537576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061264b565b600082905060005b6000821461256957808061255290613d15565b915050600a826125629190614405565b915061253f565b60008167ffffffffffffffff81111561258557612584613421565b5b6040519080825280601f01601f1916602001820160405280156125b75781602001600182028036833780820191505090505b5090505b60008514612644576001826125d0919061424e565b9150600a856125df9190614436565b60306125eb9190614282565b60f81b81838151811061260157612600613ce6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561263d9190614405565b94506125bb565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126c5838383612979565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612708576127038161297e565b612747565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127465761274583826129c7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561278a5761278581612b34565b6127c9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127c8576127c78282612c05565b5b5b505050565b505050565b6127ed828260405180602001604052806000815250612c84565b5050565b60006128128473ffffffffffffffffffffffffffffffffffffffff16612cdf565b1561296c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261283b611cfa565b8786866040518563ffffffff1660e01b815260040161285d94939291906144bc565b6020604051808303816000875af192505050801561289957506040513d601f19601f82011682018060405250810190612896919061451d565b60015b61291c573d80600081146128c9576040519150601f19603f3d011682016040523d82523d6000602084013e6128ce565b606091505b50600081511415612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b906143b6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612971565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129d484611507565b6129de919061424e565b9050600060076000848152602001908152602001600020549050818114612ac3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b48919061424e565b9050600060096000848152602001908152602001600020549050600060088381548110612b7857612b77613ce6565b5b906000526020600020015490508060088381548110612b9a57612b99613ce6565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612be957612be861454a565b5b6001900381819060005260206000200160009055905550505050565b6000612c1083611507565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b612c8e8383612d02565b612c9b60008484846127f1565b612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd1906143b6565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d69906145c5565b60405180910390fd5b612d7b81611d02565b15612dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db290614631565b60405180910390fd5b612dc7600083836126ba565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e179190614282565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ed8600083836127ce565b5050565b828054612ee89061390b565b90600052602060002090601f016020900481019282612f0a5760008555612f51565b82601f10612f2357805160ff1916838001178555612f51565b82800160010185558215612f51579182015b82811115612f50578251825591602001919060010190612f35565b5b509050612f5e9190612f62565b5090565b5b80821115612f7b576000816000905550600101612f63565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fc881612f93565b8114612fd357600080fd5b50565b600081359050612fe581612fbf565b92915050565b60006020828403121561300157613000612f89565b5b600061300f84828501612fd6565b91505092915050565b60008115159050919050565b61302d81613018565b82525050565b60006020820190506130486000830184613024565b92915050565b61305781613018565b811461306257600080fd5b50565b6000813590506130748161304e565b92915050565b6000602082840312156130905761308f612f89565b5b600061309e84828501613065565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130e15780820151818401526020810190506130c6565b838111156130f0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613112826130a7565b61311c81856130b2565b935061312c8185602086016130c3565b613135816130f6565b840191505092915050565b6000602082019050818103600083015261315a8184613107565b905092915050565b6000819050919050565b61317581613162565b811461318057600080fd5b50565b6000813590506131928161316c565b92915050565b6000602082840312156131ae576131ad612f89565b5b60006131bc84828501613183565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131f0826131c5565b9050919050565b613200816131e5565b82525050565b600060208201905061321b60008301846131f7565b92915050565b61322a816131e5565b811461323557600080fd5b50565b60008135905061324781613221565b92915050565b6000806040838503121561326457613263612f89565b5b600061327285828601613238565b925050602061328385828601613183565b9150509250929050565b61329681613162565b82525050565b60006020820190506132b1600083018461328d565b92915050565b6000806000606084860312156132d0576132cf612f89565b5b60006132de86828701613238565b93505060206132ef86828701613238565b925050604061330086828701613183565b9150509250925092565b6000602082840312156133205761331f612f89565b5b600061332e84828501613238565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61336c81613162565b82525050565b600061337e8383613363565b60208301905092915050565b6000602082019050919050565b60006133a282613337565b6133ac8185613342565b93506133b783613353565b8060005b838110156133e85781516133cf8882613372565b97506133da8361338a565b9250506001810190506133bb565b5085935050505092915050565b6000602082019050818103600083015261340f8184613397565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613459826130f6565b810181811067ffffffffffffffff8211171561347857613477613421565b5b80604052505050565b600061348b612f7f565b90506134978282613450565b919050565b600067ffffffffffffffff8211156134b7576134b6613421565b5b6134c0826130f6565b9050602081019050919050565b82818337600083830152505050565b60006134ef6134ea8461349c565b613481565b90508281526020810184848401111561350b5761350a61341c565b5b6135168482856134cd565b509392505050565b600082601f83011261353357613532613417565b5b81356135438482602086016134dc565b91505092915050565b60006020828403121561356257613561612f89565b5b600082013567ffffffffffffffff8111156135805761357f612f8e565b5b61358c8482850161351e565b91505092915050565b600080fd5b600080fd5b60008083601f8401126135b5576135b4613417565b5b8235905067ffffffffffffffff8111156135d2576135d1613595565b5b6020830191508360208202830111156135ee576135ed61359a565b5b9250929050565b60008083601f84011261360b5761360a613417565b5b8235905067ffffffffffffffff81111561362857613627613595565b5b6020830191508360208202830111156136445761364361359a565b5b9250929050565b6000806000806040858703121561366557613664612f89565b5b600085013567ffffffffffffffff81111561368357613682612f8e565b5b61368f8782880161359f565b9450945050602085013567ffffffffffffffff8111156136b2576136b1612f8e565b5b6136be878288016135f5565b925092505092959194509250565b600080604083850312156136e3576136e2612f89565b5b60006136f185828601613238565b925050602061370285828601613065565b9150509250929050565b600067ffffffffffffffff82111561372757613726613421565b5b613730826130f6565b9050602081019050919050565b600061375061374b8461370c565b613481565b90508281526020810184848401111561376c5761376b61341c565b5b6137778482856134cd565b509392505050565b600082601f83011261379457613793613417565b5b81356137a484826020860161373d565b91505092915050565b600080600080608085870312156137c7576137c6612f89565b5b60006137d587828801613238565b94505060206137e687828801613238565b93505060406137f787828801613183565b925050606085013567ffffffffffffffff81111561381857613817612f8e565b5b6138248782880161377f565b91505092959194509250565b6000806040838503121561384757613846612f89565b5b600061385585828601613238565b925050602061386685828601613238565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138a66020836130b2565b91506138b182613870565b602082019050919050565b600060208201905081810360008301526138d581613899565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061392357607f821691505b60208210811415613937576139366138dc565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613999602c836130b2565b91506139a48261393d565b604082019050919050565b600060208201905081810360008301526139c88161398c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613a2b6021836130b2565b9150613a36826139cf565b604082019050919050565b60006020820190508181036000830152613a5a81613a1e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613abd6038836130b2565b9150613ac882613a61565b604082019050919050565b60006020820190508181036000830152613aec81613ab0565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b4f6031836130b2565b9150613b5a82613af3565b604082019050919050565b60006020820190508181036000830152613b7e81613b42565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613be1602b836130b2565b9150613bec82613b85565b604082019050919050565b60006020820190508181036000830152613c1081613bd4565b9050919050565b600081905092915050565b50565b6000613c32600083613c17565b9150613c3d82613c22565b600082019050919050565b6000613c5382613c25565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c9782613162565b9150613ca283613162565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cdb57613cda613c5d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613d2082613162565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d5357613d52613c5d565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613dba602c836130b2565b9150613dc582613d5e565b604082019050919050565b60006020820190508181036000830152613de981613dad565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613e4c6029836130b2565b9150613e5782613df0565b604082019050919050565b60006020820190508181036000830152613e7b81613e3f565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613ede602a836130b2565b9150613ee982613e82565b604082019050919050565b60006020820190508181036000830152613f0d81613ed1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613f70602f836130b2565b9150613f7b82613f14565b604082019050919050565b60006020820190508181036000830152613f9f81613f63565b9050919050565b600081905092915050565b6000613fbc826130a7565b613fc68185613fa6565b9350613fd68185602086016130c3565b80840191505092915050565b6000613fee8285613fb1565b9150613ffa8284613fb1565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140626026836130b2565b915061406d82614006565b604082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140f4602c836130b2565b91506140ff82614098565b604082019050919050565b60006020820190508181036000830152614123816140e7565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006141866025836130b2565b91506141918261412a565b604082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142186024836130b2565b9150614223826141bc565b604082019050919050565b600060208201905081810360008301526142478161420b565b9050919050565b600061425982613162565b915061426483613162565b92508282101561427757614276613c5d565b5b828203905092915050565b600061428d82613162565b915061429883613162565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142cd576142cc613c5d565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061430e6019836130b2565b9150614319826142d8565b602082019050919050565b6000602082019050818103600083015261433d81614301565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006143a06032836130b2565b91506143ab82614344565b604082019050919050565b600060208201905081810360008301526143cf81614393565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061441082613162565b915061441b83613162565b92508261442b5761442a6143d6565b5b828204905092915050565b600061444182613162565b915061444c83613162565b92508261445c5761445b6143d6565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061448e82614467565b6144988185614472565b93506144a88185602086016130c3565b6144b1816130f6565b840191505092915050565b60006080820190506144d160008301876131f7565b6144de60208301866131f7565b6144eb604083018561328d565b81810360608301526144fd8184614483565b905095945050505050565b60008151905061451781612fbf565b92915050565b60006020828403121561453357614532612f89565b5b600061454184828501614508565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006145af6020836130b2565b91506145ba82614579565b602082019050919050565b600060208201905081810360008301526145de816145a2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061461b601c836130b2565b9150614626826145e5565b602082019050919050565b6000602082019050818103600083015261464a8161460e565b905091905056fea264697066735822122094a41a3ff38842deec73af18d672f91ec36c75d9c9ac7ef5548dbf22a8fdf4f264736f6c634300080b0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001748696768526f6c6c65727320436173696e6f20436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000044852434300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f697066732e696f2f697066732f626166796265696477676a6d76627067616a7576323269616e3667776f7974686576706f65756f75747563753737656533377575777376377a67692f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f697066732e696f2f697066732f516d564842376935793654526e57544c7558445366627168696b62623265536d31714d594c785365416f666472582f31000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): HighRollers Casino Club
Arg [1] : _symbol (string): HRCC
Arg [2] : _initBaseURI (string): https://ipfs.io/ipfs/bafybeidwgjmvbpgajuv22ian6gwoythevpoeuoutucu77ee37uuwsv7zgi/
Arg [3] : _initNotRevealedUri (string): https://ipfs.io/ipfs/QmVHB7i5y6TRnWTLuXDSfbqhikbb2eSm1qMYLxSeAofdrX/1

-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [5] : 48696768526f6c6c65727320436173696e6f20436c7562000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4852434300000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [9] : 68747470733a2f2f697066732e696f2f697066732f626166796265696477676a
Arg [10] : 6d76627067616a7576323269616e3667776f7974686576706f65756f75747563
Arg [11] : 753737656533377575777376377a67692f000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [13] : 68747470733a2f2f697066732e696f2f697066732f516d564842376935793654
Arg [14] : 526e57544c7558445366627168696b62623265536d31714d594c785365416f66
Arg [15] : 6472582f31000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

45639:3764:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36922:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49166:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22650:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24209:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45940:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23732:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45754:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37562:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45833:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24959:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37230:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49253:147;;;;;;;;;;;;;:::i;:::-;;47000:325;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25369:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47510:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48696:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47333:169;;;;;;;;;;;;;:::i;:::-;;37752:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45905:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49054:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45873:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22344:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46435:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45726:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22074:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44785:103;;;;;;;;;;;;;:::i;:::-;;48790:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44134:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22819:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24502:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48619:69;;;;;;;;;;;;;:::i;:::-;;25625:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47908:685;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45795:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24728:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48920:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45043:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36922:224;37024:4;37063:35;37048:50;;;:11;:50;;;;:90;;;;37102:36;37126:11;37102:23;:36::i;:::-;37048:90;37041:97;;36922:224;;;:::o;49166:79::-;44365:12;:10;:12::i;:::-;44354:23;;:7;:5;:7::i;:::-;:23;;;44346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49231:6:::1;49222;;:15;;;;;;;;;;;;;;;;;;49166:79:::0;:::o;22650:100::-;22704:13;22737:5;22730:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22650:100;:::o;24209:221::-;24285:7;24313:16;24321:7;24313;:16::i;:::-;24305:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24398:15;:24;24414:7;24398:24;;;;;;;;;;;;;;;;;;;;;24391:31;;24209:221;;;:::o;45940:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23732:411::-;23813:13;23829:23;23844:7;23829:14;:23::i;:::-;23813:39;;23877:5;23871:11;;:2;:11;;;;23863:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23971:5;23955:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23980:37;23997:5;24004:12;:10;:12::i;:::-;23980:16;:37::i;:::-;23955:62;23933:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24114:21;24123:2;24127:7;24114:8;:21::i;:::-;23802:341;23732:411;;:::o;45754:34::-;;;;:::o;37562:113::-;37623:7;37650:10;:17;;;;37643:24;;37562:113;:::o;45833:33::-;;;;:::o;24959:339::-;25154:41;25173:12;:10;:12::i;:::-;25187:7;25154:18;:41::i;:::-;25146:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25262:28;25272:4;25278:2;25282:7;25262:9;:28::i;:::-;24959:339;;;:::o;37230:256::-;37327:7;37363:23;37380:5;37363:16;:23::i;:::-;37355:5;:31;37347:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37452:12;:19;37465:5;37452:19;;;;;;;;;;;;;;;:26;37472:5;37452:26;;;;;;;;;;;;37445:33;;37230:256;;;;:::o;49253:147::-;44365:12;:10;:12::i;:::-;44354:23;;:7;:5;:7::i;:::-;:23;;;44346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49302:7:::1;49323;:5;:7::i;:::-;49315:21;;49344;49315:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49301:69;;;49389:2;49381:11;;;::::0;::::1;;49290:110;49253:147::o:0;47000:325::-;47083:6;;;;;;;;;;;47082:7;47074:16;;;;;;47123:1;47109:11;:15;47101:24;;;;;;47159:13;;47144:11;:28;;47136:37;;;;;;47204:7;:5;:7::i;:::-;47190:21;;:10;:21;;;47186:94;;47256:11;47249:4;;:18;;;;:::i;:::-;47236:9;:31;;47228:40;;;;;;47186:94;47290:27;47300:3;47305:11;47290:9;:27::i;:::-;47000:325;;:::o;25369:185::-;25507:39;25524:4;25530:2;25534:7;25507:39;;;;;;;;;;;;:16;:39::i;:::-;25369:185;;;:::o;47510:390::-;47597:16;47631:23;47657:17;47667:6;47657:9;:17::i;:::-;47631:43;;47685:25;47727:15;47713:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47685:58;;47759:9;47754:113;47774:15;47770:1;:19;47754:113;;;47825:30;47845:6;47853:1;47825:19;:30::i;:::-;47811:8;47820:1;47811:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47791:3;;;;;:::i;:::-;;;;47754:113;;;;47884:8;47877:15;;;;47510:390;;;:::o;48696:86::-;44365:12;:10;:12::i;:::-;44354:23;;:7;:5;:7::i;:::-;:23;;;44346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48766:8:::1;48759:4;:15;;;;48696:86:::0;:::o;47333:169::-;47377:6;;;;;;;;;;;47376:7;47368:16;;;;;;47403:6;:18;47410:10;47403:18;;;;;;;;;;;;;;;;;;;;;;;;;47395:27;;;;;;47454:5;47433:6;:18;47440:10;47433:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;47470:24;47480:10;47492:1;47470:9;:24::i;:::-;47333:169::o;37752:233::-;37827:7;37863:30;:28;:30::i;:::-;37855:5;:38;37847:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37960:10;37971:5;37960:17;;;;;;;;:::i;:::-;;;;;;;;;;37953:24;;37752:233;;;:::o;45905:28::-;;;;;;;;;;;;;:::o;49054:104::-;44365:12;:10;:12::i;:::-;44354:23;;:7;:5;:7::i;:::-;:23;;;44346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49139:11:::1;49129:7;:21;;;;;;;;;;;;:::i;:::-;;49054:104:::0;:::o;45873:25::-;;;;;;;;;;;;;:::o;22344:239::-;22416:7;22436:13;22452:7;:16;22460:7;22452:16;;;;;;;;;;;;;;;;;;;;;22436:32;;22504:1;22487:19;;:5;:19;;;;22479:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22570:5;22563:12;;;22344:239;;;:::o;46435:243::-;44365:12;:10;:12::i;:::-;44354:23;;:7;:5;:7::i;:::-;:23;;;44346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46541:6:::1;46536:135;46556:5;;:12;;46553:1;:15;46536:135;;;46590:31;46600:5;;46606:1;46600:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46610:7;;46618:1;46610:10;;;;;;;:::i;:::-;;;;;;;;46590:9;:31::i;:::-;46655:4;46636:6;:16;46643:5;;46649:1;46643:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46636:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;46570:3;;;;;:::i;:::-;;;;46536:135;;;;46435:243:::0;;;;:::o;45726:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22074:208::-;22146:7;22191:1;22174:19;;:5;:19;;;;22166:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22258:9;:16;22268:5;22258:16;;;;;;;;;;;;;;;;22251:23;;22074:208;;;:::o;44785:103::-;44365:12;:10;:12::i;:::-;44354:23;;:7;:5;:7::i;:::-;:23;;;44346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44850:30:::1;44877:1;44850:18;:30::i;:::-;44785:103::o:0;48790:122::-;44365:12;:10;:12::i;:::-;44354:23;;:7;:5;:7::i;:::-;:23;;;44346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48887:17:::1;48871:13;:33;;;;48790:122:::0;:::o;44134:87::-;44180:7;44207:6;;;;;;;;;;;44200:13;;44134:87;:::o;22819:104::-;22875:13;22908:7;22901:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22819:104;:::o;24502:155::-;24597:52;24616:12;:10;:12::i;:::-;24630:8;24640;24597:18;:52::i;:::-;24502:155;;:::o;48619:69::-;44365:12;:10;:12::i;:::-;44354:23;;:7;:5;:7::i;:::-;:23;;;44346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48676:4:::1;48665:8;;:15;;;;;;;;;;;;;;;;;;48619:69::o:0;25625:328::-;25800:41;25819:12;:10;:12::i;:::-;25833:7;25800:18;:41::i;:::-;25792:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25906:39;25920:4;25926:2;25930:7;25939:5;25906:13;:39::i;:::-;25625:328;;;;:::o;47908:685::-;48026:13;48079:16;48087:7;48079;:16::i;:::-;48057:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;48199:5;48187:17;;:8;;;;;;;;;;;:17;;;48183:71;;;48228:14;48221:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48183:71;48266:28;48297:10;:8;:10::i;:::-;48266:41;;48369:1;48344:14;48338:28;:32;:247;;;;;;;;;;;;;;;;;48462:14;48503:18;:7;:16;:18::i;:::-;48419:125;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48338:247;48318:267;;;47908:685;;;;:::o;45795:31::-;;;;:::o;24728:164::-;24825:4;24849:18;:25;24868:5;24849:25;;;;;;;;;;;;;;;:35;24875:8;24849:35;;;;;;;;;;;;;;;;;;;;;;;;;24842:42;;24728:164;;;;:::o;48920:126::-;44365:12;:10;:12::i;:::-;44354:23;;:7;:5;:7::i;:::-;:23;;;44346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49023:15:::1;49006:14;:32;;;;;;;;;;;;:::i;:::-;;48920:126:::0;:::o;45043:201::-;44365:12;:10;:12::i;:::-;44354:23;;:7;:5;:7::i;:::-;:23;;;44346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45152:1:::1;45132:22;;:8;:22;;;;45124:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45208:28;45227:8;45208:18;:28::i;:::-;45043:201:::0;:::o;21705:305::-;21807:4;21859:25;21844:40;;;:11;:40;;;;:105;;;;21916:33;21901:48;;;:11;:48;;;;21844:105;:158;;;;21966:36;21990:11;21966:23;:36::i;:::-;21844:158;21824:178;;21705:305;;;:::o;16911:98::-;16964:7;16991:10;16984:17;;16911:98;:::o;27463:127::-;27528:4;27580:1;27552:30;;:7;:16;27560:7;27552:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27545:37;;27463:127;;;:::o;31609:174::-;31711:2;31684:15;:24;31700:7;31684:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31767:7;31763:2;31729:46;;31738:23;31753:7;31738:14;:23::i;:::-;31729:46;;;;;;;;;;;;31609:174;;:::o;27757:348::-;27850:4;27875:16;27883:7;27875;:16::i;:::-;27867:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27951:13;27967:23;27982:7;27967:14;:23::i;:::-;27951:39;;28020:5;28009:16;;:7;:16;;;:51;;;;28053:7;28029:31;;:20;28041:7;28029:11;:20::i;:::-;:31;;;28009:51;:87;;;;28064:32;28081:5;28088:7;28064:16;:32::i;:::-;28009:87;28001:96;;;27757:348;;;;:::o;30866:625::-;31025:4;30998:31;;:23;31013:7;30998:14;:23::i;:::-;:31;;;30990:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31104:1;31090:16;;:2;:16;;;;31082:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31160:39;31181:4;31187:2;31191:7;31160:20;:39::i;:::-;31264:29;31281:1;31285:7;31264:8;:29::i;:::-;31325:1;31306:9;:15;31316:4;31306:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31354:1;31337:9;:13;31347:2;31337:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31385:2;31366:7;:16;31374:7;31366:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31424:7;31420:2;31405:27;;31414:4;31405:27;;;;;;;;;;;;31445:38;31465:4;31471:2;31475:7;31445:19;:38::i;:::-;30866:625;;;:::o;46703:272::-;46776:14;46793:13;:11;:13::i;:::-;46776:30;;46849:9;;46834:11;46825:6;:20;;;;:::i;:::-;:33;;46817:42;;;;;;46877:9;46889:1;46877:13;;46872:96;46897:11;46892:1;:16;46872:96;;46930:26;46940:3;46954:1;46945:6;:10;;;;:::i;:::-;46930:9;:26::i;:::-;46910:3;;;;;:::i;:::-;;;;46872:96;;;;46765:210;46703:272;;:::o;45404:191::-;45478:16;45497:6;;;;;;;;;;;45478:25;;45523:8;45514:6;;:17;;;;;;;;;;;;;;;;;;45578:8;45547:40;;45568:8;45547:40;;;;;;;;;;;;45467:128;45404:191;:::o;31925:315::-;32080:8;32071:17;;:5;:17;;;;32063:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32167:8;32129:18;:25;32148:5;32129:25;;;;;;;;;;;;;;;:35;32155:8;32129:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32213:8;32191:41;;32206:5;32191:41;;;32223:8;32191:41;;;;;;:::i;:::-;;;;;;;;31925:315;;;:::o;26835:::-;26992:28;27002:4;27008:2;27012:7;26992:9;:28::i;:::-;27039:48;27062:4;27068:2;27072:7;27081:5;27039:22;:48::i;:::-;27031:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26835:315;;;;:::o;46319:108::-;46379:13;46412:7;46405:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46319:108;:::o;17498:723::-;17554:13;17784:1;17775:5;:10;17771:53;;;17802:10;;;;;;;;;;;;;;;;;;;;;17771:53;17834:12;17849:5;17834:20;;17865:14;17890:78;17905:1;17897:4;:9;17890:78;;17923:8;;;;;:::i;:::-;;;;17954:2;17946:10;;;;;:::i;:::-;;;17890:78;;;17978:19;18010:6;18000:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17978:39;;18028:154;18044:1;18035:5;:10;18028:154;;18072:1;18062:11;;;;;:::i;:::-;;;18139:2;18131:5;:10;;;;:::i;:::-;18118:2;:24;;;;:::i;:::-;18105:39;;18088:6;18095;18088:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18168:2;18159:11;;;;;:::i;:::-;;;18028:154;;;18206:6;18192:21;;;;;17498:723;;;;:::o;20128:157::-;20213:4;20252:25;20237:40;;;:11;:40;;;;20230:47;;20128:157;;;:::o;38598:589::-;38742:45;38769:4;38775:2;38779:7;38742:26;:45::i;:::-;38820:1;38804:18;;:4;:18;;;38800:187;;;38839:40;38871:7;38839:31;:40::i;:::-;38800:187;;;38909:2;38901:10;;:4;:10;;;38897:90;;38928:47;38961:4;38967:7;38928:32;:47::i;:::-;38897:90;38800:187;39015:1;39001:16;;:2;:16;;;38997:183;;;39034:45;39071:7;39034:36;:45::i;:::-;38997:183;;;39107:4;39101:10;;:2;:10;;;39097:83;;39128:40;39156:2;39160:7;39128:27;:40::i;:::-;39097:83;38997:183;38598:589;;;:::o;34687:125::-;;;;:::o;28447:110::-;28523:26;28533:2;28537:7;28523:26;;;;;;;;;;;;:9;:26::i;:::-;28447:110;;:::o;32805:799::-;32960:4;32981:15;:2;:13;;;:15::i;:::-;32977:620;;;33033:2;33017:36;;;33054:12;:10;:12::i;:::-;33068:4;33074:7;33083:5;33017:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33013:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33276:1;33259:6;:13;:18;33255:272;;;33302:60;;;;;;;;;;:::i;:::-;;;;;;;;33255:272;33477:6;33471:13;33462:6;33458:2;33454:15;33447:38;33013:529;33150:41;;;33140:51;;;:6;:51;;;;33133:58;;;;;32977:620;33581:4;33574:11;;32805:799;;;;;;;:::o;34176:126::-;;;;:::o;39910:164::-;40014:10;:17;;;;39987:15;:24;40003:7;39987:24;;;;;;;;;;;:44;;;;40042:10;40058:7;40042:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39910:164;:::o;40701:988::-;40967:22;41017:1;40992:22;41009:4;40992:16;:22::i;:::-;:26;;;;:::i;:::-;40967:51;;41029:18;41050:17;:26;41068:7;41050:26;;;;;;;;;;;;41029:47;;41197:14;41183:10;:28;41179:328;;41228:19;41250:12;:18;41263:4;41250:18;;;;;;;;;;;;;;;:34;41269:14;41250:34;;;;;;;;;;;;41228:56;;41334:11;41301:12;:18;41314:4;41301:18;;;;;;;;;;;;;;;:30;41320:10;41301:30;;;;;;;;;;;:44;;;;41451:10;41418:17;:30;41436:11;41418:30;;;;;;;;;;;:43;;;;41213:294;41179:328;41603:17;:26;41621:7;41603:26;;;;;;;;;;;41596:33;;;41647:12;:18;41660:4;41647:18;;;;;;;;;;;;;;;:34;41666:14;41647:34;;;;;;;;;;;41640:41;;;40782:907;;40701:988;;:::o;41984:1079::-;42237:22;42282:1;42262:10;:17;;;;:21;;;;:::i;:::-;42237:46;;42294:18;42315:15;:24;42331:7;42315:24;;;;;;;;;;;;42294:45;;42666:19;42688:10;42699:14;42688:26;;;;;;;;:::i;:::-;;;;;;;;;;42666:48;;42752:11;42727:10;42738;42727:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42863:10;42832:15;:28;42848:11;42832:28;;;;;;;;;;;:41;;;;43004:15;:24;43020:7;43004:24;;;;;;;;;;;42997:31;;;43039:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42055:1008;;;41984:1079;:::o;39488:221::-;39573:14;39590:20;39607:2;39590:16;:20::i;:::-;39573:37;;39648:7;39621:12;:16;39634:2;39621:16;;;;;;;;;;;;;;;:24;39638:6;39621:24;;;;;;;;;;;:34;;;;39695:6;39666:17;:26;39684:7;39666:26;;;;;;;;;;;:35;;;;39562:147;39488:221;;:::o;28784:321::-;28914:18;28920:2;28924:7;28914:5;:18::i;:::-;28965:54;28996:1;29000:2;29004:7;29013:5;28965:22;:54::i;:::-;28943:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28784:321;;;:::o;8954:326::-;9014:4;9271:1;9249:7;:19;;;:23;9242:30;;8954:326;;;:::o;29441:439::-;29535:1;29521:16;;:2;:16;;;;29513:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29594:16;29602:7;29594;:16::i;:::-;29593:17;29585:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29656:45;29685:1;29689:2;29693:7;29656:20;:45::i;:::-;29731:1;29714:9;:13;29724:2;29714:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29762:2;29743:7;:16;29751:7;29743:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29807:7;29803:2;29782:33;;29799:1;29782:33;;;;;;;;;;;;29828:44;29856:1;29860:2;29864:7;29828:19;:44::i;:::-;29441:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:117::-;11583:1;11580;11573:12;11597:117;11706:1;11703;11696:12;11737:568;11810:8;11820:6;11870:3;11863:4;11855:6;11851:17;11847:27;11837:122;;11878:79;;:::i;:::-;11837:122;11991:6;11978:20;11968:30;;12021:18;12013:6;12010:30;12007:117;;;12043:79;;:::i;:::-;12007:117;12157:4;12149:6;12145:17;12133:29;;12211:3;12203:4;12195:6;12191:17;12181:8;12177:32;12174:41;12171:128;;;12218:79;;:::i;:::-;12171:128;11737:568;;;;;:::o;12328:::-;12401:8;12411:6;12461:3;12454:4;12446:6;12442:17;12438:27;12428:122;;12469:79;;:::i;:::-;12428:122;12582:6;12569:20;12559:30;;12612:18;12604:6;12601:30;12598:117;;;12634:79;;:::i;:::-;12598:117;12748:4;12740:6;12736:17;12724:29;;12802:3;12794:4;12786:6;12782:17;12772:8;12768:32;12765:41;12762:128;;;12809:79;;:::i;:::-;12762:128;12328:568;;;;;:::o;12902:934::-;13024:6;13032;13040;13048;13097:2;13085:9;13076:7;13072:23;13068:32;13065:119;;;13103:79;;:::i;:::-;13065:119;13251:1;13240:9;13236:17;13223:31;13281:18;13273:6;13270:30;13267:117;;;13303:79;;:::i;:::-;13267:117;13416:80;13488:7;13479:6;13468:9;13464:22;13416:80;:::i;:::-;13398:98;;;;13194:312;13573:2;13562:9;13558:18;13545:32;13604:18;13596:6;13593:30;13590:117;;;13626:79;;:::i;:::-;13590:117;13739:80;13811:7;13802:6;13791:9;13787:22;13739:80;:::i;:::-;13721:98;;;;13516:313;12902:934;;;;;;;:::o;13842:468::-;13907:6;13915;13964:2;13952:9;13943:7;13939:23;13935:32;13932:119;;;13970:79;;:::i;:::-;13932:119;14090:1;14115:53;14160:7;14151:6;14140:9;14136:22;14115:53;:::i;:::-;14105:63;;14061:117;14217:2;14243:50;14285:7;14276:6;14265:9;14261:22;14243:50;:::i;:::-;14233:60;;14188:115;13842:468;;;;;:::o;14316:307::-;14377:4;14467:18;14459:6;14456:30;14453:56;;;14489:18;;:::i;:::-;14453:56;14527:29;14549:6;14527:29;:::i;:::-;14519:37;;14611:4;14605;14601:15;14593:23;;14316:307;;;:::o;14629:410::-;14706:5;14731:65;14747:48;14788:6;14747:48;:::i;:::-;14731:65;:::i;:::-;14722:74;;14819:6;14812:5;14805:21;14857:4;14850:5;14846:16;14895:3;14886:6;14881:3;14877:16;14874:25;14871:112;;;14902:79;;:::i;:::-;14871:112;14992:41;15026:6;15021:3;15016;14992:41;:::i;:::-;14712:327;14629:410;;;;;:::o;15058:338::-;15113:5;15162:3;15155:4;15147:6;15143:17;15139:27;15129:122;;15170:79;;:::i;:::-;15129:122;15287:6;15274:20;15312:78;15386:3;15378:6;15371:4;15363:6;15359:17;15312:78;:::i;:::-;15303:87;;15119:277;15058:338;;;;:::o;15402:943::-;15497:6;15505;15513;15521;15570:3;15558:9;15549:7;15545:23;15541:33;15538:120;;;15577:79;;:::i;:::-;15538:120;15697:1;15722:53;15767:7;15758:6;15747:9;15743:22;15722:53;:::i;:::-;15712:63;;15668:117;15824:2;15850:53;15895:7;15886:6;15875:9;15871:22;15850:53;:::i;:::-;15840:63;;15795:118;15952:2;15978:53;16023:7;16014:6;16003:9;15999:22;15978:53;:::i;:::-;15968:63;;15923:118;16108:2;16097:9;16093:18;16080:32;16139:18;16131:6;16128:30;16125:117;;;16161:79;;:::i;:::-;16125:117;16266:62;16320:7;16311:6;16300:9;16296:22;16266:62;:::i;:::-;16256:72;;16051:287;15402:943;;;;;;;:::o;16351:474::-;16419:6;16427;16476:2;16464:9;16455:7;16451:23;16447:32;16444:119;;;16482:79;;:::i;:::-;16444:119;16602:1;16627:53;16672:7;16663:6;16652:9;16648:22;16627:53;:::i;:::-;16617:63;;16573:117;16729:2;16755:53;16800:7;16791:6;16780:9;16776:22;16755:53;:::i;:::-;16745:63;;16700:118;16351:474;;;;;:::o;16831:182::-;16971:34;16967:1;16959:6;16955:14;16948:58;16831:182;:::o;17019:366::-;17161:3;17182:67;17246:2;17241:3;17182:67;:::i;:::-;17175:74;;17258:93;17347:3;17258:93;:::i;:::-;17376:2;17371:3;17367:12;17360:19;;17019:366;;;:::o;17391:419::-;17557:4;17595:2;17584:9;17580:18;17572:26;;17644:9;17638:4;17634:20;17630:1;17619:9;17615:17;17608:47;17672:131;17798:4;17672:131;:::i;:::-;17664:139;;17391:419;;;:::o;17816:180::-;17864:77;17861:1;17854:88;17961:4;17958:1;17951:15;17985:4;17982:1;17975:15;18002:320;18046:6;18083:1;18077:4;18073:12;18063:22;;18130:1;18124:4;18120:12;18151:18;18141:81;;18207:4;18199:6;18195:17;18185:27;;18141:81;18269:2;18261:6;18258:14;18238:18;18235:38;18232:84;;;18288:18;;:::i;:::-;18232:84;18053:269;18002:320;;;:::o;18328:231::-;18468:34;18464:1;18456:6;18452:14;18445:58;18537:14;18532:2;18524:6;18520:15;18513:39;18328:231;:::o;18565:366::-;18707:3;18728:67;18792:2;18787:3;18728:67;:::i;:::-;18721:74;;18804:93;18893:3;18804:93;:::i;:::-;18922:2;18917:3;18913:12;18906:19;;18565:366;;;:::o;18937:419::-;19103:4;19141:2;19130:9;19126:18;19118:26;;19190:9;19184:4;19180:20;19176:1;19165:9;19161:17;19154:47;19218:131;19344:4;19218:131;:::i;:::-;19210:139;;18937:419;;;:::o;19362:220::-;19502:34;19498:1;19490:6;19486:14;19479:58;19571:3;19566:2;19558:6;19554:15;19547:28;19362:220;:::o;19588:366::-;19730:3;19751:67;19815:2;19810:3;19751:67;:::i;:::-;19744:74;;19827:93;19916:3;19827:93;:::i;:::-;19945:2;19940:3;19936:12;19929:19;;19588:366;;;:::o;19960:419::-;20126:4;20164:2;20153:9;20149:18;20141:26;;20213:9;20207:4;20203:20;20199:1;20188:9;20184:17;20177:47;20241:131;20367:4;20241:131;:::i;:::-;20233:139;;19960:419;;;:::o;20385:243::-;20525:34;20521:1;20513:6;20509:14;20502:58;20594:26;20589:2;20581:6;20577:15;20570:51;20385:243;:::o;20634:366::-;20776:3;20797:67;20861:2;20856:3;20797:67;:::i;:::-;20790:74;;20873:93;20962:3;20873:93;:::i;:::-;20991:2;20986:3;20982:12;20975:19;;20634:366;;;:::o;21006:419::-;21172:4;21210:2;21199:9;21195:18;21187:26;;21259:9;21253:4;21249:20;21245:1;21234:9;21230:17;21223:47;21287:131;21413:4;21287:131;:::i;:::-;21279:139;;21006:419;;;:::o;21431:236::-;21571:34;21567:1;21559:6;21555:14;21548:58;21640:19;21635:2;21627:6;21623:15;21616:44;21431:236;:::o;21673:366::-;21815:3;21836:67;21900:2;21895:3;21836:67;:::i;:::-;21829:74;;21912:93;22001:3;21912:93;:::i;:::-;22030:2;22025:3;22021:12;22014:19;;21673:366;;;:::o;22045:419::-;22211:4;22249:2;22238:9;22234:18;22226:26;;22298:9;22292:4;22288:20;22284:1;22273:9;22269:17;22262:47;22326:131;22452:4;22326:131;:::i;:::-;22318:139;;22045:419;;;:::o;22470:230::-;22610:34;22606:1;22598:6;22594:14;22587:58;22679:13;22674:2;22666:6;22662:15;22655:38;22470:230;:::o;22706:366::-;22848:3;22869:67;22933:2;22928:3;22869:67;:::i;:::-;22862:74;;22945:93;23034:3;22945:93;:::i;:::-;23063:2;23058:3;23054:12;23047:19;;22706:366;;;:::o;23078:419::-;23244:4;23282:2;23271:9;23267:18;23259:26;;23331:9;23325:4;23321:20;23317:1;23306:9;23302:17;23295:47;23359:131;23485:4;23359:131;:::i;:::-;23351:139;;23078:419;;;:::o;23503:147::-;23604:11;23641:3;23626:18;;23503:147;;;;:::o;23656:114::-;;:::o;23776:398::-;23935:3;23956:83;24037:1;24032:3;23956:83;:::i;:::-;23949:90;;24048:93;24137:3;24048:93;:::i;:::-;24166:1;24161:3;24157:11;24150:18;;23776:398;;;:::o;24180:379::-;24364:3;24386:147;24529:3;24386:147;:::i;:::-;24379:154;;24550:3;24543:10;;24180:379;;;:::o;24565:180::-;24613:77;24610:1;24603:88;24710:4;24707:1;24700:15;24734:4;24731:1;24724:15;24751:348;24791:7;24814:20;24832:1;24814:20;:::i;:::-;24809:25;;24848:20;24866:1;24848:20;:::i;:::-;24843:25;;25036:1;24968:66;24964:74;24961:1;24958:81;24953:1;24946:9;24939:17;24935:105;24932:131;;;25043:18;;:::i;:::-;24932:131;25091:1;25088;25084:9;25073:20;;24751:348;;;;:::o;25105:180::-;25153:77;25150:1;25143:88;25250:4;25247:1;25240:15;25274:4;25271:1;25264:15;25291:233;25330:3;25353:24;25371:5;25353:24;:::i;:::-;25344:33;;25399:66;25392:5;25389:77;25386:103;;;25469:18;;:::i;:::-;25386:103;25516:1;25509:5;25505:13;25498:20;;25291:233;;;:::o;25530:231::-;25670:34;25666:1;25658:6;25654:14;25647:58;25739:14;25734:2;25726:6;25722:15;25715:39;25530:231;:::o;25767:366::-;25909:3;25930:67;25994:2;25989:3;25930:67;:::i;:::-;25923:74;;26006:93;26095:3;26006:93;:::i;:::-;26124:2;26119:3;26115:12;26108:19;;25767:366;;;:::o;26139:419::-;26305:4;26343:2;26332:9;26328:18;26320:26;;26392:9;26386:4;26382:20;26378:1;26367:9;26363:17;26356:47;26420:131;26546:4;26420:131;:::i;:::-;26412:139;;26139:419;;;:::o;26564:228::-;26704:34;26700:1;26692:6;26688:14;26681:58;26773:11;26768:2;26760:6;26756:15;26749:36;26564:228;:::o;26798:366::-;26940:3;26961:67;27025:2;27020:3;26961:67;:::i;:::-;26954:74;;27037:93;27126:3;27037:93;:::i;:::-;27155:2;27150:3;27146:12;27139:19;;26798:366;;;:::o;27170:419::-;27336:4;27374:2;27363:9;27359:18;27351:26;;27423:9;27417:4;27413:20;27409:1;27398:9;27394:17;27387:47;27451:131;27577:4;27451:131;:::i;:::-;27443:139;;27170:419;;;:::o;27595:229::-;27735:34;27731:1;27723:6;27719:14;27712:58;27804:12;27799:2;27791:6;27787:15;27780:37;27595:229;:::o;27830:366::-;27972:3;27993:67;28057:2;28052:3;27993:67;:::i;:::-;27986:74;;28069:93;28158:3;28069:93;:::i;:::-;28187:2;28182:3;28178:12;28171:19;;27830:366;;;:::o;28202:419::-;28368:4;28406:2;28395:9;28391:18;28383:26;;28455:9;28449:4;28445:20;28441:1;28430:9;28426:17;28419:47;28483:131;28609:4;28483:131;:::i;:::-;28475:139;;28202:419;;;:::o;28627:234::-;28767:34;28763:1;28755:6;28751:14;28744:58;28836:17;28831:2;28823:6;28819:15;28812:42;28627:234;:::o;28867:366::-;29009:3;29030:67;29094:2;29089:3;29030:67;:::i;:::-;29023:74;;29106:93;29195:3;29106:93;:::i;:::-;29224:2;29219:3;29215:12;29208:19;;28867:366;;;:::o;29239:419::-;29405:4;29443:2;29432:9;29428:18;29420:26;;29492:9;29486:4;29482:20;29478:1;29467:9;29463:17;29456:47;29520:131;29646:4;29520:131;:::i;:::-;29512:139;;29239:419;;;:::o;29664:148::-;29766:11;29803:3;29788:18;;29664:148;;;;:::o;29818:377::-;29924:3;29952:39;29985:5;29952:39;:::i;:::-;30007:89;30089:6;30084:3;30007:89;:::i;:::-;30000:96;;30105:52;30150:6;30145:3;30138:4;30131:5;30127:16;30105:52;:::i;:::-;30182:6;30177:3;30173:16;30166:23;;29928:267;29818:377;;;;:::o;30201:435::-;30381:3;30403:95;30494:3;30485:6;30403:95;:::i;:::-;30396:102;;30515:95;30606:3;30597:6;30515:95;:::i;:::-;30508:102;;30627:3;30620:10;;30201:435;;;;;:::o;30642:225::-;30782:34;30778:1;30770:6;30766:14;30759:58;30851:8;30846:2;30838:6;30834:15;30827:33;30642:225;:::o;30873:366::-;31015:3;31036:67;31100:2;31095:3;31036:67;:::i;:::-;31029:74;;31112:93;31201:3;31112:93;:::i;:::-;31230:2;31225:3;31221:12;31214:19;;30873:366;;;:::o;31245:419::-;31411:4;31449:2;31438:9;31434:18;31426:26;;31498:9;31492:4;31488:20;31484:1;31473:9;31469:17;31462:47;31526:131;31652:4;31526:131;:::i;:::-;31518:139;;31245:419;;;:::o;31670:231::-;31810:34;31806:1;31798:6;31794:14;31787:58;31879:14;31874:2;31866:6;31862:15;31855:39;31670:231;:::o;31907:366::-;32049:3;32070:67;32134:2;32129:3;32070:67;:::i;:::-;32063:74;;32146:93;32235:3;32146:93;:::i;:::-;32264:2;32259:3;32255:12;32248:19;;31907:366;;;:::o;32279:419::-;32445:4;32483:2;32472:9;32468:18;32460:26;;32532:9;32526:4;32522:20;32518:1;32507:9;32503:17;32496:47;32560:131;32686:4;32560:131;:::i;:::-;32552:139;;32279:419;;;:::o;32704:224::-;32844:34;32840:1;32832:6;32828:14;32821:58;32913:7;32908:2;32900:6;32896:15;32889:32;32704:224;:::o;32934:366::-;33076:3;33097:67;33161:2;33156:3;33097:67;:::i;:::-;33090:74;;33173:93;33262:3;33173:93;:::i;:::-;33291:2;33286:3;33282:12;33275:19;;32934:366;;;:::o;33306:419::-;33472:4;33510:2;33499:9;33495:18;33487:26;;33559:9;33553:4;33549:20;33545:1;33534:9;33530:17;33523:47;33587:131;33713:4;33587:131;:::i;:::-;33579:139;;33306:419;;;:::o;33731:223::-;33871:34;33867:1;33859:6;33855:14;33848:58;33940:6;33935:2;33927:6;33923:15;33916:31;33731:223;:::o;33960:366::-;34102:3;34123:67;34187:2;34182:3;34123:67;:::i;:::-;34116:74;;34199:93;34288:3;34199:93;:::i;:::-;34317:2;34312:3;34308:12;34301:19;;33960:366;;;:::o;34332:419::-;34498:4;34536:2;34525:9;34521:18;34513:26;;34585:9;34579:4;34575:20;34571:1;34560:9;34556:17;34549:47;34613:131;34739:4;34613:131;:::i;:::-;34605:139;;34332:419;;;:::o;34757:191::-;34797:4;34817:20;34835:1;34817:20;:::i;:::-;34812:25;;34851:20;34869:1;34851:20;:::i;:::-;34846:25;;34890:1;34887;34884:8;34881:34;;;34895:18;;:::i;:::-;34881:34;34940:1;34937;34933:9;34925:17;;34757:191;;;;:::o;34954:305::-;34994:3;35013:20;35031:1;35013:20;:::i;:::-;35008:25;;35047:20;35065:1;35047:20;:::i;:::-;35042:25;;35201:1;35133:66;35129:74;35126:1;35123:81;35120:107;;;35207:18;;:::i;:::-;35120:107;35251:1;35248;35244:9;35237:16;;34954:305;;;;:::o;35265:175::-;35405:27;35401:1;35393:6;35389:14;35382:51;35265:175;:::o;35446:366::-;35588:3;35609:67;35673:2;35668:3;35609:67;:::i;:::-;35602:74;;35685:93;35774:3;35685:93;:::i;:::-;35803:2;35798:3;35794:12;35787:19;;35446:366;;;:::o;35818:419::-;35984:4;36022:2;36011:9;36007:18;35999:26;;36071:9;36065:4;36061:20;36057:1;36046:9;36042:17;36035:47;36099:131;36225:4;36099:131;:::i;:::-;36091:139;;35818:419;;;:::o;36243:237::-;36383:34;36379:1;36371:6;36367:14;36360:58;36452:20;36447:2;36439:6;36435:15;36428:45;36243:237;:::o;36486:366::-;36628:3;36649:67;36713:2;36708:3;36649:67;:::i;:::-;36642:74;;36725:93;36814:3;36725:93;:::i;:::-;36843:2;36838:3;36834:12;36827:19;;36486:366;;;:::o;36858:419::-;37024:4;37062:2;37051:9;37047:18;37039:26;;37111:9;37105:4;37101:20;37097:1;37086:9;37082:17;37075:47;37139:131;37265:4;37139:131;:::i;:::-;37131:139;;36858:419;;;:::o;37283:180::-;37331:77;37328:1;37321:88;37428:4;37425:1;37418:15;37452:4;37449:1;37442:15;37469:185;37509:1;37526:20;37544:1;37526:20;:::i;:::-;37521:25;;37560:20;37578:1;37560:20;:::i;:::-;37555:25;;37599:1;37589:35;;37604:18;;:::i;:::-;37589:35;37646:1;37643;37639:9;37634:14;;37469:185;;;;:::o;37660:176::-;37692:1;37709:20;37727:1;37709:20;:::i;:::-;37704:25;;37743:20;37761:1;37743:20;:::i;:::-;37738:25;;37782:1;37772:35;;37787:18;;:::i;:::-;37772:35;37828:1;37825;37821:9;37816:14;;37660:176;;;;:::o;37842:98::-;37893:6;37927:5;37921:12;37911:22;;37842:98;;;:::o;37946:168::-;38029:11;38063:6;38058:3;38051:19;38103:4;38098:3;38094:14;38079:29;;37946:168;;;;:::o;38120:360::-;38206:3;38234:38;38266:5;38234:38;:::i;:::-;38288:70;38351:6;38346:3;38288:70;:::i;:::-;38281:77;;38367:52;38412:6;38407:3;38400:4;38393:5;38389:16;38367:52;:::i;:::-;38444:29;38466:6;38444:29;:::i;:::-;38439:3;38435:39;38428:46;;38210:270;38120:360;;;;:::o;38486:640::-;38681:4;38719:3;38708:9;38704:19;38696:27;;38733:71;38801:1;38790:9;38786:17;38777:6;38733:71;:::i;:::-;38814:72;38882:2;38871:9;38867:18;38858:6;38814:72;:::i;:::-;38896;38964:2;38953:9;38949:18;38940:6;38896:72;:::i;:::-;39015:9;39009:4;39005:20;39000:2;38989:9;38985:18;38978:48;39043:76;39114:4;39105:6;39043:76;:::i;:::-;39035:84;;38486:640;;;;;;;:::o;39132:141::-;39188:5;39219:6;39213:13;39204:22;;39235:32;39261:5;39235:32;:::i;:::-;39132:141;;;;:::o;39279:349::-;39348:6;39397:2;39385:9;39376:7;39372:23;39368:32;39365:119;;;39403:79;;:::i;:::-;39365:119;39523:1;39548:63;39603:7;39594:6;39583:9;39579:22;39548:63;:::i;:::-;39538:73;;39494:127;39279:349;;;;:::o;39634:180::-;39682:77;39679:1;39672:88;39779:4;39776:1;39769:15;39803:4;39800:1;39793:15;39820:182;39960:34;39956:1;39948:6;39944:14;39937:58;39820:182;:::o;40008:366::-;40150:3;40171:67;40235:2;40230:3;40171:67;:::i;:::-;40164:74;;40247:93;40336:3;40247:93;:::i;:::-;40365:2;40360:3;40356:12;40349:19;;40008:366;;;:::o;40380:419::-;40546:4;40584:2;40573:9;40569:18;40561:26;;40633:9;40627:4;40623:20;40619:1;40608:9;40604:17;40597:47;40661:131;40787:4;40661:131;:::i;:::-;40653:139;;40380:419;;;:::o;40805:178::-;40945:30;40941:1;40933:6;40929:14;40922:54;40805:178;:::o;40989:366::-;41131:3;41152:67;41216:2;41211:3;41152:67;:::i;:::-;41145:74;;41228:93;41317:3;41228:93;:::i;:::-;41346:2;41341:3;41337:12;41330:19;;40989:366;;;:::o;41361:419::-;41527:4;41565:2;41554:9;41550:18;41542:26;;41614:9;41608:4;41604:20;41600:1;41589:9;41585:17;41578:47;41642:131;41768:4;41642:131;:::i;:::-;41634:139;;41361:419;;;:::o

Swarm Source

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