Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 294 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 16248914 | 780 days ago | IN | 0 ETH | 0.00137762 | ||||
Set Approval For... | 15806981 | 842 days ago | IN | 0 ETH | 0.00064483 | ||||
Set Approval For... | 15650162 | 864 days ago | IN | 0 ETH | 0.00040458 | ||||
Set Approval For... | 15592549 | 872 days ago | IN | 0 ETH | 0.00059488 | ||||
Set Approval For... | 15563300 | 876 days ago | IN | 0 ETH | 0.00062134 | ||||
Safe Transfer Fr... | 15431594 | 897 days ago | IN | 0 ETH | 0.00195465 | ||||
Set Approval For... | 15399933 | 902 days ago | IN | 0 ETH | 0.00022086 | ||||
Set Approval For... | 15399930 | 902 days ago | IN | 0 ETH | 0.00032826 | ||||
Safe Transfer Fr... | 15393734 | 903 days ago | IN | 0 ETH | 0.00030577 | ||||
Safe Transfer Fr... | 15393734 | 903 days ago | IN | 0 ETH | 0.00030577 | ||||
Safe Transfer Fr... | 15393734 | 903 days ago | IN | 0 ETH | 0.00030577 | ||||
Safe Transfer Fr... | 15393734 | 903 days ago | IN | 0 ETH | 0.00072555 | ||||
Safe Transfer Fr... | 15393419 | 903 days ago | IN | 0 ETH | 0.00086785 | ||||
Mint | 15393405 | 903 days ago | IN | 0 ETH | 0.0015786 | ||||
Safe Transfer Fr... | 15393392 | 903 days ago | IN | 0 ETH | 0.0010508 | ||||
Set Approval For... | 15335215 | 912 days ago | IN | 0 ETH | 0.00050318 | ||||
Set Approval For... | 15312744 | 916 days ago | IN | 0 ETH | 0.00041826 | ||||
Transfer From | 15310311 | 916 days ago | IN | 0 ETH | 0.00113599 | ||||
Transfer From | 15260320 | 924 days ago | IN | 0 ETH | 0.00085026 | ||||
Set Approval For... | 15247872 | 926 days ago | IN | 0 ETH | 0.00031257 | ||||
Transfer From | 15220154 | 930 days ago | IN | 0 ETH | 0.00234085 | ||||
Set Approval For... | 15213957 | 931 days ago | IN | 0 ETH | 0.00088421 | ||||
Transfer From | 15169860 | 938 days ago | IN | 0 ETH | 0.00323895 | ||||
Transfer From | 15169854 | 938 days ago | IN | 0 ETH | 0.00250358 | ||||
Transfer From | 15130605 | 944 days ago | IN | 0 ETH | 0.00218095 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
HoneyzContract
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-22 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Strings.sol // 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/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts 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); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // 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/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts 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/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (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); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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 {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // 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: contracts/HoneyzContract.sol pragma solidity >=0.7.0 <0.9.0; contract HoneyzContract is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI = ""; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.0001 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 5; uint256 public nftPerAddressLimit = 3; bool public paused = false; bool public revealed = false; bool public onlyWhitelisted = true; address[] public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; constructor() ERC721("Honeyz", "HYZ") { setNotRevealedURI("https://changeitwhileuploadingtoserver.com/"); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "user is not whitelisted"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded"); } require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } } function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } 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(), baseExtension)) : ""; } //only owner function reveal(bool _state) public onlyOwner { revealed = _state; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","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":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","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":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600b90805190602001906200002b92919062000386565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200007992919062000386565b50655af3107a4000600e55612710600f55600560105560036011556000601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff021916908315150217905550348015620000f257600080fd5b506040518060400160405280600681526020017f486f6e65797a00000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f48595a000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200017792919062000386565b5080600190805190602001906200019092919062000386565b505050620001b3620001a7620001e360201b60201c565b620001eb60201b60201c565b620001dd6040518060600160405280602b81526020016200552a602b9139620002b160201b60201c565b6200051e565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002c1620001e360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e76200035c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000337906200045d565b60405180910390fd5b80600d90805190602001906200035892919062000386565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003949062000490565b90600052602060002090601f016020900481019282620003b8576000855562000404565b82601f10620003d357805160ff191683800117855562000404565b8280016001018555821562000404579182015b8281111562000403578251825591602001919060010190620003e6565b5b50905062000413919062000417565b5090565b5b808211156200043257600081600090555060010162000418565b5090565b6000620004456020836200047f565b91506200045282620004f5565b602082019050919050565b60006020820190508181036000830152620004788162000436565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004a957607f821691505b60208210811415620004c057620004bf620004c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614ffc806200052e6000396000f3fe6080604052600436106102725760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb011461097b578063da3ef23f146109a6578063e985e9c5146109cf578063edec5f2714610a0c578063f2c4ce1e14610a35578063f2fde38b14610a5e57610272565b8063b88d4fde14610859578063ba4e5c4914610882578063ba7d2c76146108bf578063c6682862146108ea578063c87b56dd14610915578063d0eb26b01461095257610272565b80638da5cb5b116101135780638da5cb5b1461076a578063940cd05b1461079557806395d89b41146107be5780639c70b512146107e9578063a0712d6814610814578063a22cb4651461083057610272565b80636352211e146106855780636c0360eb146106c257806370a08231146106ed578063715018a61461072a5780637f00c7a61461074157610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461056357806344a0d68a146105a05780634f6ccce7146105c9578063518302271461060657806355f804b3146106315780635c975abb1461065a57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461053a57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906139e5565b610a87565b6040516102ab91906140ae565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906139b8565b610b01565b005b3480156102e957600080fd5b506102f2610b9a565b6040516102ff91906140c9565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613a88565b610c2c565b60405161033c9190614025565b60405180910390f35b34801561035157600080fd5b5061035a610cb1565b60405161036791906140c9565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061392b565b610d3f565b005b3480156103a557600080fd5b506103ae610e57565b6040516103bb919061440b565b60405180910390f35b3480156103d057600080fd5b506103d9610e5d565b6040516103e6919061440b565b60405180910390f35b3480156103fb57600080fd5b50610416600480360381019061041191906137a8565b610e6a565b604051610423919061440b565b60405180910390f35b34801561043857600080fd5b50610441610e82565b60405161044e919061440b565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613815565b610e88565b005b34801561048c57600080fd5b506104a760048036038101906104a2919061392b565b610ee8565b6040516104b4919061440b565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906137a8565b610f8d565b6040516104f191906140ae565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c91906139b8565b61103c565b005b34801561052f57600080fd5b506105386110d5565b005b34801561054657600080fd5b50610561600480360381019061055c9190613815565b6111a0565b005b34801561056f57600080fd5b5061058a600480360381019061058591906137a8565b6111c0565b604051610597919061408c565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190613a88565b61126e565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190613a88565b6112f4565b6040516105fd919061440b565b60405180910390f35b34801561061257600080fd5b5061061b611365565b60405161062891906140ae565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190613a3f565b611378565b005b34801561066657600080fd5b5061066f61140e565b60405161067c91906140ae565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a79190613a88565b611421565b6040516106b99190614025565b60405180910390f35b3480156106ce57600080fd5b506106d76114d3565b6040516106e491906140c9565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f91906137a8565b611561565b604051610721919061440b565b60405180910390f35b34801561073657600080fd5b5061073f611619565b005b34801561074d57600080fd5b5061076860048036038101906107639190613a88565b6116a1565b005b34801561077657600080fd5b5061077f611727565b60405161078c9190614025565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906139b8565b611751565b005b3480156107ca57600080fd5b506107d36117ea565b6040516107e091906140c9565b60405180910390f35b3480156107f557600080fd5b506107fe61187c565b60405161080b91906140ae565b60405180910390f35b61082e60048036038101906108299190613a88565b61188f565b005b34801561083c57600080fd5b50610857600480360381019061085291906138eb565b611bd8565b005b34801561086557600080fd5b50610880600480360381019061087b9190613868565b611bee565b005b34801561088e57600080fd5b506108a960048036038101906108a49190613a88565b611c50565b6040516108b69190614025565b60405180910390f35b3480156108cb57600080fd5b506108d4611c8f565b6040516108e1919061440b565b60405180910390f35b3480156108f657600080fd5b506108ff611c95565b60405161090c91906140c9565b60405180910390f35b34801561092157600080fd5b5061093c60048036038101906109379190613a88565b611d23565b60405161094991906140c9565b60405180910390f35b34801561095e57600080fd5b5061097960048036038101906109749190613a88565b611e7c565b005b34801561098757600080fd5b50610990611f02565b60405161099d919061440b565b60405180910390f35b3480156109b257600080fd5b506109cd60048036038101906109c89190613a3f565b611f08565b005b3480156109db57600080fd5b506109f660048036038101906109f191906137d5565b611f9e565b604051610a0391906140ae565b60405180910390f35b348015610a1857600080fd5b50610a336004803603810190610a2e919061396b565b612032565b005b348015610a4157600080fd5b50610a5c6004803603810190610a579190613a3f565b6120d2565b005b348015610a6a57600080fd5b50610a856004803603810190610a8091906137a8565b612168565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610afa5750610af982612260565b5b9050919050565b610b09612342565b73ffffffffffffffffffffffffffffffffffffffff16610b27611727565b73ffffffffffffffffffffffffffffffffffffffff1614610b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b74906142cb565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610ba990614709565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd590614709565b8015610c225780601f10610bf757610100808354040283529160200191610c22565b820191906000526020600020905b815481529060010190602001808311610c0557829003601f168201915b5050505050905090565b6000610c378261234a565b610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d906142ab565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610cbe90614709565b80601f0160208091040260200160405190810160405280929190818152602001828054610cea90614709565b8015610d375780601f10610d0c57610100808354040283529160200191610d37565b820191906000526020600020905b815481529060010190602001808311610d1a57829003601f168201915b505050505081565b6000610d4a82611421565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db29061434b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dda612342565b73ffffffffffffffffffffffffffffffffffffffff161480610e095750610e0881610e03612342565b611f9e565b5b610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f906141eb565b60405180910390fd5b610e5283836123b6565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610e99610e93612342565b8261246f565b610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf9061438b565b60405180910390fd5b610ee383838361254d565b505050565b6000610ef383611561565b8210610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b906140eb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015611031578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610fcd57610fcc6148a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561101e576001915050611037565b80806110299061476c565b915050610f95565b50600090505b919050565b611044612342565b73ffffffffffffffffffffffffffffffffffffffff16611062611727565b73ffffffffffffffffffffffffffffffffffffffff16146110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af906142cb565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6110dd612342565b73ffffffffffffffffffffffffffffffffffffffff166110fb611727565b73ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611148906142cb565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561119c573d6000803e3d6000fd5b5050565b6111bb83838360405180602001604052806000815250611bee565b505050565b606060006111cd83611561565b905060008167ffffffffffffffff8111156111eb576111ea6148d1565b5b6040519080825280602002602001820160405280156112195781602001602082028036833780820191505090505b50905060005b82811015611263576112318582610ee8565b828281518110611244576112436148a2565b5b602002602001018181525050808061125b9061476c565b91505061121f565b508092505050919050565b611276612342565b73ffffffffffffffffffffffffffffffffffffffff16611294611727565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906142cb565b60405180910390fd5b80600e8190555050565b60006112fe610e5d565b821061133f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611336906143ab565b60405180910390fd5b60088281548110611353576113526148a2565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b611380612342565b73ffffffffffffffffffffffffffffffffffffffff1661139e611727565b73ffffffffffffffffffffffffffffffffffffffff16146113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb906142cb565b60405180910390fd5b80600b908051906020019061140a9291906134a5565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c19061422b565b60405180910390fd5b80915050919050565b600b80546114e090614709565b80601f016020809104026020016040519081016040528092919081815260200182805461150c90614709565b80156115595780601f1061152e57610100808354040283529160200191611559565b820191906000526020600020905b81548152906001019060200180831161153c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c99061420b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611621612342565b73ffffffffffffffffffffffffffffffffffffffff1661163f611727565b73ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c906142cb565b60405180910390fd5b61169f60006127a9565b565b6116a9612342565b73ffffffffffffffffffffffffffffffffffffffff166116c7611727565b73ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611714906142cb565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611759612342565b73ffffffffffffffffffffffffffffffffffffffff16611777611727565b73ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c4906142cb565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6060600180546117f990614709565b80601f016020809104026020016040519081016040528092919081815260200182805461182590614709565b80156118725780601f1061184757610100808354040283529160200191611872565b820191906000526020600020905b81548152906001019060200180831161185557829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff16156118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d6906142eb565b60405180910390fd5b60006118e9610e5d565b90506000821161192e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611925906143eb565b60405180910390fd5b601054821115611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a9061426b565b60405180910390fd5b600f548282611982919061453e565b11156119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba9061424b565b60405180910390fd5b6119cb611727565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b485760011515601260029054906101000a900460ff1615151415611af757611a2233610f8d565b611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a58906143cb565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548382611ab4919061453e565b1115611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec9061416b565b60405180910390fd5b505b81600e54611b0591906145c5565b341015611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e9061436b565b60405180910390fd5b5b6000600190505b828111611bd357601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611ba69061476c565b9190505550611bc0338284611bbb919061453e565b61286f565b8080611bcb9061476c565b915050611b4f565b505050565b611bea611be3612342565b838361288d565b5050565b611bff611bf9612342565b8361246f565b611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c359061438b565b60405180910390fd5b611c4a848484846129fa565b50505050565b60138181548110611c6057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611ca290614709565b80601f0160208091040260200160405190810160405280929190818152602001828054611cce90614709565b8015611d1b5780601f10611cf057610100808354040283529160200191611d1b565b820191906000526020600020905b815481529060010190602001808311611cfe57829003601f168201915b505050505081565b6060611d2e8261234a565b611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061432b565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611e1b57600d8054611d9690614709565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc290614709565b8015611e0f5780601f10611de457610100808354040283529160200191611e0f565b820191906000526020600020905b815481529060010190602001808311611df257829003601f168201915b50505050509050611e77565b6000611e25612a56565b90506000815111611e455760405180602001604052806000815250611e73565b80611e4f84612ae8565b600c604051602001611e6393929190613ff4565b6040516020818303038152906040525b9150505b919050565b611e84612342565b73ffffffffffffffffffffffffffffffffffffffff16611ea2611727565b73ffffffffffffffffffffffffffffffffffffffff1614611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef906142cb565b60405180910390fd5b8060118190555050565b600f5481565b611f10612342565b73ffffffffffffffffffffffffffffffffffffffff16611f2e611727565b73ffffffffffffffffffffffffffffffffffffffff1614611f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7b906142cb565b60405180910390fd5b80600c9080519060200190611f9a9291906134a5565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61203a612342565b73ffffffffffffffffffffffffffffffffffffffff16612058611727565b73ffffffffffffffffffffffffffffffffffffffff16146120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a5906142cb565b60405180910390fd5b601360006120bc919061352b565b8181601391906120cd92919061354c565b505050565b6120da612342565b73ffffffffffffffffffffffffffffffffffffffff166120f8611727565b73ffffffffffffffffffffffffffffffffffffffff161461214e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612145906142cb565b60405180910390fd5b80600d90805190602001906121649291906134a5565b5050565b612170612342565b73ffffffffffffffffffffffffffffffffffffffff1661218e611727565b73ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db906142cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b9061412b565b60405180910390fd5b61225d816127a9565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061232b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061233b575061233a82612c49565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661242983611421565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061247a8261234a565b6124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b0906141cb565b60405180910390fd5b60006124c483611421565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061253357508373ffffffffffffffffffffffffffffffffffffffff1661251b84610c2c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061254457506125438185611f9e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661256d82611421565b73ffffffffffffffffffffffffffffffffffffffff16146125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba9061430b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a9061418b565b60405180910390fd5b61263e838383612cb3565b6126496000826123b6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612699919061461f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126f0919061453e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612889828260405180602001604052806000815250612dc7565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f3906141ab565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129ed91906140ae565b60405180910390a3505050565b612a0584848461254d565b612a1184848484612e22565b612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a479061410b565b60405180910390fd5b50505050565b6060600b8054612a6590614709565b80601f0160208091040260200160405190810160405280929190818152602001828054612a9190614709565b8015612ade5780601f10612ab357610100808354040283529160200191612ade565b820191906000526020600020905b815481529060010190602001808311612ac157829003601f168201915b5050505050905090565b60606000821415612b30576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c44565b600082905060005b60008214612b62578080612b4b9061476c565b915050600a82612b5b9190614594565b9150612b38565b60008167ffffffffffffffff811115612b7e57612b7d6148d1565b5b6040519080825280601f01601f191660200182016040528015612bb05781602001600182028036833780820191505090505b5090505b60008514612c3d57600182612bc9919061461f565b9150600a85612bd891906147b5565b6030612be4919061453e565b60f81b818381518110612bfa57612bf96148a2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c369190614594565b9450612bb4565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cbe838383612fb9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d0157612cfc81612fbe565b612d40565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d3f57612d3e8382613007565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d8357612d7e81613174565b612dc2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612dc157612dc08282613245565b5b5b505050565b612dd183836132c4565b612dde6000848484612e22565b612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e149061410b565b60405180910390fd5b505050565b6000612e438473ffffffffffffffffffffffffffffffffffffffff16613492565b15612fac578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e6c612342565b8786866040518563ffffffff1660e01b8152600401612e8e9493929190614040565b602060405180830381600087803b158015612ea857600080fd5b505af1925050508015612ed957506040513d601f19601f82011682018060405250810190612ed69190613a12565b60015b612f5c573d8060008114612f09576040519150601f19603f3d011682016040523d82523d6000602084013e612f0e565b606091505b50600081511415612f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4b9061410b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fb1565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161301484611561565b61301e919061461f565b9050600060076000848152602001908152602001600020549050818114613103576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613188919061461f565b90506000600960008481526020019081526020016000205490506000600883815481106131b8576131b76148a2565b5b9060005260206000200154905080600883815481106131da576131d96148a2565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061322957613228614873565b5b6001900381819060005260206000200160009055905550505050565b600061325083611561565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332b9061428b565b60405180910390fd5b61333d8161234a565b1561337d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133749061414b565b60405180910390fd5b61338960008383612cb3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133d9919061453e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546134b190614709565b90600052602060002090601f0160209004810192826134d3576000855561351a565b82601f106134ec57805160ff191683800117855561351a565b8280016001018555821561351a579182015b828111156135195782518255916020019190600101906134fe565b5b50905061352791906135ec565b5090565b508054600082559060005260206000209081019061354991906135ec565b50565b8280548282559060005260206000209081019282156135db579160200282015b828111156135da57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061356c565b5b5090506135e891906135ec565b5090565b5b808211156136055760008160009055506001016135ed565b5090565b600061361c6136178461444b565b614426565b9050828152602081018484840111156136385761363761490f565b5b6136438482856146c7565b509392505050565b600061365e6136598461447c565b614426565b90508281526020810184848401111561367a5761367961490f565b5b6136858482856146c7565b509392505050565b60008135905061369c81614f6a565b92915050565b60008083601f8401126136b8576136b7614905565b5b8235905067ffffffffffffffff8111156136d5576136d4614900565b5b6020830191508360208202830111156136f1576136f061490a565b5b9250929050565b60008135905061370781614f81565b92915050565b60008135905061371c81614f98565b92915050565b60008151905061373181614f98565b92915050565b600082601f83011261374c5761374b614905565b5b813561375c848260208601613609565b91505092915050565b600082601f83011261377a57613779614905565b5b813561378a84826020860161364b565b91505092915050565b6000813590506137a281614faf565b92915050565b6000602082840312156137be576137bd614919565b5b60006137cc8482850161368d565b91505092915050565b600080604083850312156137ec576137eb614919565b5b60006137fa8582860161368d565b925050602061380b8582860161368d565b9150509250929050565b60008060006060848603121561382e5761382d614919565b5b600061383c8682870161368d565b935050602061384d8682870161368d565b925050604061385e86828701613793565b9150509250925092565b6000806000806080858703121561388257613881614919565b5b60006138908782880161368d565b94505060206138a18782880161368d565b93505060406138b287828801613793565b925050606085013567ffffffffffffffff8111156138d3576138d2614914565b5b6138df87828801613737565b91505092959194509250565b6000806040838503121561390257613901614919565b5b60006139108582860161368d565b9250506020613921858286016136f8565b9150509250929050565b6000806040838503121561394257613941614919565b5b60006139508582860161368d565b925050602061396185828601613793565b9150509250929050565b6000806020838503121561398257613981614919565b5b600083013567ffffffffffffffff8111156139a05761399f614914565b5b6139ac858286016136a2565b92509250509250929050565b6000602082840312156139ce576139cd614919565b5b60006139dc848285016136f8565b91505092915050565b6000602082840312156139fb576139fa614919565b5b6000613a098482850161370d565b91505092915050565b600060208284031215613a2857613a27614919565b5b6000613a3684828501613722565b91505092915050565b600060208284031215613a5557613a54614919565b5b600082013567ffffffffffffffff811115613a7357613a72614914565b5b613a7f84828501613765565b91505092915050565b600060208284031215613a9e57613a9d614919565b5b6000613aac84828501613793565b91505092915050565b6000613ac18383613fd6565b60208301905092915050565b613ad681614653565b82525050565b6000613ae7826144d2565b613af18185614500565b9350613afc836144ad565b8060005b83811015613b2d578151613b148882613ab5565b9750613b1f836144f3565b925050600181019050613b00565b5085935050505092915050565b613b4381614665565b82525050565b6000613b54826144dd565b613b5e8185614511565b9350613b6e8185602086016146d6565b613b778161491e565b840191505092915050565b6000613b8d826144e8565b613b978185614522565b9350613ba78185602086016146d6565b613bb08161491e565b840191505092915050565b6000613bc6826144e8565b613bd08185614533565b9350613be08185602086016146d6565b80840191505092915050565b60008154613bf981614709565b613c038186614533565b94506001821660008114613c1e5760018114613c2f57613c62565b60ff19831686528186019350613c62565b613c38856144bd565b60005b83811015613c5a57815481890152600182019150602081019050613c3b565b838801955050505b50505092915050565b6000613c78602b83614522565b9150613c838261492f565b604082019050919050565b6000613c9b603283614522565b9150613ca68261497e565b604082019050919050565b6000613cbe602683614522565b9150613cc9826149cd565b604082019050919050565b6000613ce1601c83614522565b9150613cec82614a1c565b602082019050919050565b6000613d04601c83614522565b9150613d0f82614a45565b602082019050919050565b6000613d27602483614522565b9150613d3282614a6e565b604082019050919050565b6000613d4a601983614522565b9150613d5582614abd565b602082019050919050565b6000613d6d602c83614522565b9150613d7882614ae6565b604082019050919050565b6000613d90603883614522565b9150613d9b82614b35565b604082019050919050565b6000613db3602a83614522565b9150613dbe82614b84565b604082019050919050565b6000613dd6602983614522565b9150613de182614bd3565b604082019050919050565b6000613df9601683614522565b9150613e0482614c22565b602082019050919050565b6000613e1c602483614522565b9150613e2782614c4b565b604082019050919050565b6000613e3f602083614522565b9150613e4a82614c9a565b602082019050919050565b6000613e62602c83614522565b9150613e6d82614cc3565b604082019050919050565b6000613e85602083614522565b9150613e9082614d12565b602082019050919050565b6000613ea8601683614522565b9150613eb382614d3b565b602082019050919050565b6000613ecb602983614522565b9150613ed682614d64565b604082019050919050565b6000613eee602f83614522565b9150613ef982614db3565b604082019050919050565b6000613f11602183614522565b9150613f1c82614e02565b604082019050919050565b6000613f34601283614522565b9150613f3f82614e51565b602082019050919050565b6000613f57603183614522565b9150613f6282614e7a565b604082019050919050565b6000613f7a602c83614522565b9150613f8582614ec9565b604082019050919050565b6000613f9d601783614522565b9150613fa882614f18565b602082019050919050565b6000613fc0601b83614522565b9150613fcb82614f41565b602082019050919050565b613fdf816146bd565b82525050565b613fee816146bd565b82525050565b60006140008286613bbb565b915061400c8285613bbb565b91506140188284613bec565b9150819050949350505050565b600060208201905061403a6000830184613acd565b92915050565b60006080820190506140556000830187613acd565b6140626020830186613acd565b61406f6040830185613fe5565b81810360608301526140818184613b49565b905095945050505050565b600060208201905081810360008301526140a68184613adc565b905092915050565b60006020820190506140c36000830184613b3a565b92915050565b600060208201905081810360008301526140e38184613b82565b905092915050565b6000602082019050818103600083015261410481613c6b565b9050919050565b6000602082019050818103600083015261412481613c8e565b9050919050565b6000602082019050818103600083015261414481613cb1565b9050919050565b6000602082019050818103600083015261416481613cd4565b9050919050565b6000602082019050818103600083015261418481613cf7565b9050919050565b600060208201905081810360008301526141a481613d1a565b9050919050565b600060208201905081810360008301526141c481613d3d565b9050919050565b600060208201905081810360008301526141e481613d60565b9050919050565b6000602082019050818103600083015261420481613d83565b9050919050565b6000602082019050818103600083015261422481613da6565b9050919050565b6000602082019050818103600083015261424481613dc9565b9050919050565b6000602082019050818103600083015261426481613dec565b9050919050565b6000602082019050818103600083015261428481613e0f565b9050919050565b600060208201905081810360008301526142a481613e32565b9050919050565b600060208201905081810360008301526142c481613e55565b9050919050565b600060208201905081810360008301526142e481613e78565b9050919050565b6000602082019050818103600083015261430481613e9b565b9050919050565b6000602082019050818103600083015261432481613ebe565b9050919050565b6000602082019050818103600083015261434481613ee1565b9050919050565b6000602082019050818103600083015261436481613f04565b9050919050565b6000602082019050818103600083015261438481613f27565b9050919050565b600060208201905081810360008301526143a481613f4a565b9050919050565b600060208201905081810360008301526143c481613f6d565b9050919050565b600060208201905081810360008301526143e481613f90565b9050919050565b6000602082019050818103600083015261440481613fb3565b9050919050565b60006020820190506144206000830184613fe5565b92915050565b6000614430614441565b905061443c828261473b565b919050565b6000604051905090565b600067ffffffffffffffff821115614466576144656148d1565b5b61446f8261491e565b9050602081019050919050565b600067ffffffffffffffff821115614497576144966148d1565b5b6144a08261491e565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614549826146bd565b9150614554836146bd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614589576145886147e6565b5b828201905092915050565b600061459f826146bd565b91506145aa836146bd565b9250826145ba576145b9614815565b5b828204905092915050565b60006145d0826146bd565b91506145db836146bd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614614576146136147e6565b5b828202905092915050565b600061462a826146bd565b9150614635836146bd565b925082821015614648576146476147e6565b5b828203905092915050565b600061465e8261469d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146f45780820151818401526020810190506146d9565b83811115614703576000848401525b50505050565b6000600282049050600182168061472157607f821691505b6020821081141561473557614734614844565b5b50919050565b6147448261491e565b810181811067ffffffffffffffff82111715614763576147626148d1565b5b80604052505050565b6000614777826146bd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147aa576147a96147e6565b5b600182019050919050565b60006147c0826146bd565b91506147cb836146bd565b9250826147db576147da614815565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614f7381614653565b8114614f7e57600080fd5b50565b614f8a81614665565b8114614f9557600080fd5b50565b614fa181614671565b8114614fac57600080fd5b50565b614fb8816146bd565b8114614fc357600080fd5b5056fea2646970667358221220d4289c619d88a97182cf7f8a9720892c216c31ce0e9bc010c074db81d6eb3dec64736f6c6343000807003368747470733a2f2f6368616e676569747768696c6575706c6f6164696e67746f7365727665722e636f6d2f
Deployed Bytecode
0x6080604052600436106102725760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb011461097b578063da3ef23f146109a6578063e985e9c5146109cf578063edec5f2714610a0c578063f2c4ce1e14610a35578063f2fde38b14610a5e57610272565b8063b88d4fde14610859578063ba4e5c4914610882578063ba7d2c76146108bf578063c6682862146108ea578063c87b56dd14610915578063d0eb26b01461095257610272565b80638da5cb5b116101135780638da5cb5b1461076a578063940cd05b1461079557806395d89b41146107be5780639c70b512146107e9578063a0712d6814610814578063a22cb4651461083057610272565b80636352211e146106855780636c0360eb146106c257806370a08231146106ed578063715018a61461072a5780637f00c7a61461074157610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461056357806344a0d68a146105a05780634f6ccce7146105c9578063518302271461060657806355f804b3146106315780635c975abb1461065a57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461053a57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906139e5565b610a87565b6040516102ab91906140ae565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906139b8565b610b01565b005b3480156102e957600080fd5b506102f2610b9a565b6040516102ff91906140c9565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613a88565b610c2c565b60405161033c9190614025565b60405180910390f35b34801561035157600080fd5b5061035a610cb1565b60405161036791906140c9565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061392b565b610d3f565b005b3480156103a557600080fd5b506103ae610e57565b6040516103bb919061440b565b60405180910390f35b3480156103d057600080fd5b506103d9610e5d565b6040516103e6919061440b565b60405180910390f35b3480156103fb57600080fd5b50610416600480360381019061041191906137a8565b610e6a565b604051610423919061440b565b60405180910390f35b34801561043857600080fd5b50610441610e82565b60405161044e919061440b565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613815565b610e88565b005b34801561048c57600080fd5b506104a760048036038101906104a2919061392b565b610ee8565b6040516104b4919061440b565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906137a8565b610f8d565b6040516104f191906140ae565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c91906139b8565b61103c565b005b34801561052f57600080fd5b506105386110d5565b005b34801561054657600080fd5b50610561600480360381019061055c9190613815565b6111a0565b005b34801561056f57600080fd5b5061058a600480360381019061058591906137a8565b6111c0565b604051610597919061408c565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190613a88565b61126e565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190613a88565b6112f4565b6040516105fd919061440b565b60405180910390f35b34801561061257600080fd5b5061061b611365565b60405161062891906140ae565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190613a3f565b611378565b005b34801561066657600080fd5b5061066f61140e565b60405161067c91906140ae565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a79190613a88565b611421565b6040516106b99190614025565b60405180910390f35b3480156106ce57600080fd5b506106d76114d3565b6040516106e491906140c9565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f91906137a8565b611561565b604051610721919061440b565b60405180910390f35b34801561073657600080fd5b5061073f611619565b005b34801561074d57600080fd5b5061076860048036038101906107639190613a88565b6116a1565b005b34801561077657600080fd5b5061077f611727565b60405161078c9190614025565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906139b8565b611751565b005b3480156107ca57600080fd5b506107d36117ea565b6040516107e091906140c9565b60405180910390f35b3480156107f557600080fd5b506107fe61187c565b60405161080b91906140ae565b60405180910390f35b61082e60048036038101906108299190613a88565b61188f565b005b34801561083c57600080fd5b50610857600480360381019061085291906138eb565b611bd8565b005b34801561086557600080fd5b50610880600480360381019061087b9190613868565b611bee565b005b34801561088e57600080fd5b506108a960048036038101906108a49190613a88565b611c50565b6040516108b69190614025565b60405180910390f35b3480156108cb57600080fd5b506108d4611c8f565b6040516108e1919061440b565b60405180910390f35b3480156108f657600080fd5b506108ff611c95565b60405161090c91906140c9565b60405180910390f35b34801561092157600080fd5b5061093c60048036038101906109379190613a88565b611d23565b60405161094991906140c9565b60405180910390f35b34801561095e57600080fd5b5061097960048036038101906109749190613a88565b611e7c565b005b34801561098757600080fd5b50610990611f02565b60405161099d919061440b565b60405180910390f35b3480156109b257600080fd5b506109cd60048036038101906109c89190613a3f565b611f08565b005b3480156109db57600080fd5b506109f660048036038101906109f191906137d5565b611f9e565b604051610a0391906140ae565b60405180910390f35b348015610a1857600080fd5b50610a336004803603810190610a2e919061396b565b612032565b005b348015610a4157600080fd5b50610a5c6004803603810190610a579190613a3f565b6120d2565b005b348015610a6a57600080fd5b50610a856004803603810190610a8091906137a8565b612168565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610afa5750610af982612260565b5b9050919050565b610b09612342565b73ffffffffffffffffffffffffffffffffffffffff16610b27611727565b73ffffffffffffffffffffffffffffffffffffffff1614610b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b74906142cb565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610ba990614709565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd590614709565b8015610c225780601f10610bf757610100808354040283529160200191610c22565b820191906000526020600020905b815481529060010190602001808311610c0557829003601f168201915b5050505050905090565b6000610c378261234a565b610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d906142ab565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610cbe90614709565b80601f0160208091040260200160405190810160405280929190818152602001828054610cea90614709565b8015610d375780601f10610d0c57610100808354040283529160200191610d37565b820191906000526020600020905b815481529060010190602001808311610d1a57829003601f168201915b505050505081565b6000610d4a82611421565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db29061434b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dda612342565b73ffffffffffffffffffffffffffffffffffffffff161480610e095750610e0881610e03612342565b611f9e565b5b610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f906141eb565b60405180910390fd5b610e5283836123b6565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610e99610e93612342565b8261246f565b610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf9061438b565b60405180910390fd5b610ee383838361254d565b505050565b6000610ef383611561565b8210610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b906140eb565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015611031578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610fcd57610fcc6148a2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561101e576001915050611037565b80806110299061476c565b915050610f95565b50600090505b919050565b611044612342565b73ffffffffffffffffffffffffffffffffffffffff16611062611727565b73ffffffffffffffffffffffffffffffffffffffff16146110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af906142cb565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6110dd612342565b73ffffffffffffffffffffffffffffffffffffffff166110fb611727565b73ffffffffffffffffffffffffffffffffffffffff1614611151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611148906142cb565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561119c573d6000803e3d6000fd5b5050565b6111bb83838360405180602001604052806000815250611bee565b505050565b606060006111cd83611561565b905060008167ffffffffffffffff8111156111eb576111ea6148d1565b5b6040519080825280602002602001820160405280156112195781602001602082028036833780820191505090505b50905060005b82811015611263576112318582610ee8565b828281518110611244576112436148a2565b5b602002602001018181525050808061125b9061476c565b91505061121f565b508092505050919050565b611276612342565b73ffffffffffffffffffffffffffffffffffffffff16611294611727565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906142cb565b60405180910390fd5b80600e8190555050565b60006112fe610e5d565b821061133f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611336906143ab565b60405180910390fd5b60088281548110611353576113526148a2565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b611380612342565b73ffffffffffffffffffffffffffffffffffffffff1661139e611727565b73ffffffffffffffffffffffffffffffffffffffff16146113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb906142cb565b60405180910390fd5b80600b908051906020019061140a9291906134a5565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c19061422b565b60405180910390fd5b80915050919050565b600b80546114e090614709565b80601f016020809104026020016040519081016040528092919081815260200182805461150c90614709565b80156115595780601f1061152e57610100808354040283529160200191611559565b820191906000526020600020905b81548152906001019060200180831161153c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c99061420b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611621612342565b73ffffffffffffffffffffffffffffffffffffffff1661163f611727565b73ffffffffffffffffffffffffffffffffffffffff1614611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c906142cb565b60405180910390fd5b61169f60006127a9565b565b6116a9612342565b73ffffffffffffffffffffffffffffffffffffffff166116c7611727565b73ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611714906142cb565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611759612342565b73ffffffffffffffffffffffffffffffffffffffff16611777611727565b73ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c4906142cb565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6060600180546117f990614709565b80601f016020809104026020016040519081016040528092919081815260200182805461182590614709565b80156118725780601f1061184757610100808354040283529160200191611872565b820191906000526020600020905b81548152906001019060200180831161185557829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff16156118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d6906142eb565b60405180910390fd5b60006118e9610e5d565b90506000821161192e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611925906143eb565b60405180910390fd5b601054821115611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a9061426b565b60405180910390fd5b600f548282611982919061453e565b11156119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba9061424b565b60405180910390fd5b6119cb611727565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b485760011515601260029054906101000a900460ff1615151415611af757611a2233610f8d565b611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a58906143cb565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548382611ab4919061453e565b1115611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec9061416b565b60405180910390fd5b505b81600e54611b0591906145c5565b341015611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e9061436b565b60405180910390fd5b5b6000600190505b828111611bd357601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611ba69061476c565b9190505550611bc0338284611bbb919061453e565b61286f565b8080611bcb9061476c565b915050611b4f565b505050565b611bea611be3612342565b838361288d565b5050565b611bff611bf9612342565b8361246f565b611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c359061438b565b60405180910390fd5b611c4a848484846129fa565b50505050565b60138181548110611c6057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611ca290614709565b80601f0160208091040260200160405190810160405280929190818152602001828054611cce90614709565b8015611d1b5780601f10611cf057610100808354040283529160200191611d1b565b820191906000526020600020905b815481529060010190602001808311611cfe57829003601f168201915b505050505081565b6060611d2e8261234a565b611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061432b565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611e1b57600d8054611d9690614709565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc290614709565b8015611e0f5780601f10611de457610100808354040283529160200191611e0f565b820191906000526020600020905b815481529060010190602001808311611df257829003601f168201915b50505050509050611e77565b6000611e25612a56565b90506000815111611e455760405180602001604052806000815250611e73565b80611e4f84612ae8565b600c604051602001611e6393929190613ff4565b6040516020818303038152906040525b9150505b919050565b611e84612342565b73ffffffffffffffffffffffffffffffffffffffff16611ea2611727565b73ffffffffffffffffffffffffffffffffffffffff1614611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef906142cb565b60405180910390fd5b8060118190555050565b600f5481565b611f10612342565b73ffffffffffffffffffffffffffffffffffffffff16611f2e611727565b73ffffffffffffffffffffffffffffffffffffffff1614611f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7b906142cb565b60405180910390fd5b80600c9080519060200190611f9a9291906134a5565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61203a612342565b73ffffffffffffffffffffffffffffffffffffffff16612058611727565b73ffffffffffffffffffffffffffffffffffffffff16146120ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a5906142cb565b60405180910390fd5b601360006120bc919061352b565b8181601391906120cd92919061354c565b505050565b6120da612342565b73ffffffffffffffffffffffffffffffffffffffff166120f8611727565b73ffffffffffffffffffffffffffffffffffffffff161461214e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612145906142cb565b60405180910390fd5b80600d90805190602001906121649291906134a5565b5050565b612170612342565b73ffffffffffffffffffffffffffffffffffffffff1661218e611727565b73ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db906142cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b9061412b565b60405180910390fd5b61225d816127a9565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061232b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061233b575061233a82612c49565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661242983611421565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061247a8261234a565b6124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b0906141cb565b60405180910390fd5b60006124c483611421565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061253357508373ffffffffffffffffffffffffffffffffffffffff1661251b84610c2c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061254457506125438185611f9e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661256d82611421565b73ffffffffffffffffffffffffffffffffffffffff16146125c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ba9061430b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a9061418b565b60405180910390fd5b61263e838383612cb3565b6126496000826123b6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612699919061461f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126f0919061453e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612889828260405180602001604052806000815250612dc7565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f3906141ab565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129ed91906140ae565b60405180910390a3505050565b612a0584848461254d565b612a1184848484612e22565b612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a479061410b565b60405180910390fd5b50505050565b6060600b8054612a6590614709565b80601f0160208091040260200160405190810160405280929190818152602001828054612a9190614709565b8015612ade5780601f10612ab357610100808354040283529160200191612ade565b820191906000526020600020905b815481529060010190602001808311612ac157829003601f168201915b5050505050905090565b60606000821415612b30576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c44565b600082905060005b60008214612b62578080612b4b9061476c565b915050600a82612b5b9190614594565b9150612b38565b60008167ffffffffffffffff811115612b7e57612b7d6148d1565b5b6040519080825280601f01601f191660200182016040528015612bb05781602001600182028036833780820191505090505b5090505b60008514612c3d57600182612bc9919061461f565b9150600a85612bd891906147b5565b6030612be4919061453e565b60f81b818381518110612bfa57612bf96148a2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c369190614594565b9450612bb4565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cbe838383612fb9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d0157612cfc81612fbe565b612d40565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d3f57612d3e8382613007565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d8357612d7e81613174565b612dc2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612dc157612dc08282613245565b5b5b505050565b612dd183836132c4565b612dde6000848484612e22565b612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e149061410b565b60405180910390fd5b505050565b6000612e438473ffffffffffffffffffffffffffffffffffffffff16613492565b15612fac578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e6c612342565b8786866040518563ffffffff1660e01b8152600401612e8e9493929190614040565b602060405180830381600087803b158015612ea857600080fd5b505af1925050508015612ed957506040513d601f19601f82011682018060405250810190612ed69190613a12565b60015b612f5c573d8060008114612f09576040519150601f19603f3d011682016040523d82523d6000602084013e612f0e565b606091505b50600081511415612f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4b9061410b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fb1565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161301484611561565b61301e919061461f565b9050600060076000848152602001908152602001600020549050818114613103576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613188919061461f565b90506000600960008481526020019081526020016000205490506000600883815481106131b8576131b76148a2565b5b9060005260206000200154905080600883815481106131da576131d96148a2565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061322957613228614873565b5b6001900381819060005260206000200160009055905550505050565b600061325083611561565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332b9061428b565b60405180910390fd5b61333d8161234a565b1561337d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133749061414b565b60405180910390fd5b61338960008383612cb3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133d9919061453e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546134b190614709565b90600052602060002090601f0160209004810192826134d3576000855561351a565b82601f106134ec57805160ff191683800117855561351a565b8280016001018555821561351a579182015b828111156135195782518255916020019190600101906134fe565b5b50905061352791906135ec565b5090565b508054600082559060005260206000209081019061354991906135ec565b50565b8280548282559060005260206000209081019282156135db579160200282015b828111156135da57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061356c565b5b5090506135e891906135ec565b5090565b5b808211156136055760008160009055506001016135ed565b5090565b600061361c6136178461444b565b614426565b9050828152602081018484840111156136385761363761490f565b5b6136438482856146c7565b509392505050565b600061365e6136598461447c565b614426565b90508281526020810184848401111561367a5761367961490f565b5b6136858482856146c7565b509392505050565b60008135905061369c81614f6a565b92915050565b60008083601f8401126136b8576136b7614905565b5b8235905067ffffffffffffffff8111156136d5576136d4614900565b5b6020830191508360208202830111156136f1576136f061490a565b5b9250929050565b60008135905061370781614f81565b92915050565b60008135905061371c81614f98565b92915050565b60008151905061373181614f98565b92915050565b600082601f83011261374c5761374b614905565b5b813561375c848260208601613609565b91505092915050565b600082601f83011261377a57613779614905565b5b813561378a84826020860161364b565b91505092915050565b6000813590506137a281614faf565b92915050565b6000602082840312156137be576137bd614919565b5b60006137cc8482850161368d565b91505092915050565b600080604083850312156137ec576137eb614919565b5b60006137fa8582860161368d565b925050602061380b8582860161368d565b9150509250929050565b60008060006060848603121561382e5761382d614919565b5b600061383c8682870161368d565b935050602061384d8682870161368d565b925050604061385e86828701613793565b9150509250925092565b6000806000806080858703121561388257613881614919565b5b60006138908782880161368d565b94505060206138a18782880161368d565b93505060406138b287828801613793565b925050606085013567ffffffffffffffff8111156138d3576138d2614914565b5b6138df87828801613737565b91505092959194509250565b6000806040838503121561390257613901614919565b5b60006139108582860161368d565b9250506020613921858286016136f8565b9150509250929050565b6000806040838503121561394257613941614919565b5b60006139508582860161368d565b925050602061396185828601613793565b9150509250929050565b6000806020838503121561398257613981614919565b5b600083013567ffffffffffffffff8111156139a05761399f614914565b5b6139ac858286016136a2565b92509250509250929050565b6000602082840312156139ce576139cd614919565b5b60006139dc848285016136f8565b91505092915050565b6000602082840312156139fb576139fa614919565b5b6000613a098482850161370d565b91505092915050565b600060208284031215613a2857613a27614919565b5b6000613a3684828501613722565b91505092915050565b600060208284031215613a5557613a54614919565b5b600082013567ffffffffffffffff811115613a7357613a72614914565b5b613a7f84828501613765565b91505092915050565b600060208284031215613a9e57613a9d614919565b5b6000613aac84828501613793565b91505092915050565b6000613ac18383613fd6565b60208301905092915050565b613ad681614653565b82525050565b6000613ae7826144d2565b613af18185614500565b9350613afc836144ad565b8060005b83811015613b2d578151613b148882613ab5565b9750613b1f836144f3565b925050600181019050613b00565b5085935050505092915050565b613b4381614665565b82525050565b6000613b54826144dd565b613b5e8185614511565b9350613b6e8185602086016146d6565b613b778161491e565b840191505092915050565b6000613b8d826144e8565b613b978185614522565b9350613ba78185602086016146d6565b613bb08161491e565b840191505092915050565b6000613bc6826144e8565b613bd08185614533565b9350613be08185602086016146d6565b80840191505092915050565b60008154613bf981614709565b613c038186614533565b94506001821660008114613c1e5760018114613c2f57613c62565b60ff19831686528186019350613c62565b613c38856144bd565b60005b83811015613c5a57815481890152600182019150602081019050613c3b565b838801955050505b50505092915050565b6000613c78602b83614522565b9150613c838261492f565b604082019050919050565b6000613c9b603283614522565b9150613ca68261497e565b604082019050919050565b6000613cbe602683614522565b9150613cc9826149cd565b604082019050919050565b6000613ce1601c83614522565b9150613cec82614a1c565b602082019050919050565b6000613d04601c83614522565b9150613d0f82614a45565b602082019050919050565b6000613d27602483614522565b9150613d3282614a6e565b604082019050919050565b6000613d4a601983614522565b9150613d5582614abd565b602082019050919050565b6000613d6d602c83614522565b9150613d7882614ae6565b604082019050919050565b6000613d90603883614522565b9150613d9b82614b35565b604082019050919050565b6000613db3602a83614522565b9150613dbe82614b84565b604082019050919050565b6000613dd6602983614522565b9150613de182614bd3565b604082019050919050565b6000613df9601683614522565b9150613e0482614c22565b602082019050919050565b6000613e1c602483614522565b9150613e2782614c4b565b604082019050919050565b6000613e3f602083614522565b9150613e4a82614c9a565b602082019050919050565b6000613e62602c83614522565b9150613e6d82614cc3565b604082019050919050565b6000613e85602083614522565b9150613e9082614d12565b602082019050919050565b6000613ea8601683614522565b9150613eb382614d3b565b602082019050919050565b6000613ecb602983614522565b9150613ed682614d64565b604082019050919050565b6000613eee602f83614522565b9150613ef982614db3565b604082019050919050565b6000613f11602183614522565b9150613f1c82614e02565b604082019050919050565b6000613f34601283614522565b9150613f3f82614e51565b602082019050919050565b6000613f57603183614522565b9150613f6282614e7a565b604082019050919050565b6000613f7a602c83614522565b9150613f8582614ec9565b604082019050919050565b6000613f9d601783614522565b9150613fa882614f18565b602082019050919050565b6000613fc0601b83614522565b9150613fcb82614f41565b602082019050919050565b613fdf816146bd565b82525050565b613fee816146bd565b82525050565b60006140008286613bbb565b915061400c8285613bbb565b91506140188284613bec565b9150819050949350505050565b600060208201905061403a6000830184613acd565b92915050565b60006080820190506140556000830187613acd565b6140626020830186613acd565b61406f6040830185613fe5565b81810360608301526140818184613b49565b905095945050505050565b600060208201905081810360008301526140a68184613adc565b905092915050565b60006020820190506140c36000830184613b3a565b92915050565b600060208201905081810360008301526140e38184613b82565b905092915050565b6000602082019050818103600083015261410481613c6b565b9050919050565b6000602082019050818103600083015261412481613c8e565b9050919050565b6000602082019050818103600083015261414481613cb1565b9050919050565b6000602082019050818103600083015261416481613cd4565b9050919050565b6000602082019050818103600083015261418481613cf7565b9050919050565b600060208201905081810360008301526141a481613d1a565b9050919050565b600060208201905081810360008301526141c481613d3d565b9050919050565b600060208201905081810360008301526141e481613d60565b9050919050565b6000602082019050818103600083015261420481613d83565b9050919050565b6000602082019050818103600083015261422481613da6565b9050919050565b6000602082019050818103600083015261424481613dc9565b9050919050565b6000602082019050818103600083015261426481613dec565b9050919050565b6000602082019050818103600083015261428481613e0f565b9050919050565b600060208201905081810360008301526142a481613e32565b9050919050565b600060208201905081810360008301526142c481613e55565b9050919050565b600060208201905081810360008301526142e481613e78565b9050919050565b6000602082019050818103600083015261430481613e9b565b9050919050565b6000602082019050818103600083015261432481613ebe565b9050919050565b6000602082019050818103600083015261434481613ee1565b9050919050565b6000602082019050818103600083015261436481613f04565b9050919050565b6000602082019050818103600083015261438481613f27565b9050919050565b600060208201905081810360008301526143a481613f4a565b9050919050565b600060208201905081810360008301526143c481613f6d565b9050919050565b600060208201905081810360008301526143e481613f90565b9050919050565b6000602082019050818103600083015261440481613fb3565b9050919050565b60006020820190506144206000830184613fe5565b92915050565b6000614430614441565b905061443c828261473b565b919050565b6000604051905090565b600067ffffffffffffffff821115614466576144656148d1565b5b61446f8261491e565b9050602081019050919050565b600067ffffffffffffffff821115614497576144966148d1565b5b6144a08261491e565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614549826146bd565b9150614554836146bd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614589576145886147e6565b5b828201905092915050565b600061459f826146bd565b91506145aa836146bd565b9250826145ba576145b9614815565b5b828204905092915050565b60006145d0826146bd565b91506145db836146bd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614614576146136147e6565b5b828202905092915050565b600061462a826146bd565b9150614635836146bd565b925082821015614648576146476147e6565b5b828203905092915050565b600061465e8261469d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146f45780820151818401526020810190506146d9565b83811115614703576000848401525b50505050565b6000600282049050600182168061472157607f821691505b6020821081141561473557614734614844565b5b50919050565b6147448261491e565b810181811067ffffffffffffffff82111715614763576147626148d1565b5b80604052505050565b6000614777826146bd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147aa576147a96147e6565b5b600182019050919050565b60006147c0826146bd565b91506147cb836146bd565b9250826147db576147da614815565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614f7381614653565b8114614f7e57600080fd5b50565b614f8a81614665565b8114614f9557600080fd5b50565b614fa181614671565b8114614fac57600080fd5b50565b614fb8816146bd565b8114614fc357600080fd5b5056fea2646970667358221220d4289c619d88a97182cf7f8a9720892c216c31ce0e9bc010c074db81d6eb3dec64736f6c63430008070033
Deployed Bytecode Sourcemap
46924:4056:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40692:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50512:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28186:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29745:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47085:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29268:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47118:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41332:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47418:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47194:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30495:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41000:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48662:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50589:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50836:141;;;;;;;;;;;;;:::i;:::-;;30905:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48905:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49956:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41522:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47304:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50160:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47273:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27880:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47012:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27610:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7156:103;;;;;;;;;;;;;:::i;:::-;;50040:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6505:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49766:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28355:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47337:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47731:927;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30038:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31161:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47376:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47231;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47043;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49257:489;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49848:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47157:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50262:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30264:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50688:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50388:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7414:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40692:224;40794:4;40833:35;40818:50;;;:11;:50;;;;:90;;;;40872:36;40896:11;40872:23;:36::i;:::-;40818:90;40811:97;;40692:224;;;:::o;50512:73::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50573:6:::1;50564;;:15;;;;;;;;;;;;;;;;;;50512:73:::0;:::o;28186:100::-;28240:13;28273:5;28266:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28186:100;:::o;29745:221::-;29821:7;29849:16;29857:7;29849;:16::i;:::-;29841:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29934:15;:24;29950:7;29934:24;;;;;;;;;;;;;;;;;;;;;29927:31;;29745:221;;;:::o;47085:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29268:411::-;29349:13;29365:23;29380:7;29365:14;:23::i;:::-;29349:39;;29413:5;29407:11;;:2;:11;;;;29399:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29507:5;29491:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29516:37;29533:5;29540:12;:10;:12::i;:::-;29516:16;:37::i;:::-;29491:62;29469:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29650:21;29659:2;29663:7;29650:8;:21::i;:::-;29338:341;29268:411;;:::o;47118:34::-;;;;:::o;41332:113::-;41393:7;41420:10;:17;;;;41413:24;;41332:113;:::o;47418:55::-;;;;;;;;;;;;;;;;;:::o;47194:32::-;;;;:::o;30495:339::-;30690:41;30709:12;:10;:12::i;:::-;30723:7;30690:18;:41::i;:::-;30682:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30798:28;30808:4;30814:2;30818:7;30798:9;:28::i;:::-;30495:339;;;:::o;41000:256::-;41097:7;41133:23;41150:5;41133:16;:23::i;:::-;41125:5;:31;41117:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41222:12;:19;41235:5;41222:19;;;;;;;;;;;;;;;:26;41242:5;41222:26;;;;;;;;;;;;41215:33;;41000:256;;;;:::o;48662:239::-;48721:4;48739:6;48748:1;48739:10;;48734:143;48755:20;:27;;;;48751:1;:31;48734:143;;;48829:5;48802:32;;:20;48823:1;48802:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;48798:72;;;48856:4;48849:11;;;;;48798:72;48784:3;;;;;:::i;:::-;;;;48734:143;;;;48890:5;48883:12;;48662:239;;;;:::o;50589:95::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50672:6:::1;50654:15;;:24;;;;;;;;;;;;;;;;;;50589:95:::0;:::o;50836:141::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50884:15:::1;50902:21;50884:39;;50942:10;50934:28;;:37;50963:7;50934:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50873:104;50836:141::o:0;30905:185::-;31043:39;31060:4;31066:2;31070:7;31043:39;;;;;;;;;;;;:16;:39::i;:::-;30905:185;;;:::o;48905:348::-;48980:16;49008:23;49034:17;49044:6;49034:9;:17::i;:::-;49008:43;;49058:25;49100:15;49086:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49058:58;;49128:9;49123:103;49143:15;49139:1;:19;49123:103;;;49188:30;49208:6;49216:1;49188:19;:30::i;:::-;49174:8;49183:1;49174:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49160:3;;;;;:::i;:::-;;;;49123:103;;;;49239:8;49232:15;;;;48905:348;;;:::o;49956:80::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50022:8:::1;50015:4;:15;;;;49956:80:::0;:::o;41522:233::-;41597:7;41633:30;:28;:30::i;:::-;41625:5;:38;41617:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41730:10;41741:5;41730:17;;;;;;;;:::i;:::-;;;;;;;;;;41723:24;;41522:233;;;:::o;47304:28::-;;;;;;;;;;;;;:::o;50160:98::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50241:11:::1;50231:7;:21;;;;;;;;;;;;:::i;:::-;;50160:98:::0;:::o;47273:26::-;;;;;;;;;;;;;:::o;27880:239::-;27952:7;27972:13;27988:7;:16;27996:7;27988:16;;;;;;;;;;;;;;;;;;;;;27972:32;;28040:1;28023:19;;:5;:19;;;;28015:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28106:5;28099:12;;;27880:239;;;:::o;47012:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27610:208::-;27682:7;27727:1;27710:19;;:5;:19;;;;27702:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27794:9;:16;27804:5;27794:16;;;;;;;;;;;;;;;;27787:23;;27610:208;;;:::o;7156:103::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7221:30:::1;7248:1;7221:18;:30::i;:::-;7156:103::o:0;50040:116::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50133:17:::1;50117:13;:33;;;;50040:116:::0;:::o;6505:87::-;6551:7;6578:6;;;;;;;;;;;6571:13;;6505:87;:::o;49766:78::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49832:6:::1;49821:8;;:17;;;;;;;;;;;;;;;;;;49766:78:::0;:::o;28355:104::-;28411:13;28444:7;28437:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28355:104;:::o;47337:34::-;;;;;;;;;;;;;:::o;47731:927::-;47797:6;;;;;;;;;;;47796:7;47788:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;47837:14;47854:13;:11;:13::i;:::-;47837:30;;47896:1;47882:11;:15;47874:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;47959:13;;47944:11;:28;;47936:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48052:9;;48037:11;48028:6;:20;;;;:::i;:::-;:33;;48020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48113:7;:5;:7::i;:::-;48099:21;;:10;:21;;;48095:416;;48155:4;48136:23;;:15;;;;;;;;;;;:23;;;48133:298;;;48184:25;48198:10;48184:13;:25::i;:::-;48176:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48252:24;48279:20;:32;48300:10;48279:32;;;;;;;;;;;;;;;;48252:59;;48368:18;;48353:11;48334:16;:30;;;;:::i;:::-;:52;;48326:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;48161:270;48133:298;48469:11;48462:4;;:18;;;;:::i;:::-;48449:9;:31;;48441:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48095:416;48522:9;48534:1;48522:13;;48517:136;48542:11;48537:1;:16;48517:136;;48569:20;:32;48590:10;48569:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;48612:33;48622:10;48643:1;48634:6;:10;;;;:::i;:::-;48612:9;:33::i;:::-;48555:3;;;;;:::i;:::-;;;;48517:136;;;;47781:877;47731:927;:::o;30038:155::-;30133:52;30152:12;:10;:12::i;:::-;30166:8;30176;30133:18;:52::i;:::-;30038:155;;:::o;31161:328::-;31336:41;31355:12;:10;:12::i;:::-;31369:7;31336:18;:41::i;:::-;31328:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31442:39;31456:4;31462:2;31466:7;31475:5;31442:13;:39::i;:::-;31161:328;;;;:::o;47376:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47231:::-;;;;:::o;47043:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49257:489::-;49355:13;49396:16;49404:7;49396;:16::i;:::-;49380:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;49499:5;49487:17;;:8;;;;;;;;;;;:17;;;49484:62;;;49524:14;49517:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49484:62;49552:28;49583:10;:8;:10::i;:::-;49552:41;;49638:1;49613:14;49607:28;:32;:133;;;;;;;;;;;;;;;;;49675:14;49691:18;:7;:16;:18::i;:::-;49711:13;49658:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49607:133;49600:140;;;49257:489;;;;:::o;49848:104::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49940:6:::1;49919:18;:27;;;;49848:104:::0;:::o;47157:32::-;;;;:::o;50262:122::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50361:17:::1;50345:13;:33;;;;;;;;;;;;:::i;:::-;;50262:122:::0;:::o;30264:164::-;30361:4;30385:18;:25;30404:5;30385:25;;;;;;;;;;;;;;;:35;30411:8;30385:35;;;;;;;;;;;;;;;;;;;;;;;;;30378:42;;30264:164;;;;:::o;50688:144::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50770:20:::1;;50763:27;;;;:::i;:::-;50820:6;;50797:20;:29;;;;;;;:::i;:::-;;50688:144:::0;;:::o;50388:120::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50487:15:::1;50470:14;:32;;;;;;;;;;;;:::i;:::-;;50388:120:::0;:::o;7414:201::-;6736:12;:10;:12::i;:::-;6725:23;;:7;:5;:7::i;:::-;:23;;;6717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7523:1:::1;7503:22;;:8;:22;;;;7495:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7579:28;7598:8;7579:18;:28::i;:::-;7414:201:::0;:::o;27241:305::-;27343:4;27395:25;27380:40;;;:11;:40;;;;:105;;;;27452:33;27437:48;;;:11;:48;;;;27380:105;:158;;;;27502:36;27526:11;27502:23;:36::i;:::-;27380:158;27360:178;;27241:305;;;:::o;5229:98::-;5282:7;5309:10;5302:17;;5229:98;:::o;32999:127::-;33064:4;33116:1;33088:30;;:7;:16;33096:7;33088:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33081:37;;32999:127;;;:::o;36981:174::-;37083:2;37056:15;:24;37072:7;37056:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37139:7;37135:2;37101:46;;37110:23;37125:7;37110:14;:23::i;:::-;37101:46;;;;;;;;;;;;36981:174;;:::o;33293:348::-;33386:4;33411:16;33419:7;33411;:16::i;:::-;33403:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33487:13;33503:23;33518:7;33503:14;:23::i;:::-;33487:39;;33556:5;33545:16;;:7;:16;;;:51;;;;33589:7;33565:31;;:20;33577:7;33565:11;:20::i;:::-;:31;;;33545:51;:87;;;;33600:32;33617:5;33624:7;33600:16;:32::i;:::-;33545:87;33537:96;;;33293:348;;;;:::o;36285:578::-;36444:4;36417:31;;:23;36432:7;36417:14;:23::i;:::-;:31;;;36409:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36527:1;36513:16;;:2;:16;;;;36505:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36583:39;36604:4;36610:2;36614:7;36583:20;:39::i;:::-;36687:29;36704:1;36708:7;36687:8;:29::i;:::-;36748:1;36729:9;:15;36739:4;36729:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36777:1;36760:9;:13;36770:2;36760:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36808:2;36789:7;:16;36797:7;36789:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36847:7;36843:2;36828:27;;36837:4;36828:27;;;;;;;;;;;;36285:578;;;:::o;7775:191::-;7849:16;7868:6;;;;;;;;;;;7849:25;;7894:8;7885:6;;:17;;;;;;;;;;;;;;;;;;7949:8;7918:40;;7939:8;7918:40;;;;;;;;;;;;7838:128;7775:191;:::o;33983:110::-;34059:26;34069:2;34073:7;34059:26;;;;;;;;;;;;:9;:26::i;:::-;33983:110;;:::o;37297:315::-;37452:8;37443:17;;:5;:17;;;;37435:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37539:8;37501:18;:25;37520:5;37501:25;;;;;;;;;;;;;;;:35;37527:8;37501:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37585:8;37563:41;;37578:5;37563:41;;;37595:8;37563:41;;;;;;:::i;:::-;;;;;;;;37297:315;;;:::o;32371:::-;32528:28;32538:4;32544:2;32548:7;32528:9;:28::i;:::-;32575:48;32598:4;32604:2;32608:7;32617:5;32575:22;:48::i;:::-;32567:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32371:315;;;;:::o;47612:102::-;47672:13;47701:7;47694:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47612:102;:::o;2791:723::-;2847:13;3077:1;3068:5;:10;3064:53;;;3095:10;;;;;;;;;;;;;;;;;;;;;3064:53;3127:12;3142:5;3127:20;;3158:14;3183:78;3198:1;3190:4;:9;3183:78;;3216:8;;;;;:::i;:::-;;;;3247:2;3239:10;;;;;:::i;:::-;;;3183:78;;;3271:19;3303:6;3293:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3271:39;;3321:154;3337:1;3328:5;:10;3321:154;;3365:1;3355:11;;;;;:::i;:::-;;;3432:2;3424:5;:10;;;;:::i;:::-;3411:2;:24;;;;:::i;:::-;3398:39;;3381:6;3388;3381:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3461:2;3452:11;;;;;:::i;:::-;;;3321:154;;;3499:6;3485:21;;;;;2791:723;;;;:::o;18937:157::-;19022:4;19061:25;19046:40;;;:11;:40;;;;19039:47;;18937:157;;;:::o;42368:589::-;42512:45;42539:4;42545:2;42549:7;42512:26;:45::i;:::-;42590:1;42574:18;;:4;:18;;;42570:187;;;42609:40;42641:7;42609:31;:40::i;:::-;42570:187;;;42679:2;42671:10;;:4;:10;;;42667:90;;42698:47;42731:4;42737:7;42698:32;:47::i;:::-;42667:90;42570:187;42785:1;42771:16;;:2;:16;;;42767:183;;;42804:45;42841:7;42804:36;:45::i;:::-;42767:183;;;42877:4;42871:10;;:2;:10;;;42867:83;;42898:40;42926:2;42930:7;42898:27;:40::i;:::-;42867:83;42767:183;42368:589;;;:::o;34320:321::-;34450:18;34456:2;34460:7;34450:5;:18::i;:::-;34501:54;34532:1;34536:2;34540:7;34549:5;34501:22;:54::i;:::-;34479:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34320:321;;;:::o;38177:799::-;38332:4;38353:15;:2;:13;;;:15::i;:::-;38349:620;;;38405:2;38389:36;;;38426:12;:10;:12::i;:::-;38440:4;38446:7;38455:5;38389:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38385:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38648:1;38631:6;:13;:18;38627:272;;;38674:60;;;;;;;;;;:::i;:::-;;;;;;;;38627:272;38849:6;38843:13;38834:6;38830:2;38826:15;38819:38;38385:529;38522:41;;;38512:51;;;:6;:51;;;;38505:58;;;;;38349:620;38953:4;38946:11;;38177:799;;;;;;;:::o;39548:126::-;;;;:::o;43680:164::-;43784:10;:17;;;;43757:15;:24;43773:7;43757:24;;;;;;;;;;;:44;;;;43812:10;43828:7;43812:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43680:164;:::o;44471:988::-;44737:22;44787:1;44762:22;44779:4;44762:16;:22::i;:::-;:26;;;;:::i;:::-;44737:51;;44799:18;44820:17;:26;44838:7;44820:26;;;;;;;;;;;;44799:47;;44967:14;44953:10;:28;44949:328;;44998:19;45020:12;:18;45033:4;45020:18;;;;;;;;;;;;;;;:34;45039:14;45020:34;;;;;;;;;;;;44998:56;;45104:11;45071:12;:18;45084:4;45071:18;;;;;;;;;;;;;;;:30;45090:10;45071:30;;;;;;;;;;;:44;;;;45221:10;45188:17;:30;45206:11;45188:30;;;;;;;;;;;:43;;;;44983:294;44949:328;45373:17;:26;45391:7;45373:26;;;;;;;;;;;45366:33;;;45417:12;:18;45430:4;45417:18;;;;;;;;;;;;;;;:34;45436:14;45417:34;;;;;;;;;;;45410:41;;;44552:907;;44471:988;;:::o;45754:1079::-;46007:22;46052:1;46032:10;:17;;;;:21;;;;:::i;:::-;46007:46;;46064:18;46085:15;:24;46101:7;46085:24;;;;;;;;;;;;46064:45;;46436:19;46458:10;46469:14;46458:26;;;;;;;;:::i;:::-;;;;;;;;;;46436:48;;46522:11;46497:10;46508;46497:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46633:10;46602:15;:28;46618:11;46602:28;;;;;;;;;;;:41;;;;46774:15;:24;46790:7;46774:24;;;;;;;;;;;46767:31;;;46809:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45825:1008;;;45754:1079;:::o;43258:221::-;43343:14;43360:20;43377:2;43360:16;:20::i;:::-;43343:37;;43418:7;43391:12;:16;43404:2;43391:16;;;;;;;;;;;;;;;:24;43408:6;43391:24;;;;;;;;;;;:34;;;;43465:6;43436:17;:26;43454:7;43436:26;;;;;;;;;;;:35;;;;43332:147;43258:221;;:::o;34977:382::-;35071:1;35057:16;;:2;:16;;;;35049:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35130:16;35138:7;35130;:16::i;:::-;35129:17;35121:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35192:45;35221:1;35225:2;35229:7;35192:20;:45::i;:::-;35267:1;35250:9;:13;35260:2;35250:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35298:2;35279:7;:16;35287:7;35279:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35343:7;35339:2;35318:33;;35335:1;35318:33;;;;;;;;;;;;34977:382;;:::o;8793:387::-;8853:4;9061:12;9128:7;9116:20;9108:28;;9171:1;9164:4;:8;9157:15;;;8793:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:179::-;8712:10;8733:46;8775:3;8767:6;8733:46;:::i;:::-;8811:4;8806:3;8802:14;8788:28;;8643:179;;;;:::o;8828:118::-;8915:24;8933:5;8915:24;:::i;:::-;8910:3;8903:37;8828:118;;:::o;8982:732::-;9101:3;9130:54;9178:5;9130:54;:::i;:::-;9200:86;9279:6;9274:3;9200:86;:::i;:::-;9193:93;;9310:56;9360:5;9310:56;:::i;:::-;9389:7;9420:1;9405:284;9430:6;9427:1;9424:13;9405:284;;;9506:6;9500:13;9533:63;9592:3;9577:13;9533:63;:::i;:::-;9526:70;;9619:60;9672:6;9619:60;:::i;:::-;9609:70;;9465:224;9452:1;9449;9445:9;9440:14;;9405:284;;;9409:14;9705:3;9698:10;;9106:608;;;8982:732;;;;:::o;9720:109::-;9801:21;9816:5;9801:21;:::i;:::-;9796:3;9789:34;9720:109;;:::o;9835:360::-;9921:3;9949:38;9981:5;9949:38;:::i;:::-;10003:70;10066:6;10061:3;10003:70;:::i;:::-;9996:77;;10082:52;10127:6;10122:3;10115:4;10108:5;10104:16;10082:52;:::i;:::-;10159:29;10181:6;10159:29;:::i;:::-;10154:3;10150:39;10143:46;;9925:270;9835:360;;;;:::o;10201:364::-;10289:3;10317:39;10350:5;10317:39;:::i;:::-;10372:71;10436:6;10431:3;10372:71;:::i;:::-;10365:78;;10452:52;10497:6;10492:3;10485:4;10478:5;10474:16;10452:52;:::i;:::-;10529:29;10551:6;10529:29;:::i;:::-;10524:3;10520:39;10513:46;;10293:272;10201:364;;;;:::o;10571:377::-;10677:3;10705:39;10738:5;10705:39;:::i;:::-;10760:89;10842:6;10837:3;10760:89;:::i;:::-;10753:96;;10858:52;10903:6;10898:3;10891:4;10884:5;10880:16;10858:52;:::i;:::-;10935:6;10930:3;10926:16;10919:23;;10681:267;10571:377;;;;:::o;10978:845::-;11081:3;11118:5;11112:12;11147:36;11173:9;11147:36;:::i;:::-;11199:89;11281:6;11276:3;11199:89;:::i;:::-;11192:96;;11319:1;11308:9;11304:17;11335:1;11330:137;;;;11481:1;11476:341;;;;11297:520;;11330:137;11414:4;11410:9;11399;11395:25;11390:3;11383:38;11450:6;11445:3;11441:16;11434:23;;11330:137;;11476:341;11543:38;11575:5;11543:38;:::i;:::-;11603:1;11617:154;11631:6;11628:1;11625:13;11617:154;;;11705:7;11699:14;11695:1;11690:3;11686:11;11679:35;11755:1;11746:7;11742:15;11731:26;;11653:4;11650:1;11646:12;11641:17;;11617:154;;;11800:6;11795:3;11791:16;11784:23;;11483:334;;11297:520;;11085:738;;10978:845;;;;:::o;11829:366::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:::-;14947:3;14968:67;15032:2;15027:3;14968:67;:::i;:::-;14961:74;;15044:93;15133:3;15044:93;:::i;:::-;15162:2;15157:3;15153:12;15146:19;;14805:366;;;:::o;15177:::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:::-;15691:3;15712:67;15776:2;15771:3;15712:67;:::i;:::-;15705:74;;15788:93;15877:3;15788:93;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15549:366;;;:::o;15921:::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:::-;16435:3;16456:67;16520:2;16515:3;16456:67;:::i;:::-;16449:74;;16532:93;16621:3;16532:93;:::i;:::-;16650:2;16645:3;16641:12;16634:19;;16293:366;;;:::o;16665:::-;16807:3;16828:67;16892:2;16887:3;16828:67;:::i;:::-;16821:74;;16904:93;16993:3;16904:93;:::i;:::-;17022:2;17017:3;17013:12;17006:19;;16665:366;;;:::o;17037:::-;17179:3;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17276:93;17365:3;17276:93;:::i;:::-;17394:2;17389:3;17385:12;17378:19;;17037:366;;;:::o;17409:::-;17551:3;17572:67;17636:2;17631:3;17572:67;:::i;:::-;17565:74;;17648:93;17737:3;17648:93;:::i;:::-;17766:2;17761:3;17757:12;17750:19;;17409:366;;;:::o;17781:::-;17923:3;17944:67;18008:2;18003:3;17944:67;:::i;:::-;17937:74;;18020:93;18109:3;18020:93;:::i;:::-;18138:2;18133:3;18129:12;18122:19;;17781:366;;;:::o;18153:::-;18295:3;18316:67;18380:2;18375:3;18316:67;:::i;:::-;18309:74;;18392:93;18481:3;18392:93;:::i;:::-;18510:2;18505:3;18501:12;18494:19;;18153:366;;;:::o;18525:::-;18667:3;18688:67;18752:2;18747:3;18688:67;:::i;:::-;18681:74;;18764:93;18853:3;18764:93;:::i;:::-;18882:2;18877:3;18873:12;18866:19;;18525:366;;;:::o;18897:::-;19039:3;19060:67;19124:2;19119:3;19060:67;:::i;:::-;19053:74;;19136:93;19225:3;19136:93;:::i;:::-;19254:2;19249:3;19245:12;19238:19;;18897:366;;;:::o;19269:::-;19411:3;19432:67;19496:2;19491:3;19432:67;:::i;:::-;19425:74;;19508:93;19597:3;19508:93;:::i;:::-;19626:2;19621:3;19617:12;19610:19;;19269:366;;;:::o;19641:::-;19783:3;19804:67;19868:2;19863:3;19804:67;:::i;:::-;19797:74;;19880:93;19969:3;19880:93;:::i;:::-;19998:2;19993:3;19989:12;19982:19;;19641:366;;;:::o;20013:::-;20155:3;20176:67;20240:2;20235:3;20176:67;:::i;:::-;20169:74;;20252:93;20341:3;20252:93;:::i;:::-;20370:2;20365:3;20361:12;20354:19;;20013:366;;;:::o;20385:::-;20527:3;20548:67;20612:2;20607:3;20548:67;:::i;:::-;20541:74;;20624:93;20713:3;20624:93;:::i;:::-;20742:2;20737:3;20733:12;20726:19;;20385:366;;;:::o;20757:::-;20899:3;20920:67;20984:2;20979:3;20920:67;:::i;:::-;20913:74;;20996:93;21085:3;20996:93;:::i;:::-;21114:2;21109:3;21105:12;21098:19;;20757:366;;;:::o;21129:108::-;21206:24;21224:5;21206:24;:::i;:::-;21201:3;21194:37;21129:108;;:::o;21243:118::-;21330:24;21348:5;21330:24;:::i;:::-;21325:3;21318:37;21243:118;;:::o;21367:589::-;21592:3;21614:95;21705:3;21696:6;21614:95;:::i;:::-;21607:102;;21726:95;21817:3;21808:6;21726:95;:::i;:::-;21719:102;;21838:92;21926:3;21917:6;21838:92;:::i;:::-;21831:99;;21947:3;21940:10;;21367:589;;;;;;:::o;21962:222::-;22055:4;22093:2;22082:9;22078:18;22070:26;;22106:71;22174:1;22163:9;22159:17;22150:6;22106:71;:::i;:::-;21962:222;;;;:::o;22190:640::-;22385:4;22423:3;22412:9;22408:19;22400:27;;22437:71;22505:1;22494:9;22490:17;22481:6;22437:71;:::i;:::-;22518:72;22586:2;22575:9;22571:18;22562:6;22518:72;:::i;:::-;22600;22668:2;22657:9;22653:18;22644:6;22600:72;:::i;:::-;22719:9;22713:4;22709:20;22704:2;22693:9;22689:18;22682:48;22747:76;22818:4;22809:6;22747:76;:::i;:::-;22739:84;;22190:640;;;;;;;:::o;22836:373::-;22979:4;23017:2;23006:9;23002:18;22994:26;;23066:9;23060:4;23056:20;23052:1;23041:9;23037:17;23030:47;23094:108;23197:4;23188:6;23094:108;:::i;:::-;23086:116;;22836:373;;;;:::o;23215:210::-;23302:4;23340:2;23329:9;23325:18;23317:26;;23353:65;23415:1;23404:9;23400:17;23391:6;23353:65;:::i;:::-;23215:210;;;;:::o;23431:313::-;23544:4;23582:2;23571:9;23567:18;23559:26;;23631:9;23625:4;23621:20;23617:1;23606:9;23602:17;23595:47;23659:78;23732:4;23723:6;23659:78;:::i;:::-;23651:86;;23431:313;;;;:::o;23750:419::-;23916:4;23954:2;23943:9;23939:18;23931:26;;24003:9;23997:4;23993:20;23989:1;23978:9;23974:17;23967:47;24031:131;24157:4;24031:131;:::i;:::-;24023:139;;23750:419;;;:::o;24175:::-;24341:4;24379:2;24368:9;24364:18;24356:26;;24428:9;24422:4;24418:20;24414:1;24403:9;24399:17;24392:47;24456:131;24582:4;24456:131;:::i;:::-;24448:139;;24175:419;;;:::o;24600:::-;24766:4;24804:2;24793:9;24789:18;24781:26;;24853:9;24847:4;24843:20;24839:1;24828:9;24824:17;24817:47;24881:131;25007:4;24881:131;:::i;:::-;24873:139;;24600:419;;;:::o;25025:::-;25191:4;25229:2;25218:9;25214:18;25206:26;;25278:9;25272:4;25268:20;25264:1;25253:9;25249:17;25242:47;25306:131;25432:4;25306:131;:::i;:::-;25298:139;;25025:419;;;:::o;25450:::-;25616:4;25654:2;25643:9;25639:18;25631:26;;25703:9;25697:4;25693:20;25689:1;25678:9;25674:17;25667:47;25731:131;25857:4;25731:131;:::i;:::-;25723:139;;25450:419;;;:::o;25875:::-;26041:4;26079:2;26068:9;26064:18;26056:26;;26128:9;26122:4;26118:20;26114:1;26103:9;26099:17;26092:47;26156:131;26282:4;26156:131;:::i;:::-;26148:139;;25875:419;;;:::o;26300:::-;26466:4;26504:2;26493:9;26489:18;26481:26;;26553:9;26547:4;26543:20;26539:1;26528:9;26524:17;26517:47;26581:131;26707:4;26581:131;:::i;:::-;26573:139;;26300:419;;;:::o;26725:::-;26891:4;26929:2;26918:9;26914:18;26906:26;;26978:9;26972:4;26968:20;26964:1;26953:9;26949:17;26942:47;27006:131;27132:4;27006:131;:::i;:::-;26998:139;;26725:419;;;:::o;27150:::-;27316:4;27354:2;27343:9;27339:18;27331:26;;27403:9;27397:4;27393:20;27389:1;27378:9;27374:17;27367:47;27431:131;27557:4;27431:131;:::i;:::-;27423:139;;27150:419;;;:::o;27575:::-;27741:4;27779:2;27768:9;27764:18;27756:26;;27828:9;27822:4;27818:20;27814:1;27803:9;27799:17;27792:47;27856:131;27982:4;27856:131;:::i;:::-;27848:139;;27575:419;;;:::o;28000:::-;28166:4;28204:2;28193:9;28189:18;28181:26;;28253:9;28247:4;28243:20;28239:1;28228:9;28224:17;28217:47;28281:131;28407:4;28281:131;:::i;:::-;28273:139;;28000:419;;;:::o;28425:::-;28591:4;28629:2;28618:9;28614:18;28606:26;;28678:9;28672:4;28668:20;28664:1;28653:9;28649:17;28642:47;28706:131;28832:4;28706:131;:::i;:::-;28698:139;;28425:419;;;:::o;28850:::-;29016:4;29054:2;29043:9;29039:18;29031:26;;29103:9;29097:4;29093:20;29089:1;29078:9;29074:17;29067:47;29131:131;29257:4;29131:131;:::i;:::-;29123:139;;28850:419;;;:::o;29275:::-;29441:4;29479:2;29468:9;29464:18;29456:26;;29528:9;29522:4;29518:20;29514:1;29503:9;29499:17;29492:47;29556:131;29682:4;29556:131;:::i;:::-;29548:139;;29275:419;;;:::o;29700:::-;29866:4;29904:2;29893:9;29889:18;29881:26;;29953:9;29947:4;29943:20;29939:1;29928:9;29924:17;29917:47;29981:131;30107:4;29981:131;:::i;:::-;29973:139;;29700:419;;;:::o;30125:::-;30291:4;30329:2;30318:9;30314:18;30306:26;;30378:9;30372:4;30368:20;30364:1;30353:9;30349:17;30342:47;30406:131;30532:4;30406:131;:::i;:::-;30398:139;;30125:419;;;:::o;30550:::-;30716:4;30754:2;30743:9;30739:18;30731:26;;30803:9;30797:4;30793:20;30789:1;30778:9;30774:17;30767:47;30831:131;30957:4;30831:131;:::i;:::-;30823:139;;30550:419;;;:::o;30975:::-;31141:4;31179:2;31168:9;31164:18;31156:26;;31228:9;31222:4;31218:20;31214:1;31203:9;31199:17;31192:47;31256:131;31382:4;31256:131;:::i;:::-;31248:139;;30975:419;;;:::o;31400:::-;31566:4;31604:2;31593:9;31589:18;31581:26;;31653:9;31647:4;31643:20;31639:1;31628:9;31624:17;31617:47;31681:131;31807:4;31681:131;:::i;:::-;31673:139;;31400:419;;;:::o;31825:::-;31991:4;32029:2;32018:9;32014:18;32006:26;;32078:9;32072:4;32068:20;32064:1;32053:9;32049:17;32042:47;32106:131;32232:4;32106:131;:::i;:::-;32098:139;;31825:419;;;:::o;32250:::-;32416:4;32454:2;32443:9;32439:18;32431:26;;32503:9;32497:4;32493:20;32489:1;32478:9;32474:17;32467:47;32531:131;32657:4;32531:131;:::i;:::-;32523:139;;32250:419;;;:::o;32675:::-;32841:4;32879:2;32868:9;32864:18;32856:26;;32928:9;32922:4;32918:20;32914:1;32903:9;32899:17;32892:47;32956:131;33082:4;32956:131;:::i;:::-;32948:139;;32675:419;;;:::o;33100:::-;33266:4;33304:2;33293:9;33289:18;33281:26;;33353:9;33347:4;33343:20;33339:1;33328:9;33324:17;33317:47;33381:131;33507:4;33381:131;:::i;:::-;33373:139;;33100:419;;;:::o;33525:::-;33691:4;33729:2;33718:9;33714:18;33706:26;;33778:9;33772:4;33768:20;33764:1;33753:9;33749:17;33742:47;33806:131;33932:4;33806:131;:::i;:::-;33798:139;;33525:419;;;:::o;33950:::-;34116:4;34154:2;34143:9;34139:18;34131:26;;34203:9;34197:4;34193:20;34189:1;34178:9;34174:17;34167:47;34231:131;34357:4;34231:131;:::i;:::-;34223:139;;33950:419;;;:::o;34375:222::-;34468:4;34506:2;34495:9;34491:18;34483:26;;34519:71;34587:1;34576:9;34572:17;34563:6;34519:71;:::i;:::-;34375:222;;;;:::o;34603:129::-;34637:6;34664:20;;:::i;:::-;34654:30;;34693:33;34721:4;34713:6;34693:33;:::i;:::-;34603:129;;;:::o;34738:75::-;34771:6;34804:2;34798:9;34788:19;;34738:75;:::o;34819:307::-;34880:4;34970:18;34962:6;34959:30;34956:56;;;34992:18;;:::i;:::-;34956:56;35030:29;35052:6;35030:29;:::i;:::-;35022:37;;35114:4;35108;35104:15;35096:23;;34819:307;;;:::o;35132:308::-;35194:4;35284:18;35276:6;35273:30;35270:56;;;35306:18;;:::i;:::-;35270:56;35344:29;35366:6;35344:29;:::i;:::-;35336:37;;35428:4;35422;35418:15;35410:23;;35132:308;;;:::o;35446:132::-;35513:4;35536:3;35528:11;;35566:4;35561:3;35557:14;35549:22;;35446:132;;;:::o;35584:141::-;35633:4;35656:3;35648:11;;35679:3;35676:1;35669:14;35713:4;35710:1;35700:18;35692:26;;35584:141;;;:::o;35731:114::-;35798:6;35832:5;35826:12;35816:22;;35731:114;;;:::o;35851:98::-;35902:6;35936:5;35930:12;35920:22;;35851:98;;;:::o;35955:99::-;36007:6;36041:5;36035:12;36025:22;;35955:99;;;:::o;36060:113::-;36130:4;36162;36157:3;36153:14;36145:22;;36060:113;;;:::o;36179:184::-;36278:11;36312:6;36307:3;36300:19;36352:4;36347:3;36343:14;36328:29;;36179:184;;;;:::o;36369:168::-;36452:11;36486:6;36481:3;36474:19;36526:4;36521:3;36517:14;36502:29;;36369:168;;;;:::o;36543:169::-;36627:11;36661:6;36656:3;36649:19;36701:4;36696:3;36692:14;36677:29;;36543:169;;;;:::o;36718:148::-;36820:11;36857:3;36842:18;;36718:148;;;;:::o;36872:305::-;36912:3;36931:20;36949:1;36931:20;:::i;:::-;36926:25;;36965:20;36983:1;36965:20;:::i;:::-;36960:25;;37119:1;37051:66;37047:74;37044:1;37041:81;37038:107;;;37125:18;;:::i;:::-;37038:107;37169:1;37166;37162:9;37155:16;;36872:305;;;;:::o;37183:185::-;37223:1;37240:20;37258:1;37240:20;:::i;:::-;37235:25;;37274:20;37292:1;37274:20;:::i;:::-;37269:25;;37313:1;37303:35;;37318:18;;:::i;:::-;37303:35;37360:1;37357;37353:9;37348:14;;37183:185;;;;:::o;37374:348::-;37414:7;37437:20;37455:1;37437:20;:::i;:::-;37432:25;;37471:20;37489:1;37471:20;:::i;:::-;37466:25;;37659:1;37591:66;37587:74;37584:1;37581:81;37576:1;37569:9;37562:17;37558:105;37555:131;;;37666:18;;:::i;:::-;37555:131;37714:1;37711;37707:9;37696:20;;37374:348;;;;:::o;37728:191::-;37768:4;37788:20;37806:1;37788:20;:::i;:::-;37783:25;;37822:20;37840:1;37822:20;:::i;:::-;37817:25;;37861:1;37858;37855:8;37852:34;;;37866:18;;:::i;:::-;37852:34;37911:1;37908;37904:9;37896:17;;37728:191;;;;:::o;37925:96::-;37962:7;37991:24;38009:5;37991:24;:::i;:::-;37980:35;;37925:96;;;:::o;38027:90::-;38061:7;38104:5;38097:13;38090:21;38079:32;;38027:90;;;:::o;38123:149::-;38159:7;38199:66;38192:5;38188:78;38177:89;;38123:149;;;:::o;38278:126::-;38315:7;38355:42;38348:5;38344:54;38333:65;;38278:126;;;:::o;38410:77::-;38447:7;38476:5;38465:16;;38410:77;;;:::o;38493:154::-;38577:6;38572:3;38567;38554:30;38639:1;38630:6;38625:3;38621:16;38614:27;38493:154;;;:::o;38653:307::-;38721:1;38731:113;38745:6;38742:1;38739:13;38731:113;;;38830:1;38825:3;38821:11;38815:18;38811:1;38806:3;38802:11;38795:39;38767:2;38764:1;38760:10;38755:15;;38731:113;;;38862:6;38859:1;38856:13;38853:101;;;38942:1;38933:6;38928:3;38924:16;38917:27;38853:101;38702:258;38653:307;;;:::o;38966:320::-;39010:6;39047:1;39041:4;39037:12;39027:22;;39094:1;39088:4;39084:12;39115:18;39105:81;;39171:4;39163:6;39159:17;39149:27;;39105:81;39233:2;39225:6;39222:14;39202:18;39199:38;39196:84;;;39252:18;;:::i;:::-;39196:84;39017:269;38966:320;;;:::o;39292:281::-;39375:27;39397:4;39375:27;:::i;:::-;39367:6;39363:40;39505:6;39493:10;39490:22;39469:18;39457:10;39454:34;39451:62;39448:88;;;39516:18;;:::i;:::-;39448:88;39556:10;39552:2;39545:22;39335:238;39292:281;;:::o;39579:233::-;39618:3;39641:24;39659:5;39641:24;:::i;:::-;39632:33;;39687:66;39680:5;39677:77;39674:103;;;39757:18;;:::i;:::-;39674:103;39804:1;39797:5;39793:13;39786:20;;39579:233;;;:::o;39818:176::-;39850:1;39867:20;39885:1;39867:20;:::i;:::-;39862:25;;39901:20;39919:1;39901:20;:::i;:::-;39896:25;;39940:1;39930:35;;39945:18;;:::i;:::-;39930:35;39986:1;39983;39979:9;39974:14;;39818:176;;;;:::o;40000:180::-;40048:77;40045:1;40038:88;40145:4;40142:1;40135:15;40169:4;40166:1;40159:15;40186:180;40234:77;40231:1;40224:88;40331:4;40328:1;40321:15;40355:4;40352:1;40345:15;40372:180;40420:77;40417:1;40410:88;40517:4;40514:1;40507:15;40541:4;40538:1;40531:15;40558:180;40606:77;40603:1;40596:88;40703:4;40700:1;40693:15;40727:4;40724:1;40717:15;40744:180;40792:77;40789:1;40782:88;40889:4;40886:1;40879:15;40913:4;40910:1;40903:15;40930:180;40978:77;40975:1;40968:88;41075:4;41072:1;41065:15;41099:4;41096:1;41089:15;41116:117;41225:1;41222;41215:12;41239:117;41348:1;41345;41338:12;41362:117;41471:1;41468;41461:12;41485:117;41594:1;41591;41584:12;41608:117;41717:1;41714;41707:12;41731:117;41840:1;41837;41830:12;41854:102;41895:6;41946:2;41942:7;41937:2;41930:5;41926:14;41922:28;41912:38;;41854:102;;;:::o;41962:230::-;42102:34;42098:1;42090:6;42086:14;42079:58;42171:13;42166:2;42158:6;42154:15;42147:38;41962:230;:::o;42198:237::-;42338:34;42334:1;42326:6;42322:14;42315:58;42407:20;42402:2;42394:6;42390:15;42383:45;42198:237;:::o;42441:225::-;42581:34;42577:1;42569:6;42565:14;42558:58;42650:8;42645:2;42637:6;42633:15;42626:33;42441:225;:::o;42672:178::-;42812:30;42808:1;42800:6;42796:14;42789:54;42672:178;:::o;42856:::-;42996:30;42992:1;42984:6;42980:14;42973:54;42856:178;:::o;43040:223::-;43180:34;43176:1;43168:6;43164:14;43157:58;43249:6;43244:2;43236:6;43232:15;43225:31;43040:223;:::o;43269:175::-;43409:27;43405:1;43397:6;43393:14;43386:51;43269:175;:::o;43450:231::-;43590:34;43586:1;43578:6;43574:14;43567:58;43659:14;43654:2;43646:6;43642:15;43635:39;43450:231;:::o;43687:243::-;43827:34;43823:1;43815:6;43811:14;43804:58;43896:26;43891:2;43883:6;43879:15;43872:51;43687:243;:::o;43936:229::-;44076:34;44072:1;44064:6;44060:14;44053:58;44145:12;44140:2;44132:6;44128:15;44121:37;43936:229;:::o;44171:228::-;44311:34;44307:1;44299:6;44295:14;44288:58;44380:11;44375:2;44367:6;44363:15;44356:36;44171:228;:::o;44405:172::-;44545:24;44541:1;44533:6;44529:14;44522:48;44405:172;:::o;44583:223::-;44723:34;44719:1;44711:6;44707:14;44700:58;44792:6;44787:2;44779:6;44775:15;44768:31;44583:223;:::o;44812:182::-;44952:34;44948:1;44940:6;44936:14;44929:58;44812:182;:::o;45000:231::-;45140:34;45136:1;45128:6;45124:14;45117:58;45209:14;45204:2;45196:6;45192:15;45185:39;45000:231;:::o;45237:182::-;45377:34;45373:1;45365:6;45361:14;45354:58;45237:182;:::o;45425:172::-;45565:24;45561:1;45553:6;45549:14;45542:48;45425:172;:::o;45603:228::-;45743:34;45739:1;45731:6;45727:14;45720:58;45812:11;45807:2;45799:6;45795:15;45788:36;45603:228;:::o;45837:234::-;45977:34;45973:1;45965:6;45961:14;45954:58;46046:17;46041:2;46033:6;46029:15;46022:42;45837:234;:::o;46077:220::-;46217:34;46213:1;46205:6;46201:14;46194:58;46286:3;46281:2;46273:6;46269:15;46262:28;46077:220;:::o;46303:168::-;46443:20;46439:1;46431:6;46427:14;46420:44;46303:168;:::o;46477:236::-;46617:34;46613:1;46605:6;46601:14;46594:58;46686:19;46681:2;46673:6;46669:15;46662:44;46477:236;:::o;46719:231::-;46859:34;46855:1;46847:6;46843:14;46836:58;46928:14;46923:2;46915:6;46911:15;46904:39;46719:231;:::o;46956:173::-;47096:25;47092:1;47084:6;47080:14;47073:49;46956:173;:::o;47135:177::-;47275:29;47271:1;47263:6;47259:14;47252:53;47135:177;:::o;47318:122::-;47391:24;47409:5;47391:24;:::i;:::-;47384:5;47381:35;47371:63;;47430:1;47427;47420:12;47371:63;47318:122;:::o;47446:116::-;47516:21;47531:5;47516:21;:::i;:::-;47509:5;47506:32;47496:60;;47552:1;47549;47542:12;47496:60;47446:116;:::o;47568:120::-;47640:23;47657:5;47640:23;:::i;:::-;47633:5;47630:34;47620:62;;47678:1;47675;47668:12;47620:62;47568:120;:::o;47694:122::-;47767:24;47785:5;47767:24;:::i;:::-;47760:5;47757:35;47747:63;;47806:1;47803;47796:12;47747:63;47694:122;:::o
Swarm Source
ipfs://d4289c619d88a97182cf7f8a9720892c216c31ce0e9bc010c074db81d6eb3dec
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.