Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
1,695 NFTG OG
Holders
511
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 NFTG OGLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MemberCard
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-30 */ // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] 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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).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/[email protected] 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/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/math/[email protected] pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File contracts/ERC721Pausable.sol pragma solidity ^0.8.0; /** * @dev ERC721 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC721Pausable is ERC721, Ownable, Pausable { /** * @dev See {ERC721-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (_msgSender() != owner()) { require(!paused(), "ERC721Pausable: token transfer while paused"); } } } // File contracts/MemberCard.sol pragma solidity ^0.8.0; contract MemberCard is ERC721Enumerable, Ownable, ERC721Burnable, ERC721Pausable { using SafeMath for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenIdTracker; uint256 public constant MAX_ELEMENTS = 10000; uint256 public constant PRICE = 888 * 10**14; uint256 public constant MAX_BY_MINT = 20; uint256 public constant RESERVE = 175; address public constant treasuryAddress = 0xf7Fe522a09af80e04F8340f7D9B4641814b510C2; string public baseTokenURI; event CreateMembership(uint256 indexed id); constructor(string memory baseURI) ERC721("NFTG Opus Guild", "NFTG OG") { setBaseURI(baseURI); pause(true); } modifier saleIsOpen { require(_totalSupply() <= MAX_ELEMENTS, "Sale end"); if (_msgSender() != owner()) { require(!paused(), "Pausable: paused"); } _; } function _totalSupply() internal view returns (uint256) { return _tokenIdTracker.current(); } function totalMint() public view returns (uint256) { return _totalSupply(); } function mint(address _to, uint256 _count) public payable saleIsOpen { uint256 total = _totalSupply() + RESERVE; if (_msgSender() == owner()) { total = _totalSupply(); } require(total + _count <= MAX_ELEMENTS, "Max limit"); require(total <= MAX_ELEMENTS, "Sale end"); require(_count <= MAX_BY_MINT, "Exceeds number"); require(msg.value >= price(_count), "Value below price"); for (uint256 i = 0; i < _count; i++) { _mintAnElement(_to); } } function _mintAnElement(address _to) private { uint256 id = _totalSupply(); _tokenIdTracker.increment(); _safeMint(_to, id); emit CreateMembership(id); } function price(uint256 _count) public pure returns (uint256) { return PRICE.mul(_count); } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } function walletOfOwner(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function pause(bool val) public onlyOwner { if (val == true) { _pause(); return; } _unpause(); } function withdrawAll() public payable onlyOwner { uint256 balance = address(this).balance; require(balance > 0); _withdraw(treasuryAddress, address(this).balance); } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override(ERC721, ERC721Enumerable, ERC721Pausable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"CreateMembership","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_BY_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE","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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"totalMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620053763803806200537683398181016040528101906200003791906200065a565b6040518060400160405280600f81526020017f4e465447204f707573204775696c6400000000000000000000000000000000008152506040518060400160405280600781526020017f4e465447204f47000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb9291906200052c565b508060019080519060200190620000d49291906200052c565b505050620000f7620000eb6200013c60201b60201c565b6200014460201b60201c565b6000600a60146101000a81548160ff02191690831515021790555062000123816200020a60201b60201c565b620001356001620002b560201b60201c565b50620009f8565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200021a6200013c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002406200037c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002909062000792565b60405180910390fd5b80600c9080519060200190620002b19291906200052c565b5050565b620002c56200013c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002eb6200037c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000344576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200033b9062000792565b60405180910390fd5b600115158115151415620003685762000362620003a660201b60201c565b62000379565b620003786200045e60201b60201c565b5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003b66200051560201b60201c565b15620003f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003f09062000770565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620004456200013c60201b60201c565b60405162000454919062000731565b60405180910390a1565b6200046e6200051560201b60201c565b620004b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a7906200074e565b60405180910390fd5b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa620004fc6200013c60201b60201c565b6040516200050b919062000731565b60405180910390a1565b6000600a60149054906101000a900460ff16905090565b8280546200053a906200088e565b90600052602060002090601f0160209004810192826200055e5760008555620005aa565b82601f106200057957805160ff1916838001178555620005aa565b82800160010185558215620005aa579182015b82811115620005a95782518255916020019190600101906200058c565b5b509050620005b99190620005bd565b5090565b5b80821115620005d8576000816000905550600101620005be565b5090565b6000620005f3620005ed84620007dd565b620007b4565b9050828152602081018484840111156200061257620006116200095d565b5b6200061f84828562000858565b509392505050565b600082601f8301126200063f576200063e62000958565b5b815162000651848260208601620005dc565b91505092915050565b60006020828403121562000673576200067262000967565b5b600082015167ffffffffffffffff81111562000694576200069362000962565b5b620006a28482850162000627565b91505092915050565b620006b68162000824565b82525050565b6000620006cb60148362000813565b9150620006d8826200097d565b602082019050919050565b6000620006f260108362000813565b9150620006ff82620009a6565b602082019050919050565b60006200071960208362000813565b91506200072682620009cf565b602082019050919050565b6000602082019050620007486000830184620006ab565b92915050565b600060208201905081810360008301526200076981620006bc565b9050919050565b600060208201905081810360008301526200078b81620006e3565b9050919050565b60006020820190508181036000830152620007ad816200070a565b9050919050565b6000620007c0620007d3565b9050620007ce8282620008c4565b919050565b6000604051905090565b600067ffffffffffffffff821115620007fb57620007fa62000929565b5b62000806826200096c565b9050602081019050919050565b600082825260208201905092915050565b6000620008318262000838565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620008785780820151818401526020810190506200085b565b8381111562000888576000848401525b50505050565b60006002820490506001821680620008a757607f821691505b60208210811415620008be57620008bd620008fa565b5b50919050565b620008cf826200096c565b810181811067ffffffffffffffff82111715620008f157620008f062000929565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61496e8062000a086000396000f3fe6080604052600436106101f95760003560e01c80635c975abb1161010d57806395d89b41116100a0578063c5f956af1161006f578063c5f956af14610719578063c87b56dd14610744578063d547cfb714610781578063e985e9c5146107ac578063f2fde38b146107e9576101f9565b806395d89b41146106715780639d2cc4361461069c578063a22cb465146106c7578063b88d4fde146106f0576101f9565b8063853828b6116100dc578063853828b6146105e65780638ad5de28146105f05780638d859f3e1461061b5780638da5cb5b14610646576101f9565b80635c975abb1461052a5780636352211e1461055557806370a0823114610592578063715018a6146105cf576101f9565b80632f745c591161019057806342966c681161015f57806342966c6814610433578063438b63001461045c5780634f6ccce71461049957806355f804b3146104d657806359a7715a146104ff576101f9565b80632f745c59146103865780633502a716146103c357806340c10f19146103ee57806342842e0e1461040a576101f9565b8063095ea7b3116101cc578063095ea7b3146102cc57806318160ddd146102f557806323b872dd1461032057806326a49e3714610349576101f9565b806301ffc9a7146101fe57806302329a291461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906132be565b610812565b6040516102329190613979565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190613291565b610824565b005b34801561027057600080fd5b506102796108c6565b6040516102869190613994565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190613361565b610958565b6040516102c391906138f0565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee9190613251565b6109dd565b005b34801561030157600080fd5b5061030a610af5565b6040516103179190613d16565b60405180910390f35b34801561032c57600080fd5b506103476004803603810190610342919061313b565b610b02565b005b34801561035557600080fd5b50610370600480360381019061036b9190613361565b610b62565b60405161037d9190613d16565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613251565b610b86565b6040516103ba9190613d16565b60405180910390f35b3480156103cf57600080fd5b506103d8610c2b565b6040516103e59190613d16565b60405180910390f35b61040860048036038101906104039190613251565b610c31565b005b34801561041657600080fd5b50610431600480360381019061042c919061313b565b610ebd565b005b34801561043f57600080fd5b5061045a60048036038101906104559190613361565b610edd565b005b34801561046857600080fd5b50610483600480360381019061047e91906130ce565b610f39565b6040516104909190613957565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613361565b610fe7565b6040516104cd9190613d16565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613318565b611058565b005b34801561050b57600080fd5b506105146110ee565b6040516105219190613d16565b60405180910390f35b34801561053657600080fd5b5061053f6110fd565b60405161054c9190613979565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613361565b611114565b60405161058991906138f0565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b491906130ce565b6111c6565b6040516105c69190613d16565b60405180910390f35b3480156105db57600080fd5b506105e461127e565b005b6105ee611306565b005b3480156105fc57600080fd5b506106056113b5565b6040516106129190613d16565b60405180910390f35b34801561062757600080fd5b506106306113ba565b60405161063d9190613d16565b60405180910390f35b34801561065257600080fd5b5061065b6113c6565b60405161066891906138f0565b60405180910390f35b34801561067d57600080fd5b506106866113f0565b6040516106939190613994565b60405180910390f35b3480156106a857600080fd5b506106b1611482565b6040516106be9190613d16565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190613211565b611487565b005b3480156106fc57600080fd5b506107176004803603810190610712919061318e565b611608565b005b34801561072557600080fd5b5061072e61166a565b60405161073b91906138f0565b60405180910390f35b34801561075057600080fd5b5061076b60048036038101906107669190613361565b611682565b6040516107789190613994565b60405180910390f35b34801561078d57600080fd5b50610796611729565b6040516107a39190613994565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce91906130fb565b6117b7565b6040516107e09190613979565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b91906130ce565b61184b565b005b600061081d82611943565b9050919050565b61082c6119bd565b73ffffffffffffffffffffffffffffffffffffffff1661084a6113c6565b73ffffffffffffffffffffffffffffffffffffffff16146108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089790613bf6565b60405180910390fd5b6001151581151514156108ba576108b56119c5565b6108c3565b6108c2611a68565b5b50565b6060600080546108d59061400a565b80601f01602080910402602001604051908101604052809291908181526020018280546109019061400a565b801561094e5780601f106109235761010080835404028352916020019161094e565b820191906000526020600020905b81548152906001019060200180831161093157829003601f168201915b5050505050905090565b600061096382611b0a565b6109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990613bd6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e882611114565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5090613c76565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a786119bd565b73ffffffffffffffffffffffffffffffffffffffff161480610aa75750610aa681610aa16119bd565b6117b7565b5b610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90613b36565b60405180910390fd5b610af08383611b76565b505050565b6000600880549050905090565b610b13610b0d6119bd565b82611c2f565b610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4990613cb6565b60405180910390fd5b610b5d838383611d0d565b505050565b6000610b7f8267013b7b21280e0000611f6990919063ffffffff16565b9050919050565b6000610b91836111c6565b8210610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613a16565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b612710610c3c611f7f565b1115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613bb6565b60405180910390fd5b610c856113c6565b73ffffffffffffffffffffffffffffffffffffffff16610ca36119bd565b73ffffffffffffffffffffffffffffffffffffffff1614610d0757610cc66110fd565b15610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90613b16565b60405180910390fd5b5b600060af610d13611f7f565b610d1d9190613e3f565b9050610d276113c6565b73ffffffffffffffffffffffffffffffffffffffff16610d456119bd565b73ffffffffffffffffffffffffffffffffffffffff161415610d6c57610d69611f7f565b90505b6127108282610d7b9190613e3f565b1115610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390613ad6565b60405180910390fd5b612710811115610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890613bb6565b60405180910390fd5b6014821115610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c906139f6565b60405180910390fd5b610e4e82610b62565b341015610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8790613c56565b60405180910390fd5b60005b82811015610eb757610ea484611f90565b8080610eaf9061406d565b915050610e93565b50505050565b610ed883838360405180602001604052806000815250611608565b505050565b610eee610ee86119bd565b82611c2f565b610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490613cf6565b60405180910390fd5b610f3681611fe1565b50565b60606000610f46836111c6565b905060008167ffffffffffffffff811115610f6457610f636141d2565b5b604051908082528060200260200182016040528015610f925781602001602082028036833780820191505090505b50905060005b82811015610fdc57610faa8582610b86565b828281518110610fbd57610fbc6141a3565b5b6020026020010181815250508080610fd49061406d565b915050610f98565b508092505050919050565b6000610ff1610af5565b8210611032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102990613cd6565b60405180910390fd5b60088281548110611046576110456141a3565b5b90600052602060002001549050919050565b6110606119bd565b73ffffffffffffffffffffffffffffffffffffffff1661107e6113c6565b73ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90613bf6565b60405180910390fd5b80600c90805190602001906110ea929190612ee2565b5050565b60006110f8611f7f565b905090565b6000600a60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b490613b76565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e90613b56565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112866119bd565b73ffffffffffffffffffffffffffffffffffffffff166112a46113c6565b73ffffffffffffffffffffffffffffffffffffffff16146112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190613bf6565b60405180910390fd5b61130460006120f2565b565b61130e6119bd565b73ffffffffffffffffffffffffffffffffffffffff1661132c6113c6565b73ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990613bf6565b60405180910390fd5b60004790506000811161139457600080fd5b6113b273f7fe522a09af80e04f8340f7d9b4641814b510c2476121b8565b50565b601481565b67013b7b21280e000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113ff9061400a565b80601f016020809104026020016040519081016040528092919081815260200182805461142b9061400a565b80156114785780601f1061144d57610100808354040283529160200191611478565b820191906000526020600020905b81548152906001019060200180831161145b57829003601f168201915b5050505050905090565b60af81565b61148f6119bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490613ab6565b60405180910390fd5b806005600061150a6119bd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115b76119bd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115fc9190613979565b60405180910390a35050565b6116196116136119bd565b83611c2f565b611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613cb6565b60405180910390fd5b61166484848484612269565b50505050565b73f7fe522a09af80e04f8340f7d9b4641814b510c281565b606061168d82611b0a565b6116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390613c36565b60405180910390fd5b60006116d66122c5565b905060008151116116f65760405180602001604052806000815250611721565b8061170084612357565b6040516020016117119291906138b7565b6040516020818303038152906040525b915050919050565b600c80546117369061400a565b80601f01602080910402602001604051908101604052809291908181526020018280546117629061400a565b80156117af5780601f10611784576101008083540402835291602001916117af565b820191906000526020600020905b81548152906001019060200180831161179257829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118536119bd565b73ffffffffffffffffffffffffffffffffffffffff166118716113c6565b73ffffffffffffffffffffffffffffffffffffffff16146118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90613bf6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90613a56565b60405180910390fd5b611940816120f2565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119b657506119b5826124b8565b5b9050919050565b600033905090565b6119cd6110fd565b15611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490613b16565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a516119bd565b604051611a5e91906138f0565b60405180910390a1565b611a706110fd565b611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa6906139d6565b60405180910390fd5b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611af36119bd565b604051611b0091906138f0565b60405180910390a1565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611be983611114565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c3a82611b0a565b611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7090613af6565b60405180910390fd5b6000611c8483611114565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cf357508373ffffffffffffffffffffffffffffffffffffffff16611cdb84610958565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d045750611d0381856117b7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d2d82611114565b73ffffffffffffffffffffffffffffffffffffffff1614611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a90613c16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90613a96565b60405180910390fd5b611dfe83838361259a565b611e09600082611b76565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e599190613f20565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eb09190613e3f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183611f779190613ec6565b905092915050565b6000611f8b600b6125aa565b905090565b6000611f9a611f7f565b9050611fa6600b6125b8565b611fb082826125ce565b807f7902436c4ed210cabf3a31c3bdbd41e703cb9da6316c28939cb16f4440ad58cb60405160405180910390a25050565b6000611fec82611114565b9050611ffa8160008461259a565b612005600083611b76565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120559190613f20565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516121de906138db565b60006040518083038185875af1925050503d806000811461221b576040519150601f19603f3d011682016040523d82523d6000602084013e612220565b606091505b5050905080612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b90613c96565b60405180910390fd5b505050565b612274848484611d0d565b612280848484846125ec565b6122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690613a36565b60405180910390fd5b50505050565b6060600c80546122d49061400a565b80601f01602080910402602001604051908101604052809291908181526020018280546123009061400a565b801561234d5780601f106123225761010080835404028352916020019161234d565b820191906000526020600020905b81548152906001019060200180831161233057829003601f168201915b5050505050905090565b6060600082141561239f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124b3565b600082905060005b600082146123d15780806123ba9061406d565b915050600a826123ca9190613e95565b91506123a7565b60008167ffffffffffffffff8111156123ed576123ec6141d2565b5b6040519080825280601f01601f19166020018201604052801561241f5781602001600182028036833780820191505090505b5090505b600085146124ac576001826124389190613f20565b9150600a8561244791906140b6565b60306124539190613e3f565b60f81b818381518110612469576124686141a3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124a59190613e95565b9450612423565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061258357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612593575061259282612783565b5b9050919050565b6125a58383836127ed565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6125e8828260405180602001604052806000815250612887565b5050565b600061260d8473ffffffffffffffffffffffffffffffffffffffff166128e2565b15612776578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126366119bd565b8786866040518563ffffffff1660e01b8152600401612658949392919061390b565b602060405180830381600087803b15801561267257600080fd5b505af19250505080156126a357506040513d601f19601f820116820180604052508101906126a091906132eb565b60015b612726573d80600081146126d3576040519150601f19603f3d011682016040523d82523d6000602084013e6126d8565b606091505b5060008151141561271e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271590613a36565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061277b565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127f88383836128f5565b6128006113c6565b73ffffffffffffffffffffffffffffffffffffffff1661281e6119bd565b73ffffffffffffffffffffffffffffffffffffffff1614612882576128416110fd565b15612881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612878906139b6565b60405180910390fd5b5b505050565b6128918383612a09565b61289e60008484846125ec565b6128dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d490613a36565b60405180910390fd5b505050565b600080823b905060008111915050919050565b612900838383612bd7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129435761293e81612bdc565b612982565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612981576129808382612c25565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129c5576129c081612d92565b612a04565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a0357612a028282612e63565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7090613b96565b60405180910390fd5b612a8281611b0a565b15612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab990613a76565b60405180910390fd5b612ace6000838361259a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b1e9190613e3f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c32846111c6565b612c3c9190613f20565b9050600060076000848152602001908152602001600020549050818114612d21576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612da69190613f20565b9050600060096000848152602001908152602001600020549050600060088381548110612dd657612dd56141a3565b5b906000526020600020015490508060088381548110612df857612df76141a3565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e4757612e46614174565b5b6001900381819060005260206000200160009055905550505050565b6000612e6e836111c6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612eee9061400a565b90600052602060002090601f016020900481019282612f105760008555612f57565b82601f10612f2957805160ff1916838001178555612f57565b82800160010185558215612f57579182015b82811115612f56578251825591602001919060010190612f3b565b5b509050612f649190612f68565b5090565b5b80821115612f81576000816000905550600101612f69565b5090565b6000612f98612f9384613d56565b613d31565b905082815260208101848484011115612fb457612fb3614206565b5b612fbf848285613fc8565b509392505050565b6000612fda612fd584613d87565b613d31565b905082815260208101848484011115612ff657612ff5614206565b5b613001848285613fc8565b509392505050565b600081359050613018816148dc565b92915050565b60008135905061302d816148f3565b92915050565b6000813590506130428161490a565b92915050565b6000815190506130578161490a565b92915050565b600082601f83011261307257613071614201565b5b8135613082848260208601612f85565b91505092915050565b600082601f8301126130a05761309f614201565b5b81356130b0848260208601612fc7565b91505092915050565b6000813590506130c881614921565b92915050565b6000602082840312156130e4576130e3614210565b5b60006130f284828501613009565b91505092915050565b6000806040838503121561311257613111614210565b5b600061312085828601613009565b925050602061313185828601613009565b9150509250929050565b60008060006060848603121561315457613153614210565b5b600061316286828701613009565b935050602061317386828701613009565b9250506040613184868287016130b9565b9150509250925092565b600080600080608085870312156131a8576131a7614210565b5b60006131b687828801613009565b94505060206131c787828801613009565b93505060406131d8878288016130b9565b925050606085013567ffffffffffffffff8111156131f9576131f861420b565b5b6132058782880161305d565b91505092959194509250565b6000806040838503121561322857613227614210565b5b600061323685828601613009565b92505060206132478582860161301e565b9150509250929050565b6000806040838503121561326857613267614210565b5b600061327685828601613009565b9250506020613287858286016130b9565b9150509250929050565b6000602082840312156132a7576132a6614210565b5b60006132b58482850161301e565b91505092915050565b6000602082840312156132d4576132d3614210565b5b60006132e284828501613033565b91505092915050565b60006020828403121561330157613300614210565b5b600061330f84828501613048565b91505092915050565b60006020828403121561332e5761332d614210565b5b600082013567ffffffffffffffff81111561334c5761334b61420b565b5b6133588482850161308b565b91505092915050565b60006020828403121561337757613376614210565b5b6000613385848285016130b9565b91505092915050565b600061339a8383613899565b60208301905092915050565b6133af81613f54565b82525050565b60006133c082613dc8565b6133ca8185613df6565b93506133d583613db8565b8060005b838110156134065781516133ed888261338e565b97506133f883613de9565b9250506001810190506133d9565b5085935050505092915050565b61341c81613f66565b82525050565b600061342d82613dd3565b6134378185613e07565b9350613447818560208601613fd7565b61345081614215565b840191505092915050565b600061346682613dde565b6134708185613e23565b9350613480818560208601613fd7565b61348981614215565b840191505092915050565b600061349f82613dde565b6134a98185613e34565b93506134b9818560208601613fd7565b80840191505092915050565b60006134d2602b83613e23565b91506134dd82614226565b604082019050919050565b60006134f5601483613e23565b915061350082614275565b602082019050919050565b6000613518600e83613e23565b91506135238261429e565b602082019050919050565b600061353b602b83613e23565b9150613546826142c7565b604082019050919050565b600061355e603283613e23565b915061356982614316565b604082019050919050565b6000613581602683613e23565b915061358c82614365565b604082019050919050565b60006135a4601c83613e23565b91506135af826143b4565b602082019050919050565b60006135c7602483613e23565b91506135d2826143dd565b604082019050919050565b60006135ea601983613e23565b91506135f58261442c565b602082019050919050565b600061360d600983613e23565b915061361882614455565b602082019050919050565b6000613630602c83613e23565b915061363b8261447e565b604082019050919050565b6000613653601083613e23565b915061365e826144cd565b602082019050919050565b6000613676603883613e23565b9150613681826144f6565b604082019050919050565b6000613699602a83613e23565b91506136a482614545565b604082019050919050565b60006136bc602983613e23565b91506136c782614594565b604082019050919050565b60006136df602083613e23565b91506136ea826145e3565b602082019050919050565b6000613702600883613e23565b915061370d8261460c565b602082019050919050565b6000613725602c83613e23565b915061373082614635565b604082019050919050565b6000613748602083613e23565b915061375382614684565b602082019050919050565b600061376b602983613e23565b9150613776826146ad565b604082019050919050565b600061378e602f83613e23565b9150613799826146fc565b604082019050919050565b60006137b1601183613e23565b91506137bc8261474b565b602082019050919050565b60006137d4602183613e23565b91506137df82614774565b604082019050919050565b60006137f7600083613e18565b9150613802826147c3565b600082019050919050565b600061381a601083613e23565b9150613825826147c6565b602082019050919050565b600061383d603183613e23565b9150613848826147ef565b604082019050919050565b6000613860602c83613e23565b915061386b8261483e565b604082019050919050565b6000613883603083613e23565b915061388e8261488d565b604082019050919050565b6138a281613fbe565b82525050565b6138b181613fbe565b82525050565b60006138c38285613494565b91506138cf8284613494565b91508190509392505050565b60006138e6826137ea565b9150819050919050565b600060208201905061390560008301846133a6565b92915050565b600060808201905061392060008301876133a6565b61392d60208301866133a6565b61393a60408301856138a8565b818103606083015261394c8184613422565b905095945050505050565b6000602082019050818103600083015261397181846133b5565b905092915050565b600060208201905061398e6000830184613413565b92915050565b600060208201905081810360008301526139ae818461345b565b905092915050565b600060208201905081810360008301526139cf816134c5565b9050919050565b600060208201905081810360008301526139ef816134e8565b9050919050565b60006020820190508181036000830152613a0f8161350b565b9050919050565b60006020820190508181036000830152613a2f8161352e565b9050919050565b60006020820190508181036000830152613a4f81613551565b9050919050565b60006020820190508181036000830152613a6f81613574565b9050919050565b60006020820190508181036000830152613a8f81613597565b9050919050565b60006020820190508181036000830152613aaf816135ba565b9050919050565b60006020820190508181036000830152613acf816135dd565b9050919050565b60006020820190508181036000830152613aef81613600565b9050919050565b60006020820190508181036000830152613b0f81613623565b9050919050565b60006020820190508181036000830152613b2f81613646565b9050919050565b60006020820190508181036000830152613b4f81613669565b9050919050565b60006020820190508181036000830152613b6f8161368c565b9050919050565b60006020820190508181036000830152613b8f816136af565b9050919050565b60006020820190508181036000830152613baf816136d2565b9050919050565b60006020820190508181036000830152613bcf816136f5565b9050919050565b60006020820190508181036000830152613bef81613718565b9050919050565b60006020820190508181036000830152613c0f8161373b565b9050919050565b60006020820190508181036000830152613c2f8161375e565b9050919050565b60006020820190508181036000830152613c4f81613781565b9050919050565b60006020820190508181036000830152613c6f816137a4565b9050919050565b60006020820190508181036000830152613c8f816137c7565b9050919050565b60006020820190508181036000830152613caf8161380d565b9050919050565b60006020820190508181036000830152613ccf81613830565b9050919050565b60006020820190508181036000830152613cef81613853565b9050919050565b60006020820190508181036000830152613d0f81613876565b9050919050565b6000602082019050613d2b60008301846138a8565b92915050565b6000613d3b613d4c565b9050613d47828261403c565b919050565b6000604051905090565b600067ffffffffffffffff821115613d7157613d706141d2565b5b613d7a82614215565b9050602081019050919050565b600067ffffffffffffffff821115613da257613da16141d2565b5b613dab82614215565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e4a82613fbe565b9150613e5583613fbe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e8a57613e896140e7565b5b828201905092915050565b6000613ea082613fbe565b9150613eab83613fbe565b925082613ebb57613eba614116565b5b828204905092915050565b6000613ed182613fbe565b9150613edc83613fbe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f1557613f146140e7565b5b828202905092915050565b6000613f2b82613fbe565b9150613f3683613fbe565b925082821015613f4957613f486140e7565b5b828203905092915050565b6000613f5f82613f9e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ff5578082015181840152602081019050613fda565b83811115614004576000848401525b50505050565b6000600282049050600182168061402257607f821691505b6020821081141561403657614035614145565b5b50919050565b61404582614215565b810181811067ffffffffffffffff82111715614064576140636141d2565b5b80604052505050565b600061407882613fbe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140ab576140aa6140e7565b5b600182019050919050565b60006140c182613fbe565b91506140cc83613fbe565b9250826140dc576140db614116565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45786365656473206e756d626572000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6148e581613f54565b81146148f057600080fd5b50565b6148fc81613f66565b811461490757600080fd5b50565b61491381613f72565b811461491e57600080fd5b50565b61492a81613fbe565b811461493557600080fd5b5056fea2646970667358221220c9f8401184cbcc1ec58f45bc616482164a95ee0010d5d3de4077a5617011cabf64736f6c634300080600330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f7265616c6974656d732e6f72672f697066732f516d5175394e56316b6779725850324a7a36563635434e41437a476279537973366735383354324c746739456d423f00000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101f95760003560e01c80635c975abb1161010d57806395d89b41116100a0578063c5f956af1161006f578063c5f956af14610719578063c87b56dd14610744578063d547cfb714610781578063e985e9c5146107ac578063f2fde38b146107e9576101f9565b806395d89b41146106715780639d2cc4361461069c578063a22cb465146106c7578063b88d4fde146106f0576101f9565b8063853828b6116100dc578063853828b6146105e65780638ad5de28146105f05780638d859f3e1461061b5780638da5cb5b14610646576101f9565b80635c975abb1461052a5780636352211e1461055557806370a0823114610592578063715018a6146105cf576101f9565b80632f745c591161019057806342966c681161015f57806342966c6814610433578063438b63001461045c5780634f6ccce71461049957806355f804b3146104d657806359a7715a146104ff576101f9565b80632f745c59146103865780633502a716146103c357806340c10f19146103ee57806342842e0e1461040a576101f9565b8063095ea7b3116101cc578063095ea7b3146102cc57806318160ddd146102f557806323b872dd1461032057806326a49e3714610349576101f9565b806301ffc9a7146101fe57806302329a291461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906132be565b610812565b6040516102329190613979565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190613291565b610824565b005b34801561027057600080fd5b506102796108c6565b6040516102869190613994565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190613361565b610958565b6040516102c391906138f0565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee9190613251565b6109dd565b005b34801561030157600080fd5b5061030a610af5565b6040516103179190613d16565b60405180910390f35b34801561032c57600080fd5b506103476004803603810190610342919061313b565b610b02565b005b34801561035557600080fd5b50610370600480360381019061036b9190613361565b610b62565b60405161037d9190613d16565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613251565b610b86565b6040516103ba9190613d16565b60405180910390f35b3480156103cf57600080fd5b506103d8610c2b565b6040516103e59190613d16565b60405180910390f35b61040860048036038101906104039190613251565b610c31565b005b34801561041657600080fd5b50610431600480360381019061042c919061313b565b610ebd565b005b34801561043f57600080fd5b5061045a60048036038101906104559190613361565b610edd565b005b34801561046857600080fd5b50610483600480360381019061047e91906130ce565b610f39565b6040516104909190613957565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613361565b610fe7565b6040516104cd9190613d16565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190613318565b611058565b005b34801561050b57600080fd5b506105146110ee565b6040516105219190613d16565b60405180910390f35b34801561053657600080fd5b5061053f6110fd565b60405161054c9190613979565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190613361565b611114565b60405161058991906138f0565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b491906130ce565b6111c6565b6040516105c69190613d16565b60405180910390f35b3480156105db57600080fd5b506105e461127e565b005b6105ee611306565b005b3480156105fc57600080fd5b506106056113b5565b6040516106129190613d16565b60405180910390f35b34801561062757600080fd5b506106306113ba565b60405161063d9190613d16565b60405180910390f35b34801561065257600080fd5b5061065b6113c6565b60405161066891906138f0565b60405180910390f35b34801561067d57600080fd5b506106866113f0565b6040516106939190613994565b60405180910390f35b3480156106a857600080fd5b506106b1611482565b6040516106be9190613d16565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190613211565b611487565b005b3480156106fc57600080fd5b506107176004803603810190610712919061318e565b611608565b005b34801561072557600080fd5b5061072e61166a565b60405161073b91906138f0565b60405180910390f35b34801561075057600080fd5b5061076b60048036038101906107669190613361565b611682565b6040516107789190613994565b60405180910390f35b34801561078d57600080fd5b50610796611729565b6040516107a39190613994565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce91906130fb565b6117b7565b6040516107e09190613979565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b91906130ce565b61184b565b005b600061081d82611943565b9050919050565b61082c6119bd565b73ffffffffffffffffffffffffffffffffffffffff1661084a6113c6565b73ffffffffffffffffffffffffffffffffffffffff16146108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089790613bf6565b60405180910390fd5b6001151581151514156108ba576108b56119c5565b6108c3565b6108c2611a68565b5b50565b6060600080546108d59061400a565b80601f01602080910402602001604051908101604052809291908181526020018280546109019061400a565b801561094e5780601f106109235761010080835404028352916020019161094e565b820191906000526020600020905b81548152906001019060200180831161093157829003601f168201915b5050505050905090565b600061096382611b0a565b6109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990613bd6565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e882611114565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5090613c76565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a786119bd565b73ffffffffffffffffffffffffffffffffffffffff161480610aa75750610aa681610aa16119bd565b6117b7565b5b610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90613b36565b60405180910390fd5b610af08383611b76565b505050565b6000600880549050905090565b610b13610b0d6119bd565b82611c2f565b610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4990613cb6565b60405180910390fd5b610b5d838383611d0d565b505050565b6000610b7f8267013b7b21280e0000611f6990919063ffffffff16565b9050919050565b6000610b91836111c6565b8210610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990613a16565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b612710610c3c611f7f565b1115610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613bb6565b60405180910390fd5b610c856113c6565b73ffffffffffffffffffffffffffffffffffffffff16610ca36119bd565b73ffffffffffffffffffffffffffffffffffffffff1614610d0757610cc66110fd565b15610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90613b16565b60405180910390fd5b5b600060af610d13611f7f565b610d1d9190613e3f565b9050610d276113c6565b73ffffffffffffffffffffffffffffffffffffffff16610d456119bd565b73ffffffffffffffffffffffffffffffffffffffff161415610d6c57610d69611f7f565b90505b6127108282610d7b9190613e3f565b1115610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390613ad6565b60405180910390fd5b612710811115610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890613bb6565b60405180910390fd5b6014821115610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c906139f6565b60405180910390fd5b610e4e82610b62565b341015610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8790613c56565b60405180910390fd5b60005b82811015610eb757610ea484611f90565b8080610eaf9061406d565b915050610e93565b50505050565b610ed883838360405180602001604052806000815250611608565b505050565b610eee610ee86119bd565b82611c2f565b610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2490613cf6565b60405180910390fd5b610f3681611fe1565b50565b60606000610f46836111c6565b905060008167ffffffffffffffff811115610f6457610f636141d2565b5b604051908082528060200260200182016040528015610f925781602001602082028036833780820191505090505b50905060005b82811015610fdc57610faa8582610b86565b828281518110610fbd57610fbc6141a3565b5b6020026020010181815250508080610fd49061406d565b915050610f98565b508092505050919050565b6000610ff1610af5565b8210611032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102990613cd6565b60405180910390fd5b60088281548110611046576110456141a3565b5b90600052602060002001549050919050565b6110606119bd565b73ffffffffffffffffffffffffffffffffffffffff1661107e6113c6565b73ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90613bf6565b60405180910390fd5b80600c90805190602001906110ea929190612ee2565b5050565b60006110f8611f7f565b905090565b6000600a60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b490613b76565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e90613b56565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112866119bd565b73ffffffffffffffffffffffffffffffffffffffff166112a46113c6565b73ffffffffffffffffffffffffffffffffffffffff16146112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f190613bf6565b60405180910390fd5b61130460006120f2565b565b61130e6119bd565b73ffffffffffffffffffffffffffffffffffffffff1661132c6113c6565b73ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990613bf6565b60405180910390fd5b60004790506000811161139457600080fd5b6113b273f7fe522a09af80e04f8340f7d9b4641814b510c2476121b8565b50565b601481565b67013b7b21280e000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113ff9061400a565b80601f016020809104026020016040519081016040528092919081815260200182805461142b9061400a565b80156114785780601f1061144d57610100808354040283529160200191611478565b820191906000526020600020905b81548152906001019060200180831161145b57829003601f168201915b5050505050905090565b60af81565b61148f6119bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490613ab6565b60405180910390fd5b806005600061150a6119bd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115b76119bd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115fc9190613979565b60405180910390a35050565b6116196116136119bd565b83611c2f565b611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613cb6565b60405180910390fd5b61166484848484612269565b50505050565b73f7fe522a09af80e04f8340f7d9b4641814b510c281565b606061168d82611b0a565b6116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390613c36565b60405180910390fd5b60006116d66122c5565b905060008151116116f65760405180602001604052806000815250611721565b8061170084612357565b6040516020016117119291906138b7565b6040516020818303038152906040525b915050919050565b600c80546117369061400a565b80601f01602080910402602001604051908101604052809291908181526020018280546117629061400a565b80156117af5780601f10611784576101008083540402835291602001916117af565b820191906000526020600020905b81548152906001019060200180831161179257829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118536119bd565b73ffffffffffffffffffffffffffffffffffffffff166118716113c6565b73ffffffffffffffffffffffffffffffffffffffff16146118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90613bf6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90613a56565b60405180910390fd5b611940816120f2565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119b657506119b5826124b8565b5b9050919050565b600033905090565b6119cd6110fd565b15611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490613b16565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a516119bd565b604051611a5e91906138f0565b60405180910390a1565b611a706110fd565b611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa6906139d6565b60405180910390fd5b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611af36119bd565b604051611b0091906138f0565b60405180910390a1565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611be983611114565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c3a82611b0a565b611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7090613af6565b60405180910390fd5b6000611c8483611114565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cf357508373ffffffffffffffffffffffffffffffffffffffff16611cdb84610958565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d045750611d0381856117b7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d2d82611114565b73ffffffffffffffffffffffffffffffffffffffff1614611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a90613c16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90613a96565b60405180910390fd5b611dfe83838361259a565b611e09600082611b76565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e599190613f20565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eb09190613e3f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008183611f779190613ec6565b905092915050565b6000611f8b600b6125aa565b905090565b6000611f9a611f7f565b9050611fa6600b6125b8565b611fb082826125ce565b807f7902436c4ed210cabf3a31c3bdbd41e703cb9da6316c28939cb16f4440ad58cb60405160405180910390a25050565b6000611fec82611114565b9050611ffa8160008461259a565b612005600083611b76565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120559190613f20565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516121de906138db565b60006040518083038185875af1925050503d806000811461221b576040519150601f19603f3d011682016040523d82523d6000602084013e612220565b606091505b5050905080612264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225b90613c96565b60405180910390fd5b505050565b612274848484611d0d565b612280848484846125ec565b6122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690613a36565b60405180910390fd5b50505050565b6060600c80546122d49061400a565b80601f01602080910402602001604051908101604052809291908181526020018280546123009061400a565b801561234d5780601f106123225761010080835404028352916020019161234d565b820191906000526020600020905b81548152906001019060200180831161233057829003601f168201915b5050505050905090565b6060600082141561239f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124b3565b600082905060005b600082146123d15780806123ba9061406d565b915050600a826123ca9190613e95565b91506123a7565b60008167ffffffffffffffff8111156123ed576123ec6141d2565b5b6040519080825280601f01601f19166020018201604052801561241f5781602001600182028036833780820191505090505b5090505b600085146124ac576001826124389190613f20565b9150600a8561244791906140b6565b60306124539190613e3f565b60f81b818381518110612469576124686141a3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124a59190613e95565b9450612423565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061258357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612593575061259282612783565b5b9050919050565b6125a58383836127ed565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6125e8828260405180602001604052806000815250612887565b5050565b600061260d8473ffffffffffffffffffffffffffffffffffffffff166128e2565b15612776578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126366119bd565b8786866040518563ffffffff1660e01b8152600401612658949392919061390b565b602060405180830381600087803b15801561267257600080fd5b505af19250505080156126a357506040513d601f19601f820116820180604052508101906126a091906132eb565b60015b612726573d80600081146126d3576040519150601f19603f3d011682016040523d82523d6000602084013e6126d8565b606091505b5060008151141561271e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271590613a36565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061277b565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127f88383836128f5565b6128006113c6565b73ffffffffffffffffffffffffffffffffffffffff1661281e6119bd565b73ffffffffffffffffffffffffffffffffffffffff1614612882576128416110fd565b15612881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612878906139b6565b60405180910390fd5b5b505050565b6128918383612a09565b61289e60008484846125ec565b6128dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d490613a36565b60405180910390fd5b505050565b600080823b905060008111915050919050565b612900838383612bd7565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129435761293e81612bdc565b612982565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612981576129808382612c25565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129c5576129c081612d92565b612a04565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a0357612a028282612e63565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7090613b96565b60405180910390fd5b612a8281611b0a565b15612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab990613a76565b60405180910390fd5b612ace6000838361259a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b1e9190613e3f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c32846111c6565b612c3c9190613f20565b9050600060076000848152602001908152602001600020549050818114612d21576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612da69190613f20565b9050600060096000848152602001908152602001600020549050600060088381548110612dd657612dd56141a3565b5b906000526020600020015490508060088381548110612df857612df76141a3565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e4757612e46614174565b5b6001900381819060005260206000200160009055905550505050565b6000612e6e836111c6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612eee9061400a565b90600052602060002090601f016020900481019282612f105760008555612f57565b82601f10612f2957805160ff1916838001178555612f57565b82800160010185558215612f57579182015b82811115612f56578251825591602001919060010190612f3b565b5b509050612f649190612f68565b5090565b5b80821115612f81576000816000905550600101612f69565b5090565b6000612f98612f9384613d56565b613d31565b905082815260208101848484011115612fb457612fb3614206565b5b612fbf848285613fc8565b509392505050565b6000612fda612fd584613d87565b613d31565b905082815260208101848484011115612ff657612ff5614206565b5b613001848285613fc8565b509392505050565b600081359050613018816148dc565b92915050565b60008135905061302d816148f3565b92915050565b6000813590506130428161490a565b92915050565b6000815190506130578161490a565b92915050565b600082601f83011261307257613071614201565b5b8135613082848260208601612f85565b91505092915050565b600082601f8301126130a05761309f614201565b5b81356130b0848260208601612fc7565b91505092915050565b6000813590506130c881614921565b92915050565b6000602082840312156130e4576130e3614210565b5b60006130f284828501613009565b91505092915050565b6000806040838503121561311257613111614210565b5b600061312085828601613009565b925050602061313185828601613009565b9150509250929050565b60008060006060848603121561315457613153614210565b5b600061316286828701613009565b935050602061317386828701613009565b9250506040613184868287016130b9565b9150509250925092565b600080600080608085870312156131a8576131a7614210565b5b60006131b687828801613009565b94505060206131c787828801613009565b93505060406131d8878288016130b9565b925050606085013567ffffffffffffffff8111156131f9576131f861420b565b5b6132058782880161305d565b91505092959194509250565b6000806040838503121561322857613227614210565b5b600061323685828601613009565b92505060206132478582860161301e565b9150509250929050565b6000806040838503121561326857613267614210565b5b600061327685828601613009565b9250506020613287858286016130b9565b9150509250929050565b6000602082840312156132a7576132a6614210565b5b60006132b58482850161301e565b91505092915050565b6000602082840312156132d4576132d3614210565b5b60006132e284828501613033565b91505092915050565b60006020828403121561330157613300614210565b5b600061330f84828501613048565b91505092915050565b60006020828403121561332e5761332d614210565b5b600082013567ffffffffffffffff81111561334c5761334b61420b565b5b6133588482850161308b565b91505092915050565b60006020828403121561337757613376614210565b5b6000613385848285016130b9565b91505092915050565b600061339a8383613899565b60208301905092915050565b6133af81613f54565b82525050565b60006133c082613dc8565b6133ca8185613df6565b93506133d583613db8565b8060005b838110156134065781516133ed888261338e565b97506133f883613de9565b9250506001810190506133d9565b5085935050505092915050565b61341c81613f66565b82525050565b600061342d82613dd3565b6134378185613e07565b9350613447818560208601613fd7565b61345081614215565b840191505092915050565b600061346682613dde565b6134708185613e23565b9350613480818560208601613fd7565b61348981614215565b840191505092915050565b600061349f82613dde565b6134a98185613e34565b93506134b9818560208601613fd7565b80840191505092915050565b60006134d2602b83613e23565b91506134dd82614226565b604082019050919050565b60006134f5601483613e23565b915061350082614275565b602082019050919050565b6000613518600e83613e23565b91506135238261429e565b602082019050919050565b600061353b602b83613e23565b9150613546826142c7565b604082019050919050565b600061355e603283613e23565b915061356982614316565b604082019050919050565b6000613581602683613e23565b915061358c82614365565b604082019050919050565b60006135a4601c83613e23565b91506135af826143b4565b602082019050919050565b60006135c7602483613e23565b91506135d2826143dd565b604082019050919050565b60006135ea601983613e23565b91506135f58261442c565b602082019050919050565b600061360d600983613e23565b915061361882614455565b602082019050919050565b6000613630602c83613e23565b915061363b8261447e565b604082019050919050565b6000613653601083613e23565b915061365e826144cd565b602082019050919050565b6000613676603883613e23565b9150613681826144f6565b604082019050919050565b6000613699602a83613e23565b91506136a482614545565b604082019050919050565b60006136bc602983613e23565b91506136c782614594565b604082019050919050565b60006136df602083613e23565b91506136ea826145e3565b602082019050919050565b6000613702600883613e23565b915061370d8261460c565b602082019050919050565b6000613725602c83613e23565b915061373082614635565b604082019050919050565b6000613748602083613e23565b915061375382614684565b602082019050919050565b600061376b602983613e23565b9150613776826146ad565b604082019050919050565b600061378e602f83613e23565b9150613799826146fc565b604082019050919050565b60006137b1601183613e23565b91506137bc8261474b565b602082019050919050565b60006137d4602183613e23565b91506137df82614774565b604082019050919050565b60006137f7600083613e18565b9150613802826147c3565b600082019050919050565b600061381a601083613e23565b9150613825826147c6565b602082019050919050565b600061383d603183613e23565b9150613848826147ef565b604082019050919050565b6000613860602c83613e23565b915061386b8261483e565b604082019050919050565b6000613883603083613e23565b915061388e8261488d565b604082019050919050565b6138a281613fbe565b82525050565b6138b181613fbe565b82525050565b60006138c38285613494565b91506138cf8284613494565b91508190509392505050565b60006138e6826137ea565b9150819050919050565b600060208201905061390560008301846133a6565b92915050565b600060808201905061392060008301876133a6565b61392d60208301866133a6565b61393a60408301856138a8565b818103606083015261394c8184613422565b905095945050505050565b6000602082019050818103600083015261397181846133b5565b905092915050565b600060208201905061398e6000830184613413565b92915050565b600060208201905081810360008301526139ae818461345b565b905092915050565b600060208201905081810360008301526139cf816134c5565b9050919050565b600060208201905081810360008301526139ef816134e8565b9050919050565b60006020820190508181036000830152613a0f8161350b565b9050919050565b60006020820190508181036000830152613a2f8161352e565b9050919050565b60006020820190508181036000830152613a4f81613551565b9050919050565b60006020820190508181036000830152613a6f81613574565b9050919050565b60006020820190508181036000830152613a8f81613597565b9050919050565b60006020820190508181036000830152613aaf816135ba565b9050919050565b60006020820190508181036000830152613acf816135dd565b9050919050565b60006020820190508181036000830152613aef81613600565b9050919050565b60006020820190508181036000830152613b0f81613623565b9050919050565b60006020820190508181036000830152613b2f81613646565b9050919050565b60006020820190508181036000830152613b4f81613669565b9050919050565b60006020820190508181036000830152613b6f8161368c565b9050919050565b60006020820190508181036000830152613b8f816136af565b9050919050565b60006020820190508181036000830152613baf816136d2565b9050919050565b60006020820190508181036000830152613bcf816136f5565b9050919050565b60006020820190508181036000830152613bef81613718565b9050919050565b60006020820190508181036000830152613c0f8161373b565b9050919050565b60006020820190508181036000830152613c2f8161375e565b9050919050565b60006020820190508181036000830152613c4f81613781565b9050919050565b60006020820190508181036000830152613c6f816137a4565b9050919050565b60006020820190508181036000830152613c8f816137c7565b9050919050565b60006020820190508181036000830152613caf8161380d565b9050919050565b60006020820190508181036000830152613ccf81613830565b9050919050565b60006020820190508181036000830152613cef81613853565b9050919050565b60006020820190508181036000830152613d0f81613876565b9050919050565b6000602082019050613d2b60008301846138a8565b92915050565b6000613d3b613d4c565b9050613d47828261403c565b919050565b6000604051905090565b600067ffffffffffffffff821115613d7157613d706141d2565b5b613d7a82614215565b9050602081019050919050565b600067ffffffffffffffff821115613da257613da16141d2565b5b613dab82614215565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e4a82613fbe565b9150613e5583613fbe565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e8a57613e896140e7565b5b828201905092915050565b6000613ea082613fbe565b9150613eab83613fbe565b925082613ebb57613eba614116565b5b828204905092915050565b6000613ed182613fbe565b9150613edc83613fbe565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f1557613f146140e7565b5b828202905092915050565b6000613f2b82613fbe565b9150613f3683613fbe565b925082821015613f4957613f486140e7565b5b828203905092915050565b6000613f5f82613f9e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ff5578082015181840152602081019050613fda565b83811115614004576000848401525b50505050565b6000600282049050600182168061402257607f821691505b6020821081141561403657614035614145565b5b50919050565b61404582614215565b810181811067ffffffffffffffff82111715614064576140636141d2565b5b80604052505050565b600061407882613fbe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140ab576140aa6140e7565b5b600182019050919050565b60006140c182613fbe565b91506140cc83613fbe565b9250826140dc576140db614116565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45786365656473206e756d626572000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6148e581613f54565b81146148f057600080fd5b50565b6148fc81613f66565b811461490757600080fd5b50565b61491381613f72565b811461491e57600080fd5b50565b61492a81613fbe565b811461493557600080fd5b5056fea2646970667358221220c9f8401184cbcc1ec58f45bc616482164a95ee0010d5d3de4077a5617011cabf64736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f7265616c6974656d732e6f72672f697066732f516d5175394e56316b6779725850324a7a36563635434e41437a476279537973366735383354324c746739456d423f00000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://realitems.org/ipfs/QmQu9NV1kgyrXP2Jz6V65CNACzGbySys6g583T2Ltg9EmB?
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000004a
Arg [2] : 68747470733a2f2f7265616c6974656d732e6f72672f697066732f516d517539
Arg [3] : 4e56316b6779725850324a7a36563635434e41437a4762795379733667353833
Arg [4] : 54324c746739456d423f00000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
55229:3656:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58653:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57851:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21405:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22964:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22487:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35146:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23854:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57148:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34814:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55443:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56381:557;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24264:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41109:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57490:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35336:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57381:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56282:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53084:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21099:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20829:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43010:94;;;;;;;;;;;;;:::i;:::-;;58013:197;;;:::i;:::-;;55545:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55494:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42359:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21574:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55592:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23257:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24520:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55636:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21749:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55727:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23623:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43259:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58653:229;58809:4;58838:36;58862:11;58838:23;:36::i;:::-;58831:43;;58653:229;;;:::o;57851:154::-;42590:12;:10;:12::i;:::-;42579:23;;:7;:5;:7::i;:::-;:23;;;42571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57915:4:::1;57908:11;;:3;:11;;;57904:73;;;57936:8;:6;:8::i;:::-;57959:7;;57904:73;57987:10;:8;:10::i;:::-;42650:1;57851:154:::0;:::o;21405:100::-;21459:13;21492:5;21485:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21405:100;:::o;22964:221::-;23040:7;23068:16;23076:7;23068;:16::i;:::-;23060:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23153:15;:24;23169:7;23153:24;;;;;;;;;;;;;;;;;;;;;23146:31;;22964:221;;;:::o;22487:411::-;22568:13;22584:23;22599:7;22584:14;:23::i;:::-;22568:39;;22632:5;22626:11;;:2;:11;;;;22618:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22726:5;22710:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22735:37;22752:5;22759:12;:10;:12::i;:::-;22735:16;:37::i;:::-;22710:62;22688:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22869:21;22878:2;22882:7;22869:8;:21::i;:::-;22557:341;22487:411;;:::o;35146:113::-;35207:7;35234:10;:17;;;;35227:24;;35146:113;:::o;23854:339::-;24049:41;24068:12;:10;:12::i;:::-;24082:7;24049:18;:41::i;:::-;24041:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24157:28;24167:4;24173:2;24177:7;24157:9;:28::i;:::-;23854:339;;;:::o;57148:104::-;57200:7;57227:17;57237:6;55526:12;57227:9;;:17;;;;:::i;:::-;57220:24;;57148:104;;;:::o;34814:256::-;34911:7;34947:23;34964:5;34947:16;:23::i;:::-;34939:5;:31;34931:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35036:12;:19;35049:5;35036:19;;;;;;;;;;;;;;;:26;35056:5;35036:26;;;;;;;;;;;;35029:33;;34814:256;;;;:::o;55443:44::-;55482:5;55443:44;:::o;56381:557::-;55482:5;55992:14;:12;:14::i;:::-;:30;;55984:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;56066:7;:5;:7::i;:::-;56050:23;;:12;:10;:12::i;:::-;:23;;;56046:94;;56099:8;:6;:8::i;:::-;56098:9;56090:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;56046:94;56461:13:::1;55626:3;56477:14;:12;:14::i;:::-;:24;;;;:::i;:::-;56461:40;;56534:7;:5;:7::i;:::-;56518:23;;:12;:10;:12::i;:::-;:23;;;56514:78;;;56566:14;:12;:14::i;:::-;56558:22;;56514:78;55482:5;56620:6;56612:5;:14;;;;:::i;:::-;:30;;56604:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;55482:5;56675;:21;;56667:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;55583:2;56728:6;:21;;56720:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;56800:13;56806:6;56800:5;:13::i;:::-;56787:9;:26;;56779:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;56853:9;56848:83;56872:6;56868:1;:10;56848:83;;;56900:19;56915:3;56900:14;:19::i;:::-;56880:3;;;;;:::i;:::-;;;;56848:83;;;;56450:488;56381:557:::0;;:::o;24264:185::-;24402:39;24419:4;24425:2;24429:7;24402:39;;;;;;;;;;;;:16;:39::i;:::-;24264:185;;;:::o;41109:245::-;41227:41;41246:12;:10;:12::i;:::-;41260:7;41227:18;:41::i;:::-;41219:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;41332:14;41338:7;41332:5;:14::i;:::-;41109:245;:::o;57490:353::-;57552:16;57581:18;57602:17;57612:6;57602:9;:17::i;:::-;57581:38;;57632:25;57674:10;57660:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57632:53;;57701:9;57696:112;57720:10;57716:1;:14;57696:112;;;57766:30;57786:6;57794:1;57766:19;:30::i;:::-;57752:8;57761:1;57752:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;57732:3;;;;;:::i;:::-;;;;57696:112;;;;57827:8;57820:15;;;;57490:353;;;:::o;35336:233::-;35411:7;35447:30;:28;:30::i;:::-;35439:5;:38;35431:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35544:10;35555:5;35544:17;;;;;;;;:::i;:::-;;;;;;;;;;35537:24;;35336:233;;;:::o;57381:101::-;42590:12;:10;:12::i;:::-;42579:23;;:7;:5;:7::i;:::-;:23;;;42571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57467:7:::1;57452:12;:22;;;;;;;;;;;;:::i;:::-;;57381:101:::0;:::o;56282:91::-;56324:7;56351:14;:12;:14::i;:::-;56344:21;;56282:91;:::o;53084:86::-;53131:4;53155:7;;;;;;;;;;;53148:14;;53084:86;:::o;21099:239::-;21171:7;21191:13;21207:7;:16;21215:7;21207:16;;;;;;;;;;;;;;;;;;;;;21191:32;;21259:1;21242:19;;:5;:19;;;;21234:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21325:5;21318:12;;;21099:239;;;:::o;20829:208::-;20901:7;20946:1;20929:19;;:5;:19;;;;20921:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21013:9;:16;21023:5;21013:16;;;;;;;;;;;;;;;;21006:23;;20829:208;;;:::o;43010:94::-;42590:12;:10;:12::i;:::-;42579:23;;:7;:5;:7::i;:::-;:23;;;42571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43075:21:::1;43093:1;43075:9;:21::i;:::-;43010:94::o:0;58013:197::-;42590:12;:10;:12::i;:::-;42579:23;;:7;:5;:7::i;:::-;:23;;;42571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58072:15:::1;58090:21;58072:39;;58140:1;58130:7;:11;58122:20;;;::::0;::::1;;58153:49;55678:42;58180:21;58153:9;:49::i;:::-;58061:149;58013:197::o:0;55545:40::-;55583:2;55545:40;:::o;55494:44::-;55526:12;55494:44;:::o;42359:87::-;42405:7;42432:6;;;;;;;;;;;42425:13;;42359:87;:::o;21574:104::-;21630:13;21663:7;21656:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21574:104;:::o;55592:37::-;55626:3;55592:37;:::o;23257:295::-;23372:12;:10;:12::i;:::-;23360:24;;:8;:24;;;;23352:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23472:8;23427:18;:32;23446:12;:10;:12::i;:::-;23427:32;;;;;;;;;;;;;;;:42;23460:8;23427:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23525:8;23496:48;;23511:12;:10;:12::i;:::-;23496:48;;;23535:8;23496:48;;;;;;:::i;:::-;;;;;;;;23257:295;;:::o;24520:328::-;24695:41;24714:12;:10;:12::i;:::-;24728:7;24695:18;:41::i;:::-;24687:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24801:39;24815:4;24821:2;24825:7;24834:5;24801:13;:39::i;:::-;24520:328;;;;:::o;55636:84::-;55678:42;55636:84;:::o;21749:334::-;21822:13;21856:16;21864:7;21856;:16::i;:::-;21848:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21937:21;21961:10;:8;:10::i;:::-;21937:34;;22013:1;21995:7;21989:21;:25;:86;;;;;;;;;;;;;;;;;22041:7;22050:18;:7;:16;:18::i;:::-;22024:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21989:86;21982:93;;;21749:334;;;:::o;55727:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23623:164::-;23720:4;23744:18;:25;23763:5;23744:25;;;;;;;;;;;;;;;:35;23770:8;23744:35;;;;;;;;;;;;;;;;;;;;;;;;;23737:42;;23623:164;;;;:::o;43259:192::-;42590:12;:10;:12::i;:::-;42579:23;;:7;:5;:7::i;:::-;:23;;;42571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43368:1:::1;43348:22;;:8;:22;;;;43340:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43424:19;43434:8;43424:9;:19::i;:::-;43259:192:::0;:::o;34506:224::-;34608:4;34647:35;34632:50;;;:11;:50;;;;:90;;;;34686:36;34710:11;34686:23;:36::i;:::-;34632:90;34625:97;;34506:224;;;:::o;15892:98::-;15945:7;15972:10;15965:17;;15892:98;:::o;53884:118::-;53410:8;:6;:8::i;:::-;53409:9;53401:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;53954:4:::1;53944:7;;:14;;;;;;;;;;;;;;;;;;53974:20;53981:12;:10;:12::i;:::-;53974:20;;;;;;:::i;:::-;;;;;;;;53884:118::o:0;54143:120::-;53687:8;:6;:8::i;:::-;53679:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;54212:5:::1;54202:7;;:15;;;;;;;;;;;;;;;;;;54233:22;54242:12;:10;:12::i;:::-;54233:22;;;;;;:::i;:::-;;;;;;;;54143:120::o:0;26358:127::-;26423:4;26475:1;26447:30;;:7;:16;26455:7;26447:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26440:37;;26358:127;;;:::o;30340:174::-;30442:2;30415:15;:24;30431:7;30415:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30498:7;30494:2;30460:46;;30469:23;30484:7;30469:14;:23::i;:::-;30460:46;;;;;;;;;;;;30340:174;;:::o;26652:348::-;26745:4;26770:16;26778:7;26770;:16::i;:::-;26762:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26846:13;26862:23;26877:7;26862:14;:23::i;:::-;26846:39;;26915:5;26904:16;;:7;:16;;;:51;;;;26948:7;26924:31;;:20;26936:7;26924:11;:20::i;:::-;:31;;;26904:51;:87;;;;26959:32;26976:5;26983:7;26959:16;:32::i;:::-;26904:87;26896:96;;;26652:348;;;;:::o;29644:578::-;29803:4;29776:31;;:23;29791:7;29776:14;:23::i;:::-;:31;;;29768:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29886:1;29872:16;;:2;:16;;;;29864:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29942:39;29963:4;29969:2;29973:7;29942:20;:39::i;:::-;30046:29;30063:1;30067:7;30046:8;:29::i;:::-;30107:1;30088:9;:15;30098:4;30088:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30136:1;30119:9;:13;30129:2;30119:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30167:2;30148:7;:16;30156:7;30148:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30206:7;30202:2;30187:27;;30196:4;30187:27;;;;;;;;;;;;29644:578;;;:::o;47171:98::-;47229:7;47260:1;47256;:5;;;;:::i;:::-;47249:12;;47171:98;;;;:::o;56167:107::-;56214:7;56241:25;:15;:23;:25::i;:::-;56234:32;;56167:107;:::o;56946:194::-;57002:10;57015:14;:12;:14::i;:::-;57002:27;;57040;:15;:25;:27::i;:::-;57078:18;57088:3;57093:2;57078:9;:18::i;:::-;57129:2;57112:20;;;;;;;;;;56991:149;56946:194;:::o;28947:360::-;29007:13;29023:23;29038:7;29023:14;:23::i;:::-;29007:39;;29059:48;29080:5;29095:1;29099:7;29059:20;:48::i;:::-;29148:29;29165:1;29169:7;29148:8;:29::i;:::-;29210:1;29190:9;:16;29200:5;29190:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29229:7;:16;29237:7;29229:16;;;;;;;;;;;;29222:23;;;;;;;;;;;29291:7;29287:1;29263:36;;29272:5;29263:36;;;;;;;;;;;;28996:311;28947:360;:::o;43459:173::-;43515:16;43534:6;;;;;;;;;;;43515:25;;43560:8;43551:6;;:17;;;;;;;;;;;;;;;;;;43615:8;43584:40;;43605:8;43584:40;;;;;;;;;;;;43504:128;43459:173;:::o;58218:180::-;58292:12;58310:8;:13;;58331:7;58310:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58291:52;;;58362:7;58354:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;58280:118;58218:180;;:::o;25730:315::-;25887:28;25897:4;25903:2;25907:7;25887:9;:28::i;:::-;25934:48;25957:4;25963:2;25967:7;25976:5;25934:22;:48::i;:::-;25926:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25730:315;;;;:::o;57260:113::-;57320:13;57353:12;57346:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57260:113;:::o;16419:723::-;16475:13;16705:1;16696:5;:10;16692:53;;;16723:10;;;;;;;;;;;;;;;;;;;;;16692:53;16755:12;16770:5;16755:20;;16786:14;16811:78;16826:1;16818:4;:9;16811:78;;16844:8;;;;;:::i;:::-;;;;16875:2;16867:10;;;;;:::i;:::-;;;16811:78;;;16899:19;16931:6;16921:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16899:39;;16949:154;16965:1;16956:5;:10;16949:154;;16993:1;16983:11;;;;;:::i;:::-;;;17060:2;17052:5;:10;;;;:::i;:::-;17039:2;:24;;;;:::i;:::-;17026:39;;17009:6;17016;17009:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17089:2;17080:11;;;;;:::i;:::-;;;16949:154;;;17127:6;17113:21;;;;;16419:723;;;;:::o;20460:305::-;20562:4;20614:25;20599:40;;;:11;:40;;;;:105;;;;20671:33;20656:48;;;:11;:48;;;;20599:105;:158;;;;20721:36;20745:11;20721:23;:36::i;:::-;20599:158;20579:178;;20460:305;;;:::o;58406:239::-;58592:45;58619:4;58625:2;58629:7;58592:26;:45::i;:::-;58406:239;;;:::o;51417:114::-;51482:7;51509;:14;;;51502:21;;51417:114;;;:::o;51539:127::-;51646:1;51628:7;:14;;;:19;;;;;;;;;;;51539:127;:::o;27342:110::-;27418:26;27428:2;27432:7;27418:26;;;;;;;;;;;;:9;:26::i;:::-;27342:110;;:::o;31079:803::-;31234:4;31255:15;:2;:13;;;:15::i;:::-;31251:624;;;31307:2;31291:36;;;31328:12;:10;:12::i;:::-;31342:4;31348:7;31357:5;31291:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31287:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31554:1;31537:6;:13;:18;31533:272;;;31580:60;;;;;;;;;;:::i;:::-;;;;;;;;31533:272;31755:6;31749:13;31740:6;31736:2;31732:15;31725:38;31287:533;31424:45;;;31414:55;;;:6;:55;;;;31407:62;;;;;31251:624;31859:4;31852:11;;31079:803;;;;;;;:::o;18976:157::-;19061:4;19100:25;19085:40;;;:11;:40;;;;19078:47;;18976:157;;;:::o;54831:328::-;54975:45;55002:4;55008:2;55012:7;54975:26;:45::i;:::-;55051:7;:5;:7::i;:::-;55035:23;;:12;:10;:12::i;:::-;:23;;;55031:121;;55084:8;:6;:8::i;:::-;55083:9;55075:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;55031:121;54831:328;;;:::o;27679:321::-;27809:18;27815:2;27819:7;27809:5;:18::i;:::-;27860:54;27891:1;27895:2;27899:7;27908:5;27860:22;:54::i;:::-;27838:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27679:321;;;:::o;8152:387::-;8212:4;8420:12;8487:7;8475:20;8467:28;;8530:1;8523:4;:8;8516:15;;;8152:387;;;:::o;36182:589::-;36326:45;36353:4;36359:2;36363:7;36326:26;:45::i;:::-;36404:1;36388:18;;:4;:18;;;36384:187;;;36423:40;36455:7;36423:31;:40::i;:::-;36384:187;;;36493:2;36485:10;;:4;:10;;;36481:90;;36512:47;36545:4;36551:7;36512:32;:47::i;:::-;36481:90;36384:187;36599:1;36585:16;;:2;:16;;;36581:183;;;36618:45;36655:7;36618:36;:45::i;:::-;36581:183;;;36691:4;36685:10;;:2;:10;;;36681:83;;36712:40;36740:2;36744:7;36712:27;:40::i;:::-;36681:83;36581:183;36182:589;;;:::o;28336:382::-;28430:1;28416:16;;:2;:16;;;;28408:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28489:16;28497:7;28489;:16::i;:::-;28488:17;28480:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28551:45;28580:1;28584:2;28588:7;28551:20;:45::i;:::-;28626:1;28609:9;:13;28619:2;28609:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28657:2;28638:7;:16;28646:7;28638:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28702:7;28698:2;28677:33;;28694:1;28677:33;;;;;;;;;;;;28336:382;;:::o;32454:126::-;;;;:::o;37494:164::-;37598:10;:17;;;;37571:15;:24;37587:7;37571:24;;;;;;;;;;;:44;;;;37626:10;37642:7;37626:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37494:164;:::o;38285:988::-;38551:22;38601:1;38576:22;38593:4;38576:16;:22::i;:::-;:26;;;;:::i;:::-;38551:51;;38613:18;38634:17;:26;38652:7;38634:26;;;;;;;;;;;;38613:47;;38781:14;38767:10;:28;38763:328;;38812:19;38834:12;:18;38847:4;38834:18;;;;;;;;;;;;;;;:34;38853:14;38834:34;;;;;;;;;;;;38812:56;;38918:11;38885:12;:18;38898:4;38885:18;;;;;;;;;;;;;;;:30;38904:10;38885:30;;;;;;;;;;;:44;;;;39035:10;39002:17;:30;39020:11;39002:30;;;;;;;;;;;:43;;;;38797:294;38763:328;39187:17;:26;39205:7;39187:26;;;;;;;;;;;39180:33;;;39231:12;:18;39244:4;39231:18;;;;;;;;;;;;;;;:34;39250:14;39231:34;;;;;;;;;;;39224:41;;;38366:907;;38285:988;;:::o;39568:1079::-;39821:22;39866:1;39846:10;:17;;;;:21;;;;:::i;:::-;39821:46;;39878:18;39899:15;:24;39915:7;39899:24;;;;;;;;;;;;39878:45;;40250:19;40272:10;40283:14;40272:26;;;;;;;;:::i;:::-;;;;;;;;;;40250:48;;40336:11;40311:10;40322;40311:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40447:10;40416:15;:28;40432:11;40416:28;;;;;;;;;;;:41;;;;40588:15;:24;40604:7;40588:24;;;;;;;;;;;40581:31;;;40623:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39639:1008;;;39568:1079;:::o;37072:221::-;37157:14;37174:20;37191:2;37174:16;:20::i;:::-;37157:37;;37232:7;37205:12;:16;37218:2;37205:16;;;;;;;;;;;;;;;:24;37222:6;37205:24;;;;;;;;;;;:34;;;;37279:6;37250:17;:26;37268:7;37250:26;;;;;;;;;;;:35;;;;37146:147;37072:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::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:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2391:79;;:::i;:::-;2353:2;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2343:263;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:2;;;2743:79;;:::i;:::-;2705:2;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2695:391;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3240:79;;:::i;:::-;3202:2;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3192:519;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:2;;;3892:79;;:::i;:::-;3853:2;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:2;;;4476:79;;:::i;:::-;4440:2;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3843:817;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:2;;;4794:79;;:::i;:::-;4756:2;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4746:388;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5271:79;;:::i;:::-;5233:2;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5223:391;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:2;;;5731:79;;:::i;:::-;5693:2;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5683:260;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:2;;;6062:79;;:::i;:::-;6024:2;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;6014:262;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:2;;;6406:79;;:::i;:::-;6368:2;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6358:273;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:2;;;6761:79;;:::i;:::-;6723:2;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:2;;;6961:79;;:::i;:::-;6925:2;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6713:433;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:2;;;7266:79;;:::i;:::-;7228:2;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7218:263;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7567:99;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7737:53;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8623:50;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;;;;;:::o;9798:366::-;9940:3;9961:67;10025:2;10020:3;9961:67;:::i;:::-;9954:74;;10037:93;10126:3;10037:93;:::i;:::-;10155:2;10150:3;10146:12;10139:19;;9944:220;;;:::o;10170:366::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10316:220;;;:::o;10542:366::-;10684:3;10705:67;10769:2;10764:3;10705:67;:::i;:::-;10698:74;;10781:93;10870:3;10781:93;:::i;:::-;10899:2;10894:3;10890:12;10883:19;;10688:220;;;:::o;10914:366::-;11056:3;11077:67;11141:2;11136:3;11077:67;:::i;:::-;11070:74;;11153:93;11242:3;11153:93;:::i;:::-;11271:2;11266:3;11262:12;11255:19;;11060:220;;;:::o;11286:366::-;11428:3;11449:67;11513:2;11508:3;11449:67;:::i;:::-;11442:74;;11525:93;11614:3;11525:93;:::i;:::-;11643:2;11638:3;11634:12;11627:19;;11432:220;;;:::o;11658:366::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11804:220;;;:::o;12030:366::-;12172:3;12193:67;12257:2;12252:3;12193:67;:::i;:::-;12186:74;;12269:93;12358:3;12269:93;:::i;:::-;12387:2;12382:3;12378:12;12371:19;;12176:220;;;:::o;12402:366::-;12544:3;12565:67;12629:2;12624:3;12565:67;:::i;:::-;12558:74;;12641:93;12730:3;12641:93;:::i;:::-;12759:2;12754:3;12750:12;12743:19;;12548:220;;;:::o;12774:366::-;12916:3;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13013:93;13102:3;13013:93;:::i;:::-;13131:2;13126:3;13122:12;13115:19;;12920:220;;;:::o;13146:365::-;13288:3;13309:66;13373:1;13368:3;13309:66;:::i;:::-;13302:73;;13384:93;13473:3;13384:93;:::i;:::-;13502:2;13497:3;13493:12;13486:19;;13292:219;;;:::o;13517:366::-;13659:3;13680:67;13744:2;13739:3;13680:67;:::i;:::-;13673:74;;13756:93;13845:3;13756:93;:::i;:::-;13874:2;13869:3;13865:12;13858:19;;13663:220;;;:::o;13889:366::-;14031:3;14052:67;14116:2;14111:3;14052:67;:::i;:::-;14045:74;;14128:93;14217:3;14128:93;:::i;:::-;14246:2;14241:3;14237:12;14230:19;;14035:220;;;:::o;14261:366::-;14403:3;14424:67;14488:2;14483:3;14424:67;:::i;:::-;14417:74;;14500:93;14589:3;14500:93;:::i;:::-;14618:2;14613:3;14609:12;14602:19;;14407:220;;;:::o;14633:366::-;14775:3;14796:67;14860:2;14855:3;14796:67;:::i;:::-;14789:74;;14872:93;14961:3;14872:93;:::i;:::-;14990:2;14985:3;14981:12;14974:19;;14779:220;;;:::o;15005:366::-;15147:3;15168:67;15232:2;15227:3;15168:67;:::i;:::-;15161:74;;15244:93;15333:3;15244:93;:::i;:::-;15362:2;15357:3;15353:12;15346:19;;15151:220;;;:::o;15377:366::-;15519:3;15540:67;15604:2;15599:3;15540:67;:::i;:::-;15533:74;;15616:93;15705:3;15616:93;:::i;:::-;15734:2;15729:3;15725:12;15718:19;;15523:220;;;:::o;15749:365::-;15891:3;15912:66;15976:1;15971:3;15912:66;:::i;:::-;15905:73;;15987:93;16076:3;15987:93;:::i;:::-;16105:2;16100:3;16096:12;16089:19;;15895:219;;;:::o;16120:366::-;16262:3;16283:67;16347:2;16342:3;16283:67;:::i;:::-;16276:74;;16359:93;16448:3;16359:93;:::i;:::-;16477:2;16472:3;16468:12;16461:19;;16266:220;;;:::o;16492:366::-;16634:3;16655:67;16719:2;16714:3;16655:67;:::i;:::-;16648:74;;16731:93;16820:3;16731:93;:::i;:::-;16849:2;16844:3;16840:12;16833:19;;16638:220;;;:::o;16864:366::-;17006:3;17027:67;17091:2;17086:3;17027:67;:::i;:::-;17020:74;;17103:93;17192:3;17103:93;:::i;:::-;17221:2;17216:3;17212:12;17205:19;;17010:220;;;:::o;17236:366::-;17378:3;17399:67;17463:2;17458:3;17399:67;:::i;:::-;17392:74;;17475:93;17564:3;17475:93;:::i;:::-;17593:2;17588:3;17584:12;17577:19;;17382:220;;;:::o;17608:366::-;17750:3;17771:67;17835:2;17830:3;17771:67;:::i;:::-;17764:74;;17847:93;17936:3;17847:93;:::i;:::-;17965:2;17960:3;17956:12;17949:19;;17754:220;;;:::o;17980:366::-;18122:3;18143:67;18207:2;18202:3;18143:67;:::i;:::-;18136:74;;18219:93;18308:3;18219:93;:::i;:::-;18337:2;18332:3;18328:12;18321:19;;18126:220;;;:::o;18352:398::-;18511:3;18532:83;18613:1;18608:3;18532:83;:::i;:::-;18525:90;;18624:93;18713:3;18624:93;:::i;:::-;18742:1;18737:3;18733:11;18726:18;;18515:235;;;:::o;18756:366::-;18898:3;18919:67;18983:2;18978:3;18919:67;:::i;:::-;18912:74;;18995:93;19084:3;18995:93;:::i;:::-;19113:2;19108:3;19104:12;19097:19;;18902:220;;;:::o;19128:366::-;19270:3;19291:67;19355:2;19350:3;19291:67;:::i;:::-;19284:74;;19367:93;19456:3;19367:93;:::i;:::-;19485:2;19480:3;19476:12;19469:19;;19274:220;;;:::o;19500:366::-;19642:3;19663:67;19727:2;19722:3;19663:67;:::i;:::-;19656:74;;19739:93;19828:3;19739:93;:::i;:::-;19857:2;19852:3;19848:12;19841:19;;19646:220;;;:::o;19872:366::-;20014:3;20035:67;20099:2;20094:3;20035:67;:::i;:::-;20028:74;;20111:93;20200:3;20111:93;:::i;:::-;20229:2;20224:3;20220:12;20213:19;;20018:220;;;:::o;20244:108::-;20321:24;20339:5;20321:24;:::i;:::-;20316:3;20309:37;20299:53;;:::o;20358:118::-;20445:24;20463:5;20445:24;:::i;:::-;20440:3;20433:37;20423:53;;:::o;20482:435::-;20662:3;20684:95;20775:3;20766:6;20684:95;:::i;:::-;20677:102;;20796:95;20887:3;20878:6;20796:95;:::i;:::-;20789:102;;20908:3;20901:10;;20666:251;;;;;:::o;20923:379::-;21107:3;21129:147;21272:3;21129:147;:::i;:::-;21122:154;;21293:3;21286:10;;21111:191;;;:::o;21308:222::-;21401:4;21439:2;21428:9;21424:18;21416:26;;21452:71;21520:1;21509:9;21505:17;21496:6;21452:71;:::i;:::-;21406:124;;;;:::o;21536:640::-;21731:4;21769:3;21758:9;21754:19;21746:27;;21783:71;21851:1;21840:9;21836:17;21827:6;21783:71;:::i;:::-;21864:72;21932:2;21921:9;21917:18;21908:6;21864:72;:::i;:::-;21946;22014:2;22003:9;21999:18;21990:6;21946:72;:::i;:::-;22065:9;22059:4;22055:20;22050:2;22039:9;22035:18;22028:48;22093:76;22164:4;22155:6;22093:76;:::i;:::-;22085:84;;21736:440;;;;;;;:::o;22182:373::-;22325:4;22363:2;22352:9;22348:18;22340:26;;22412:9;22406:4;22402:20;22398:1;22387:9;22383:17;22376:47;22440:108;22543:4;22534:6;22440:108;:::i;:::-;22432:116;;22330:225;;;;:::o;22561:210::-;22648:4;22686:2;22675:9;22671:18;22663:26;;22699:65;22761:1;22750:9;22746:17;22737:6;22699:65;:::i;:::-;22653:118;;;;:::o;22777:313::-;22890:4;22928:2;22917:9;22913:18;22905:26;;22977:9;22971:4;22967:20;22963:1;22952:9;22948:17;22941:47;23005:78;23078:4;23069:6;23005:78;:::i;:::-;22997:86;;22895:195;;;;:::o;23096:419::-;23262:4;23300:2;23289:9;23285:18;23277:26;;23349:9;23343:4;23339:20;23335:1;23324:9;23320:17;23313:47;23377:131;23503:4;23377:131;:::i;:::-;23369:139;;23267:248;;;:::o;23521:419::-;23687:4;23725:2;23714:9;23710:18;23702:26;;23774:9;23768:4;23764:20;23760:1;23749:9;23745:17;23738:47;23802:131;23928:4;23802:131;:::i;:::-;23794:139;;23692:248;;;:::o;23946:419::-;24112:4;24150:2;24139:9;24135:18;24127:26;;24199:9;24193:4;24189:20;24185:1;24174:9;24170:17;24163:47;24227:131;24353:4;24227:131;:::i;:::-;24219:139;;24117:248;;;:::o;24371:419::-;24537:4;24575:2;24564:9;24560:18;24552:26;;24624:9;24618:4;24614:20;24610:1;24599:9;24595:17;24588:47;24652:131;24778:4;24652:131;:::i;:::-;24644:139;;24542:248;;;:::o;24796:419::-;24962:4;25000:2;24989:9;24985:18;24977:26;;25049:9;25043:4;25039:20;25035:1;25024:9;25020:17;25013:47;25077:131;25203:4;25077:131;:::i;:::-;25069:139;;24967:248;;;:::o;25221:419::-;25387:4;25425:2;25414:9;25410:18;25402:26;;25474:9;25468:4;25464:20;25460:1;25449:9;25445:17;25438:47;25502:131;25628:4;25502:131;:::i;:::-;25494:139;;25392:248;;;:::o;25646:419::-;25812:4;25850:2;25839:9;25835:18;25827:26;;25899:9;25893:4;25889:20;25885:1;25874:9;25870:17;25863:47;25927:131;26053:4;25927:131;:::i;:::-;25919:139;;25817:248;;;:::o;26071:419::-;26237:4;26275:2;26264:9;26260:18;26252:26;;26324:9;26318:4;26314:20;26310:1;26299:9;26295:17;26288:47;26352:131;26478:4;26352:131;:::i;:::-;26344:139;;26242:248;;;:::o;26496:419::-;26662:4;26700:2;26689:9;26685:18;26677:26;;26749:9;26743:4;26739:20;26735:1;26724:9;26720:17;26713:47;26777:131;26903:4;26777:131;:::i;:::-;26769:139;;26667:248;;;:::o;26921:419::-;27087:4;27125:2;27114:9;27110:18;27102:26;;27174:9;27168:4;27164:20;27160:1;27149:9;27145:17;27138:47;27202:131;27328:4;27202:131;:::i;:::-;27194:139;;27092:248;;;:::o;27346:419::-;27512:4;27550:2;27539:9;27535:18;27527:26;;27599:9;27593:4;27589:20;27585:1;27574:9;27570:17;27563:47;27627:131;27753:4;27627:131;:::i;:::-;27619:139;;27517:248;;;:::o;27771:419::-;27937:4;27975:2;27964:9;27960:18;27952:26;;28024:9;28018:4;28014:20;28010:1;27999:9;27995:17;27988:47;28052:131;28178:4;28052:131;:::i;:::-;28044:139;;27942:248;;;:::o;28196:419::-;28362:4;28400:2;28389:9;28385:18;28377:26;;28449:9;28443:4;28439:20;28435:1;28424:9;28420:17;28413:47;28477:131;28603:4;28477:131;:::i;:::-;28469:139;;28367:248;;;:::o;28621:419::-;28787:4;28825:2;28814:9;28810:18;28802:26;;28874:9;28868:4;28864:20;28860:1;28849:9;28845:17;28838:47;28902:131;29028:4;28902:131;:::i;:::-;28894:139;;28792:248;;;:::o;29046:419::-;29212:4;29250:2;29239:9;29235:18;29227:26;;29299:9;29293:4;29289:20;29285:1;29274:9;29270:17;29263:47;29327:131;29453:4;29327:131;:::i;:::-;29319:139;;29217:248;;;:::o;29471:419::-;29637:4;29675:2;29664:9;29660:18;29652:26;;29724:9;29718:4;29714:20;29710:1;29699:9;29695:17;29688:47;29752:131;29878:4;29752:131;:::i;:::-;29744:139;;29642:248;;;:::o;29896:419::-;30062:4;30100:2;30089:9;30085:18;30077:26;;30149:9;30143:4;30139:20;30135:1;30124:9;30120:17;30113:47;30177:131;30303:4;30177:131;:::i;:::-;30169:139;;30067:248;;;:::o;30321:419::-;30487:4;30525:2;30514:9;30510:18;30502:26;;30574:9;30568:4;30564:20;30560:1;30549:9;30545:17;30538:47;30602:131;30728:4;30602:131;:::i;:::-;30594:139;;30492:248;;;:::o;30746:419::-;30912:4;30950:2;30939:9;30935:18;30927:26;;30999:9;30993:4;30989:20;30985:1;30974:9;30970:17;30963:47;31027:131;31153:4;31027:131;:::i;:::-;31019:139;;30917:248;;;:::o;31171:419::-;31337:4;31375:2;31364:9;31360:18;31352:26;;31424:9;31418:4;31414:20;31410:1;31399:9;31395:17;31388:47;31452:131;31578:4;31452:131;:::i;:::-;31444:139;;31342:248;;;:::o;31596:419::-;31762:4;31800:2;31789:9;31785:18;31777:26;;31849:9;31843:4;31839:20;31835:1;31824:9;31820:17;31813:47;31877:131;32003:4;31877:131;:::i;:::-;31869:139;;31767:248;;;:::o;32021:419::-;32187:4;32225:2;32214:9;32210:18;32202:26;;32274:9;32268:4;32264:20;32260:1;32249:9;32245:17;32238:47;32302:131;32428:4;32302:131;:::i;:::-;32294:139;;32192:248;;;:::o;32446:419::-;32612:4;32650:2;32639:9;32635:18;32627:26;;32699:9;32693:4;32689:20;32685:1;32674:9;32670:17;32663:47;32727:131;32853:4;32727:131;:::i;:::-;32719:139;;32617:248;;;:::o;32871:419::-;33037:4;33075:2;33064:9;33060:18;33052:26;;33124:9;33118:4;33114:20;33110:1;33099:9;33095:17;33088:47;33152:131;33278:4;33152:131;:::i;:::-;33144:139;;33042:248;;;:::o;33296:419::-;33462:4;33500:2;33489:9;33485:18;33477:26;;33549:9;33543:4;33539:20;33535:1;33524:9;33520:17;33513:47;33577:131;33703:4;33577:131;:::i;:::-;33569:139;;33467:248;;;:::o;33721:419::-;33887:4;33925:2;33914:9;33910:18;33902:26;;33974:9;33968:4;33964:20;33960:1;33949:9;33945:17;33938:47;34002:131;34128:4;34002:131;:::i;:::-;33994:139;;33892:248;;;:::o;34146:419::-;34312:4;34350:2;34339:9;34335:18;34327:26;;34399:9;34393:4;34389:20;34385:1;34374:9;34370:17;34363:47;34427:131;34553:4;34427:131;:::i;:::-;34419:139;;34317:248;;;:::o;34571:222::-;34664:4;34702:2;34691:9;34687:18;34679:26;;34715:71;34783:1;34772:9;34768:17;34759:6;34715:71;:::i;:::-;34669:124;;;;:::o;34799:129::-;34833:6;34860:20;;:::i;:::-;34850:30;;34889:33;34917:4;34909:6;34889:33;:::i;:::-;34840:88;;;:::o;34934:75::-;34967:6;35000:2;34994:9;34984:19;;34974:35;:::o;35015:307::-;35076:4;35166:18;35158:6;35155:30;35152:2;;;35188:18;;:::i;:::-;35152:2;35226:29;35248:6;35226:29;:::i;:::-;35218:37;;35310:4;35304;35300:15;35292:23;;35081:241;;;:::o;35328:308::-;35390:4;35480:18;35472:6;35469:30;35466:2;;;35502:18;;:::i;:::-;35466:2;35540:29;35562:6;35540:29;:::i;:::-;35532:37;;35624:4;35618;35614:15;35606:23;;35395:241;;;:::o;35642:132::-;35709:4;35732:3;35724:11;;35762:4;35757:3;35753:14;35745:22;;35714:60;;;:::o;35780:114::-;35847:6;35881:5;35875:12;35865:22;;35854:40;;;:::o;35900:98::-;35951:6;35985:5;35979:12;35969:22;;35958:40;;;:::o;36004:99::-;36056:6;36090:5;36084:12;36074:22;;36063:40;;;:::o;36109:113::-;36179:4;36211;36206:3;36202:14;36194:22;;36184:38;;;:::o;36228:184::-;36327:11;36361:6;36356:3;36349:19;36401:4;36396:3;36392:14;36377:29;;36339:73;;;;:::o;36418:168::-;36501:11;36535:6;36530:3;36523:19;36575:4;36570:3;36566:14;36551:29;;36513:73;;;;:::o;36592:147::-;36693:11;36730:3;36715:18;;36705:34;;;;:::o;36745:169::-;36829:11;36863:6;36858:3;36851:19;36903:4;36898:3;36894:14;36879:29;;36841:73;;;;:::o;36920:148::-;37022:11;37059:3;37044:18;;37034:34;;;;:::o;37074:305::-;37114:3;37133:20;37151:1;37133:20;:::i;:::-;37128:25;;37167:20;37185:1;37167:20;:::i;:::-;37162:25;;37321:1;37253:66;37249:74;37246:1;37243:81;37240:2;;;37327:18;;:::i;:::-;37240:2;37371:1;37368;37364:9;37357:16;;37118:261;;;;:::o;37385:185::-;37425:1;37442:20;37460:1;37442:20;:::i;:::-;37437:25;;37476:20;37494:1;37476:20;:::i;:::-;37471:25;;37515:1;37505:2;;37520:18;;:::i;:::-;37505:2;37562:1;37559;37555:9;37550:14;;37427:143;;;;:::o;37576:348::-;37616:7;37639:20;37657:1;37639:20;:::i;:::-;37634:25;;37673:20;37691:1;37673:20;:::i;:::-;37668:25;;37861:1;37793:66;37789:74;37786:1;37783:81;37778:1;37771:9;37764:17;37760:105;37757:2;;;37868:18;;:::i;:::-;37757:2;37916:1;37913;37909:9;37898:20;;37624:300;;;;:::o;37930:191::-;37970:4;37990:20;38008:1;37990:20;:::i;:::-;37985:25;;38024:20;38042:1;38024:20;:::i;:::-;38019:25;;38063:1;38060;38057:8;38054:2;;;38068:18;;:::i;:::-;38054:2;38113:1;38110;38106:9;38098:17;;37975:146;;;;:::o;38127:96::-;38164:7;38193:24;38211:5;38193:24;:::i;:::-;38182:35;;38172:51;;;:::o;38229:90::-;38263:7;38306:5;38299:13;38292:21;38281:32;;38271:48;;;:::o;38325:149::-;38361:7;38401:66;38394:5;38390:78;38379:89;;38369:105;;;:::o;38480:126::-;38517:7;38557:42;38550:5;38546:54;38535:65;;38525:81;;;:::o;38612:77::-;38649:7;38678:5;38667:16;;38657:32;;;:::o;38695:154::-;38779:6;38774:3;38769;38756:30;38841:1;38832:6;38827:3;38823:16;38816:27;38746:103;;;:::o;38855:307::-;38923:1;38933:113;38947:6;38944:1;38941:13;38933:113;;;39032:1;39027:3;39023:11;39017:18;39013:1;39008:3;39004:11;38997:39;38969:2;38966:1;38962:10;38957:15;;38933:113;;;39064:6;39061:1;39058:13;39055:2;;;39144:1;39135:6;39130:3;39126:16;39119:27;39055:2;38904:258;;;;:::o;39168:320::-;39212:6;39249:1;39243:4;39239:12;39229:22;;39296:1;39290:4;39286:12;39317:18;39307:2;;39373:4;39365:6;39361:17;39351:27;;39307:2;39435;39427:6;39424:14;39404:18;39401:38;39398:2;;;39454:18;;:::i;:::-;39398:2;39219:269;;;;:::o;39494:281::-;39577:27;39599:4;39577:27;:::i;:::-;39569:6;39565:40;39707:6;39695:10;39692:22;39671:18;39659:10;39656:34;39653:62;39650:2;;;39718:18;;:::i;:::-;39650:2;39758:10;39754:2;39747:22;39537:238;;;:::o;39781:233::-;39820:3;39843:24;39861:5;39843:24;:::i;:::-;39834:33;;39889:66;39882:5;39879:77;39876:2;;;39959:18;;:::i;:::-;39876:2;40006:1;39999:5;39995:13;39988:20;;39824:190;;;:::o;40020:176::-;40052:1;40069:20;40087:1;40069:20;:::i;:::-;40064:25;;40103:20;40121:1;40103:20;:::i;:::-;40098:25;;40142:1;40132:2;;40147:18;;:::i;:::-;40132:2;40188:1;40185;40181:9;40176:14;;40054:142;;;;:::o;40202:180::-;40250:77;40247:1;40240:88;40347:4;40344:1;40337:15;40371:4;40368:1;40361:15;40388:180;40436:77;40433:1;40426:88;40533:4;40530:1;40523:15;40557:4;40554:1;40547:15;40574:180;40622:77;40619:1;40612:88;40719:4;40716:1;40709:15;40743:4;40740:1;40733:15;40760:180;40808:77;40805:1;40798:88;40905:4;40902:1;40895:15;40929:4;40926:1;40919:15;40946:180;40994:77;40991:1;40984:88;41091:4;41088:1;41081:15;41115:4;41112:1;41105:15;41132:180;41180:77;41177:1;41170:88;41277:4;41274:1;41267:15;41301:4;41298:1;41291:15;41318:117;41427:1;41424;41417:12;41441:117;41550:1;41547;41540:12;41564:117;41673:1;41670;41663:12;41687:117;41796:1;41793;41786:12;41810:102;41851:6;41902:2;41898:7;41893:2;41886:5;41882:14;41878:28;41868:38;;41858:54;;;:::o;41918:230::-;42058:34;42054:1;42046:6;42042:14;42035:58;42127:13;42122:2;42114:6;42110:15;42103:38;42024:124;:::o;42154:170::-;42294:22;42290:1;42282:6;42278:14;42271:46;42260:64;:::o;42330:164::-;42470:16;42466:1;42458:6;42454:14;42447:40;42436:58;:::o;42500:230::-;42640:34;42636:1;42628:6;42624:14;42617:58;42709:13;42704:2;42696:6;42692:15;42685:38;42606:124;:::o;42736:237::-;42876:34;42872:1;42864:6;42860:14;42853:58;42945:20;42940:2;42932:6;42928:15;42921:45;42842:131;:::o;42979:225::-;43119:34;43115:1;43107:6;43103:14;43096:58;43188:8;43183:2;43175:6;43171:15;43164:33;43085:119;:::o;43210:178::-;43350:30;43346:1;43338:6;43334:14;43327:54;43316:72;:::o;43394:223::-;43534:34;43530:1;43522:6;43518:14;43511:58;43603:6;43598:2;43590:6;43586:15;43579:31;43500:117;:::o;43623:175::-;43763:27;43759:1;43751:6;43747:14;43740:51;43729:69;:::o;43804:159::-;43944:11;43940:1;43932:6;43928:14;43921:35;43910:53;:::o;43969:231::-;44109:34;44105:1;44097:6;44093:14;44086:58;44178:14;44173:2;44165:6;44161:15;44154:39;44075:125;:::o;44206:166::-;44346:18;44342:1;44334:6;44330:14;44323:42;44312:60;:::o;44378:243::-;44518:34;44514:1;44506:6;44502:14;44495:58;44587:26;44582:2;44574:6;44570:15;44563:51;44484:137;:::o;44627:229::-;44767:34;44763:1;44755:6;44751:14;44744:58;44836:12;44831:2;44823:6;44819:15;44812:37;44733:123;:::o;44862:228::-;45002:34;44998:1;44990:6;44986:14;44979:58;45071:11;45066:2;45058:6;45054:15;45047:36;44968:122;:::o;45096:182::-;45236:34;45232:1;45224:6;45220:14;45213:58;45202:76;:::o;45284:158::-;45424:10;45420:1;45412:6;45408:14;45401:34;45390:52;:::o;45448:231::-;45588:34;45584:1;45576:6;45572:14;45565:58;45657:14;45652:2;45644:6;45640:15;45633:39;45554:125;:::o;45685:182::-;45825:34;45821:1;45813:6;45809:14;45802:58;45791:76;:::o;45873:228::-;46013:34;46009:1;46001:6;45997:14;45990:58;46082:11;46077:2;46069:6;46065:15;46058:36;45979:122;:::o;46107:234::-;46247:34;46243:1;46235:6;46231:14;46224:58;46316:17;46311:2;46303:6;46299:15;46292:42;46213:128;:::o;46347:167::-;46487:19;46483:1;46475:6;46471:14;46464:43;46453:61;:::o;46520:220::-;46660:34;46656:1;46648:6;46644:14;46637:58;46729:3;46724:2;46716:6;46712:15;46705:28;46626:114;:::o;46746:::-;46852:8;:::o;46866:166::-;47006:18;47002:1;46994:6;46990:14;46983:42;46972:60;:::o;47038:236::-;47178:34;47174:1;47166:6;47162:14;47155:58;47247:19;47242:2;47234:6;47230:15;47223:44;47144:130;:::o;47280:231::-;47420:34;47416:1;47408:6;47404:14;47397:58;47489:14;47484:2;47476:6;47472:15;47465:39;47386:125;:::o;47517:235::-;47657:34;47653:1;47645:6;47641:14;47634:58;47726:18;47721:2;47713:6;47709:15;47702:43;47623:129;:::o;47758:122::-;47831:24;47849:5;47831:24;:::i;:::-;47824:5;47821:35;47811:2;;47870:1;47867;47860:12;47811:2;47801:79;:::o;47886:116::-;47956:21;47971:5;47956:21;:::i;:::-;47949:5;47946:32;47936:2;;47992:1;47989;47982:12;47936:2;47926:76;:::o;48008:120::-;48080:23;48097:5;48080:23;:::i;:::-;48073:5;48070:34;48060:2;;48118:1;48115;48108:12;48060:2;48050:78;:::o;48134:122::-;48207:24;48225:5;48207:24;:::i;:::-;48200:5;48197:35;48187:2;;48246:1;48243;48236:12;48187:2;48177:79;:::o
Swarm Source
ipfs://c9f8401184cbcc1ec58f45bc616482164a95ee0010d5d3de4077a5617011cabf
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.