ERC-721
Overview
Max Total Supply
2,019 GOCHI
Holders
830
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
1 GOCHILoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Fantomgochi
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-01-10 */ /** *Submitted for verification at FtmScan.com on 2022-01-09 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol 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/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol 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.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } } //Fantomgochi pragma solidity ^0.8.0; contract Fantomgochi is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0 ether; uint256 public maxSupply = 2019; uint256 public maxMintAmount = 2; bool public paused = false; mapping(address => bool) public whitelisted; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); require(balanceOf(msg.sender) < 2, "Only two per wallet"); if (msg.sender != owner()) { if(whitelisted[msg.sender] != true) { require(msg.value >= cost * _mintAmount); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"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":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620002c3565b506000600d556107e3600e556002600f556000601060006101000a81548160ff0219169083151502179055503480156200008a57600080fd5b5060405162004b3838038062004b388339818101604052810190620000b09190620003f1565b82828160009080519060200190620000ca929190620002c3565b508060019080519060200190620000e3929190620002c3565b50505062000106620000fa6200012060201b60201c565b6200012860201b60201c565b6200011781620001ee60201b60201c565b505050620006b1565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001fe6200012060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002246200029960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200027d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027490620004d1565b60405180910390fd5b80600b908051906020019062000295929190620002c3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002d19062000599565b90600052602060002090601f016020900481019282620002f5576000855562000341565b82601f106200031057805160ff191683800117855562000341565b8280016001018555821562000341579182015b828111156200034057825182559160200191906001019062000323565b5b50905062000350919062000354565b5090565b5b808211156200036f57600081600090555060010162000355565b5090565b60006200038a62000384846200051c565b620004f3565b905082815260208101848484011115620003a957620003a862000668565b5b620003b684828562000563565b509392505050565b600082601f830112620003d657620003d562000663565b5b8151620003e884826020860162000373565b91505092915050565b6000806000606084860312156200040d576200040c62000672565b5b600084015167ffffffffffffffff8111156200042e576200042d6200066d565b5b6200043c86828701620003be565b935050602084015167ffffffffffffffff81111562000460576200045f6200066d565b5b6200046e86828701620003be565b925050604084015167ffffffffffffffff8111156200049257620004916200066d565b5b620004a086828701620003be565b9150509250925092565b6000620004b960208362000552565b9150620004c68262000688565b602082019050919050565b60006020820190508181036000830152620004ec81620004aa565b9050919050565b6000620004ff62000512565b90506200050d8282620005cf565b919050565b6000604051905090565b600067ffffffffffffffff8211156200053a576200053962000634565b5b620005458262000677565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200058357808201518184015260208101905062000566565b8381111562000593576000848401525b50505050565b60006002820490506001821680620005b257607f821691505b60208210811415620005c957620005c862000605565b5b50919050565b620005da8262000677565b810181811067ffffffffffffffff82111715620005fc57620005fb62000634565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61447780620006c16000396000f3fe60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb011461077f578063d936547e146107aa578063da3ef23f146107e7578063e985e9c514610810578063f2fde38b1461084d5761020f565b8063a22cb465146106c5578063b88d4fde146106ee578063c668286214610717578063c87b56dd146107425761020f565b806370a08231116100e757806370a08231146105f2578063715018a61461062f5780637f00c7a6146106465780638da5cb5b1461066f57806395d89b411461069a5761020f565b806355f804b3146105365780635c975abb1461055f5780636352211e1461058a5780636c0360eb146105c75761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e14610441578063438b63001461046a57806344a0d68a146104a75780634a4c560d146104d05780634f6ccce7146104f95761020f565b80632f745c59146103b557806330cc7ae0146103f25780633ccfd60b1461041b57806340c10f19146104255761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd14610336578063239c70ae1461036157806323b872dd1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613118565b610876565b604051610248919061370f565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906130eb565b6108f0565b005b34801561028657600080fd5b5061028f610989565b60405161029c919061372a565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906131bb565b610a1b565b6040516102d99190613686565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906130ab565b610aa0565b005b34801561031757600080fd5b50610320610bb8565b60405161032d91906139ac565b60405180910390f35b34801561034257600080fd5b5061034b610bbe565b60405161035891906139ac565b60405180910390f35b34801561036d57600080fd5b50610376610bcb565b60405161038391906139ac565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190612f95565b610bd1565b005b3480156103c157600080fd5b506103dc60048036038101906103d791906130ab565b610c31565b6040516103e991906139ac565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612f28565b610cd6565b005b610423610dad565b005b61043f600480360381019061043a91906130ab565b610e69565b005b34801561044d57600080fd5b5061046860048036038101906104639190612f95565b610ffa565b005b34801561047657600080fd5b50610491600480360381019061048c9190612f28565b61101a565b60405161049e91906136ed565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c991906131bb565b6110c8565b005b3480156104dc57600080fd5b506104f760048036038101906104f29190612f28565b61114e565b005b34801561050557600080fd5b50610520600480360381019061051b91906131bb565b611225565b60405161052d91906139ac565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190613172565b611296565b005b34801561056b57600080fd5b5061057461132c565b604051610581919061370f565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906131bb565b61133f565b6040516105be9190613686565b60405180910390f35b3480156105d357600080fd5b506105dc6113f1565b6040516105e9919061372a565b60405180910390f35b3480156105fe57600080fd5b5061061960048036038101906106149190612f28565b61147f565b60405161062691906139ac565b60405180910390f35b34801561063b57600080fd5b50610644611537565b005b34801561065257600080fd5b5061066d600480360381019061066891906131bb565b6115bf565b005b34801561067b57600080fd5b50610684611645565b6040516106919190613686565b60405180910390f35b3480156106a657600080fd5b506106af61166f565b6040516106bc919061372a565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e7919061306b565b611701565b005b3480156106fa57600080fd5b5061071560048036038101906107109190612fe8565b611882565b005b34801561072357600080fd5b5061072c6118e4565b604051610739919061372a565b60405180910390f35b34801561074e57600080fd5b50610769600480360381019061076491906131bb565b611972565b604051610776919061372a565b60405180910390f35b34801561078b57600080fd5b50610794611a1c565b6040516107a191906139ac565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190612f28565b611a22565b6040516107de919061370f565b60405180910390f35b3480156107f357600080fd5b5061080e60048036038101906108099190613172565b611a42565b005b34801561081c57600080fd5b5061083760048036038101906108329190612f55565b611ad8565b604051610844919061370f565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190612f28565b611b6c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e957506108e882611c64565b5b9050919050565b6108f8611d46565b73ffffffffffffffffffffffffffffffffffffffff16610916611645565b73ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610963906138cc565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60606000805461099890613caa565b80601f01602080910402602001604051908101604052809291908181526020018280546109c490613caa565b8015610a115780601f106109e657610100808354040283529160200191610a11565b820191906000526020600020905b8154815290600101906020018083116109f457829003601f168201915b5050505050905090565b6000610a2682611d4e565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c906138ac565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aab8261133f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b139061394c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3b611d46565b73ffffffffffffffffffffffffffffffffffffffff161480610b6a5750610b6981610b64611d46565b611ad8565b5b610ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba09061382c565b60405180910390fd5b610bb38383611dba565b505050565b600d5481565b6000600880549050905090565b600f5481565b610be2610bdc611d46565b82611e73565b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c189061396c565b60405180910390fd5b610c2c838383611f51565b505050565b6000610c3c8361147f565b8210610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c749061374c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cde611d46565b73ffffffffffffffffffffffffffffffffffffffff16610cfc611645565b73ffffffffffffffffffffffffffffffffffffffff1614610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d49906138cc565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610db5611d46565b73ffffffffffffffffffffffffffffffffffffffff16610dd3611645565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e20906138cc565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e6757600080fd5b565b6000610e73610bbe565b9050601060009054906101000a900460ff1615610e8f57600080fd5b60008211610e9c57600080fd5b600f54821115610eab57600080fd5b600e548282610eba9190613adf565b1115610ec557600080fd5b6002610ed03361147f565b10610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f079061392c565b60405180910390fd5b610f18611645565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fbe5760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610fbd5781600d54610fb09190613b66565b341015610fbc57600080fd5b5b5b6000600190505b828111610ff457610fe1848284610fdc9190613adf565b6121ad565b8080610fec90613d0d565b915050610fc5565b50505050565b61101583838360405180602001604052806000815250611882565b505050565b606060006110278361147f565b905060008167ffffffffffffffff81111561104557611044613e72565b5b6040519080825280602002602001820160405280156110735781602001602082028036833780820191505090505b50905060005b828110156110bd5761108b8582610c31565b82828151811061109e5761109d613e43565b5b60200260200101818152505080806110b590613d0d565b915050611079565b508092505050919050565b6110d0611d46565b73ffffffffffffffffffffffffffffffffffffffff166110ee611645565b73ffffffffffffffffffffffffffffffffffffffff1614611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b906138cc565b60405180910390fd5b80600d8190555050565b611156611d46565b73ffffffffffffffffffffffffffffffffffffffff16611174611645565b73ffffffffffffffffffffffffffffffffffffffff16146111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c1906138cc565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061122f610bbe565b8210611270576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112679061398c565b60405180910390fd5b6008828154811061128457611283613e43565b5b90600052602060002001549050919050565b61129e611d46565b73ffffffffffffffffffffffffffffffffffffffff166112bc611645565b73ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611309906138cc565b60405180910390fd5b80600b9080519060200190611328929190612d3c565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df9061386c565b60405180910390fd5b80915050919050565b600b80546113fe90613caa565b80601f016020809104026020016040519081016040528092919081815260200182805461142a90613caa565b80156114775780601f1061144c57610100808354040283529160200191611477565b820191906000526020600020905b81548152906001019060200180831161145a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e79061384c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153f611d46565b73ffffffffffffffffffffffffffffffffffffffff1661155d611645565b73ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa906138cc565b60405180910390fd5b6115bd60006121cb565b565b6115c7611d46565b73ffffffffffffffffffffffffffffffffffffffff166115e5611645565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611632906138cc565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461167e90613caa565b80601f01602080910402602001604051908101604052809291908181526020018280546116aa90613caa565b80156116f75780601f106116cc576101008083540402835291602001916116f7565b820191906000526020600020905b8154815290600101906020018083116116da57829003601f168201915b5050505050905090565b611709611d46565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e906137ec565b60405180910390fd5b8060056000611784611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611831611d46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611876919061370f565b60405180910390a35050565b61189361188d611d46565b83611e73565b6118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c99061396c565b60405180910390fd5b6118de84848484612291565b50505050565b600c80546118f190613caa565b80601f016020809104026020016040519081016040528092919081815260200182805461191d90613caa565b801561196a5780601f1061193f5761010080835404028352916020019161196a565b820191906000526020600020905b81548152906001019060200180831161194d57829003601f168201915b505050505081565b606061197d82611d4e565b6119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b39061390c565b60405180910390fd5b60006119c66122ed565b905060008151116119e65760405180602001604052806000815250611a14565b806119f08461237f565b600c604051602001611a0493929190613655565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b611a4a611d46565b73ffffffffffffffffffffffffffffffffffffffff16611a68611645565b73ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906138cc565b60405180910390fd5b80600c9080519060200190611ad4929190612d3c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b74611d46565b73ffffffffffffffffffffffffffffffffffffffff16611b92611645565b73ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf906138cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f9061378c565b60405180910390fd5b611c61816121cb565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d2f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d3f5750611d3e826124e0565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e2d8361133f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e7e82611d4e565b611ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb49061380c565b60405180910390fd5b6000611ec88361133f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f3757508373ffffffffffffffffffffffffffffffffffffffff16611f1f84610a1b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f485750611f478185611ad8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f718261133f565b73ffffffffffffffffffffffffffffffffffffffff1614611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe906138ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e906137cc565b60405180910390fd5b61204283838361254a565b61204d600082611dba565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461209d9190613bc0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120f49190613adf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121c782826040518060200160405280600081525061265e565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61229c848484611f51565b6122a8848484846126b9565b6122e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122de9061376c565b60405180910390fd5b50505050565b6060600b80546122fc90613caa565b80601f016020809104026020016040519081016040528092919081815260200182805461232890613caa565b80156123755780601f1061234a57610100808354040283529160200191612375565b820191906000526020600020905b81548152906001019060200180831161235857829003601f168201915b5050505050905090565b606060008214156123c7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124db565b600082905060005b600082146123f95780806123e290613d0d565b915050600a826123f29190613b35565b91506123cf565b60008167ffffffffffffffff81111561241557612414613e72565b5b6040519080825280601f01601f1916602001820160405280156124475781602001600182028036833780820191505090505b5090505b600085146124d4576001826124609190613bc0565b9150600a8561246f9190613d56565b603061247b9190613adf565b60f81b81838151811061249157612490613e43565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124cd9190613b35565b945061244b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612555838383612850565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125985761259381612855565b6125d7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125d6576125d5838261289e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561261a5761261581612a0b565b612659565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612658576126578282612adc565b5b5b505050565b6126688383612b5b565b61267560008484846126b9565b6126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab9061376c565b60405180910390fd5b505050565b60006126da8473ffffffffffffffffffffffffffffffffffffffff16612d29565b15612843578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612703611d46565b8786866040518563ffffffff1660e01b815260040161272594939291906136a1565b602060405180830381600087803b15801561273f57600080fd5b505af192505050801561277057506040513d601f19601f8201168201806040525081019061276d9190613145565b60015b6127f3573d80600081146127a0576040519150601f19603f3d011682016040523d82523d6000602084013e6127a5565b606091505b506000815114156127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061376c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612848565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016128ab8461147f565b6128b59190613bc0565b905060006007600084815260200190815260200160002054905081811461299a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612a1f9190613bc0565b9050600060096000848152602001908152602001600020549050600060088381548110612a4f57612a4e613e43565b5b906000526020600020015490508060088381548110612a7157612a70613e43565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ac057612abf613e14565b5b6001900381819060005260206000200160009055905550505050565b6000612ae78361147f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc29061388c565b60405180910390fd5b612bd481611d4e565b15612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906137ac565b60405180910390fd5b612c206000838361254a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c709190613adf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612d4890613caa565b90600052602060002090601f016020900481019282612d6a5760008555612db1565b82601f10612d8357805160ff1916838001178555612db1565b82800160010185558215612db1579182015b82811115612db0578251825591602001919060010190612d95565b5b509050612dbe9190612dc2565b5090565b5b80821115612ddb576000816000905550600101612dc3565b5090565b6000612df2612ded846139ec565b6139c7565b905082815260208101848484011115612e0e57612e0d613ea6565b5b612e19848285613c68565b509392505050565b6000612e34612e2f84613a1d565b6139c7565b905082815260208101848484011115612e5057612e4f613ea6565b5b612e5b848285613c68565b509392505050565b600081359050612e72816143e5565b92915050565b600081359050612e87816143fc565b92915050565b600081359050612e9c81614413565b92915050565b600081519050612eb181614413565b92915050565b600082601f830112612ecc57612ecb613ea1565b5b8135612edc848260208601612ddf565b91505092915050565b600082601f830112612efa57612ef9613ea1565b5b8135612f0a848260208601612e21565b91505092915050565b600081359050612f228161442a565b92915050565b600060208284031215612f3e57612f3d613eb0565b5b6000612f4c84828501612e63565b91505092915050565b60008060408385031215612f6c57612f6b613eb0565b5b6000612f7a85828601612e63565b9250506020612f8b85828601612e63565b9150509250929050565b600080600060608486031215612fae57612fad613eb0565b5b6000612fbc86828701612e63565b9350506020612fcd86828701612e63565b9250506040612fde86828701612f13565b9150509250925092565b6000806000806080858703121561300257613001613eb0565b5b600061301087828801612e63565b945050602061302187828801612e63565b935050604061303287828801612f13565b925050606085013567ffffffffffffffff81111561305357613052613eab565b5b61305f87828801612eb7565b91505092959194509250565b6000806040838503121561308257613081613eb0565b5b600061309085828601612e63565b92505060206130a185828601612e78565b9150509250929050565b600080604083850312156130c2576130c1613eb0565b5b60006130d085828601612e63565b92505060206130e185828601612f13565b9150509250929050565b60006020828403121561310157613100613eb0565b5b600061310f84828501612e78565b91505092915050565b60006020828403121561312e5761312d613eb0565b5b600061313c84828501612e8d565b91505092915050565b60006020828403121561315b5761315a613eb0565b5b600061316984828501612ea2565b91505092915050565b60006020828403121561318857613187613eb0565b5b600082013567ffffffffffffffff8111156131a6576131a5613eab565b5b6131b284828501612ee5565b91505092915050565b6000602082840312156131d1576131d0613eb0565b5b60006131df84828501612f13565b91505092915050565b60006131f48383613637565b60208301905092915050565b61320981613bf4565b82525050565b600061321a82613a73565b6132248185613aa1565b935061322f83613a4e565b8060005b8381101561326057815161324788826131e8565b975061325283613a94565b925050600181019050613233565b5085935050505092915050565b61327681613c06565b82525050565b600061328782613a7e565b6132918185613ab2565b93506132a1818560208601613c77565b6132aa81613eb5565b840191505092915050565b60006132c082613a89565b6132ca8185613ac3565b93506132da818560208601613c77565b6132e381613eb5565b840191505092915050565b60006132f982613a89565b6133038185613ad4565b9350613313818560208601613c77565b80840191505092915050565b6000815461332c81613caa565b6133368186613ad4565b94506001821660008114613351576001811461336257613395565b60ff19831686528186019350613395565b61336b85613a5e565b60005b8381101561338d5781548189015260018201915060208101905061336e565b838801955050505b50505092915050565b60006133ab602b83613ac3565b91506133b682613ec6565b604082019050919050565b60006133ce603283613ac3565b91506133d982613f15565b604082019050919050565b60006133f1602683613ac3565b91506133fc82613f64565b604082019050919050565b6000613414601c83613ac3565b915061341f82613fb3565b602082019050919050565b6000613437602483613ac3565b915061344282613fdc565b604082019050919050565b600061345a601983613ac3565b91506134658261402b565b602082019050919050565b600061347d602c83613ac3565b915061348882614054565b604082019050919050565b60006134a0603883613ac3565b91506134ab826140a3565b604082019050919050565b60006134c3602a83613ac3565b91506134ce826140f2565b604082019050919050565b60006134e6602983613ac3565b91506134f182614141565b604082019050919050565b6000613509602083613ac3565b915061351482614190565b602082019050919050565b600061352c602c83613ac3565b9150613537826141b9565b604082019050919050565b600061354f602083613ac3565b915061355a82614208565b602082019050919050565b6000613572602983613ac3565b915061357d82614231565b604082019050919050565b6000613595602f83613ac3565b91506135a082614280565b604082019050919050565b60006135b8601383613ac3565b91506135c3826142cf565b602082019050919050565b60006135db602183613ac3565b91506135e6826142f8565b604082019050919050565b60006135fe603183613ac3565b915061360982614347565b604082019050919050565b6000613621602c83613ac3565b915061362c82614396565b604082019050919050565b61364081613c5e565b82525050565b61364f81613c5e565b82525050565b600061366182866132ee565b915061366d82856132ee565b9150613679828461331f565b9150819050949350505050565b600060208201905061369b6000830184613200565b92915050565b60006080820190506136b66000830187613200565b6136c36020830186613200565b6136d06040830185613646565b81810360608301526136e2818461327c565b905095945050505050565b60006020820190508181036000830152613707818461320f565b905092915050565b6000602082019050613724600083018461326d565b92915050565b6000602082019050818103600083015261374481846132b5565b905092915050565b600060208201905081810360008301526137658161339e565b9050919050565b60006020820190508181036000830152613785816133c1565b9050919050565b600060208201905081810360008301526137a5816133e4565b9050919050565b600060208201905081810360008301526137c581613407565b9050919050565b600060208201905081810360008301526137e58161342a565b9050919050565b600060208201905081810360008301526138058161344d565b9050919050565b6000602082019050818103600083015261382581613470565b9050919050565b6000602082019050818103600083015261384581613493565b9050919050565b60006020820190508181036000830152613865816134b6565b9050919050565b60006020820190508181036000830152613885816134d9565b9050919050565b600060208201905081810360008301526138a5816134fc565b9050919050565b600060208201905081810360008301526138c58161351f565b9050919050565b600060208201905081810360008301526138e581613542565b9050919050565b6000602082019050818103600083015261390581613565565b9050919050565b6000602082019050818103600083015261392581613588565b9050919050565b60006020820190508181036000830152613945816135ab565b9050919050565b60006020820190508181036000830152613965816135ce565b9050919050565b60006020820190508181036000830152613985816135f1565b9050919050565b600060208201905081810360008301526139a581613614565b9050919050565b60006020820190506139c16000830184613646565b92915050565b60006139d16139e2565b90506139dd8282613cdc565b919050565b6000604051905090565b600067ffffffffffffffff821115613a0757613a06613e72565b5b613a1082613eb5565b9050602081019050919050565b600067ffffffffffffffff821115613a3857613a37613e72565b5b613a4182613eb5565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613aea82613c5e565b9150613af583613c5e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b2a57613b29613d87565b5b828201905092915050565b6000613b4082613c5e565b9150613b4b83613c5e565b925082613b5b57613b5a613db6565b5b828204905092915050565b6000613b7182613c5e565b9150613b7c83613c5e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bb557613bb4613d87565b5b828202905092915050565b6000613bcb82613c5e565b9150613bd683613c5e565b925082821015613be957613be8613d87565b5b828203905092915050565b6000613bff82613c3e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c95578082015181840152602081019050613c7a565b83811115613ca4576000848401525b50505050565b60006002820490506001821680613cc257607f821691505b60208210811415613cd657613cd5613de5565b5b50919050565b613ce582613eb5565b810181811067ffffffffffffffff82111715613d0457613d03613e72565b5b80604052505050565b6000613d1882613c5e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d4b57613d4a613d87565b5b600182019050919050565b6000613d6182613c5e565b9150613d6c83613c5e565b925082613d7c57613d7b613db6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4f6e6c792074776f207065722077616c6c657400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6143ee81613bf4565b81146143f957600080fd5b50565b61440581613c06565b811461441057600080fd5b50565b61441c81613c12565b811461442757600080fd5b50565b61443381613c5e565b811461443e57600080fd5b5056fea264697066735822122053f9986a4a46fbc4c3717c48dc2c4a04cde73799cd2b31a8e65484cf4ea3ff4764736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b46616e746f6d676f6368690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005474f434849000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6151634775376e42636357326a33665769587a4e743748696756384b6373687263486945416471515577593200000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb011461077f578063d936547e146107aa578063da3ef23f146107e7578063e985e9c514610810578063f2fde38b1461084d5761020f565b8063a22cb465146106c5578063b88d4fde146106ee578063c668286214610717578063c87b56dd146107425761020f565b806370a08231116100e757806370a08231146105f2578063715018a61461062f5780637f00c7a6146106465780638da5cb5b1461066f57806395d89b411461069a5761020f565b806355f804b3146105365780635c975abb1461055f5780636352211e1461058a5780636c0360eb146105c75761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e14610441578063438b63001461046a57806344a0d68a146104a75780634a4c560d146104d05780634f6ccce7146104f95761020f565b80632f745c59146103b557806330cc7ae0146103f25780633ccfd60b1461041b57806340c10f19146104255761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd14610336578063239c70ae1461036157806323b872dd1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613118565b610876565b604051610248919061370f565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906130eb565b6108f0565b005b34801561028657600080fd5b5061028f610989565b60405161029c919061372a565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906131bb565b610a1b565b6040516102d99190613686565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906130ab565b610aa0565b005b34801561031757600080fd5b50610320610bb8565b60405161032d91906139ac565b60405180910390f35b34801561034257600080fd5b5061034b610bbe565b60405161035891906139ac565b60405180910390f35b34801561036d57600080fd5b50610376610bcb565b60405161038391906139ac565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190612f95565b610bd1565b005b3480156103c157600080fd5b506103dc60048036038101906103d791906130ab565b610c31565b6040516103e991906139ac565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612f28565b610cd6565b005b610423610dad565b005b61043f600480360381019061043a91906130ab565b610e69565b005b34801561044d57600080fd5b5061046860048036038101906104639190612f95565b610ffa565b005b34801561047657600080fd5b50610491600480360381019061048c9190612f28565b61101a565b60405161049e91906136ed565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c991906131bb565b6110c8565b005b3480156104dc57600080fd5b506104f760048036038101906104f29190612f28565b61114e565b005b34801561050557600080fd5b50610520600480360381019061051b91906131bb565b611225565b60405161052d91906139ac565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190613172565b611296565b005b34801561056b57600080fd5b5061057461132c565b604051610581919061370f565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906131bb565b61133f565b6040516105be9190613686565b60405180910390f35b3480156105d357600080fd5b506105dc6113f1565b6040516105e9919061372a565b60405180910390f35b3480156105fe57600080fd5b5061061960048036038101906106149190612f28565b61147f565b60405161062691906139ac565b60405180910390f35b34801561063b57600080fd5b50610644611537565b005b34801561065257600080fd5b5061066d600480360381019061066891906131bb565b6115bf565b005b34801561067b57600080fd5b50610684611645565b6040516106919190613686565b60405180910390f35b3480156106a657600080fd5b506106af61166f565b6040516106bc919061372a565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e7919061306b565b611701565b005b3480156106fa57600080fd5b5061071560048036038101906107109190612fe8565b611882565b005b34801561072357600080fd5b5061072c6118e4565b604051610739919061372a565b60405180910390f35b34801561074e57600080fd5b50610769600480360381019061076491906131bb565b611972565b604051610776919061372a565b60405180910390f35b34801561078b57600080fd5b50610794611a1c565b6040516107a191906139ac565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190612f28565b611a22565b6040516107de919061370f565b60405180910390f35b3480156107f357600080fd5b5061080e60048036038101906108099190613172565b611a42565b005b34801561081c57600080fd5b5061083760048036038101906108329190612f55565b611ad8565b604051610844919061370f565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190612f28565b611b6c565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e957506108e882611c64565b5b9050919050565b6108f8611d46565b73ffffffffffffffffffffffffffffffffffffffff16610916611645565b73ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610963906138cc565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60606000805461099890613caa565b80601f01602080910402602001604051908101604052809291908181526020018280546109c490613caa565b8015610a115780601f106109e657610100808354040283529160200191610a11565b820191906000526020600020905b8154815290600101906020018083116109f457829003601f168201915b5050505050905090565b6000610a2682611d4e565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c906138ac565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aab8261133f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b139061394c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3b611d46565b73ffffffffffffffffffffffffffffffffffffffff161480610b6a5750610b6981610b64611d46565b611ad8565b5b610ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba09061382c565b60405180910390fd5b610bb38383611dba565b505050565b600d5481565b6000600880549050905090565b600f5481565b610be2610bdc611d46565b82611e73565b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c189061396c565b60405180910390fd5b610c2c838383611f51565b505050565b6000610c3c8361147f565b8210610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c749061374c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cde611d46565b73ffffffffffffffffffffffffffffffffffffffff16610cfc611645565b73ffffffffffffffffffffffffffffffffffffffff1614610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d49906138cc565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610db5611d46565b73ffffffffffffffffffffffffffffffffffffffff16610dd3611645565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e20906138cc565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e6757600080fd5b565b6000610e73610bbe565b9050601060009054906101000a900460ff1615610e8f57600080fd5b60008211610e9c57600080fd5b600f54821115610eab57600080fd5b600e548282610eba9190613adf565b1115610ec557600080fd5b6002610ed03361147f565b10610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f079061392c565b60405180910390fd5b610f18611645565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fbe5760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610fbd5781600d54610fb09190613b66565b341015610fbc57600080fd5b5b5b6000600190505b828111610ff457610fe1848284610fdc9190613adf565b6121ad565b8080610fec90613d0d565b915050610fc5565b50505050565b61101583838360405180602001604052806000815250611882565b505050565b606060006110278361147f565b905060008167ffffffffffffffff81111561104557611044613e72565b5b6040519080825280602002602001820160405280156110735781602001602082028036833780820191505090505b50905060005b828110156110bd5761108b8582610c31565b82828151811061109e5761109d613e43565b5b60200260200101818152505080806110b590613d0d565b915050611079565b508092505050919050565b6110d0611d46565b73ffffffffffffffffffffffffffffffffffffffff166110ee611645565b73ffffffffffffffffffffffffffffffffffffffff1614611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b906138cc565b60405180910390fd5b80600d8190555050565b611156611d46565b73ffffffffffffffffffffffffffffffffffffffff16611174611645565b73ffffffffffffffffffffffffffffffffffffffff16146111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c1906138cc565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061122f610bbe565b8210611270576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112679061398c565b60405180910390fd5b6008828154811061128457611283613e43565b5b90600052602060002001549050919050565b61129e611d46565b73ffffffffffffffffffffffffffffffffffffffff166112bc611645565b73ffffffffffffffffffffffffffffffffffffffff1614611312576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611309906138cc565b60405180910390fd5b80600b9080519060200190611328929190612d3c565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113df9061386c565b60405180910390fd5b80915050919050565b600b80546113fe90613caa565b80601f016020809104026020016040519081016040528092919081815260200182805461142a90613caa565b80156114775780601f1061144c57610100808354040283529160200191611477565b820191906000526020600020905b81548152906001019060200180831161145a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e79061384c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153f611d46565b73ffffffffffffffffffffffffffffffffffffffff1661155d611645565b73ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa906138cc565b60405180910390fd5b6115bd60006121cb565b565b6115c7611d46565b73ffffffffffffffffffffffffffffffffffffffff166115e5611645565b73ffffffffffffffffffffffffffffffffffffffff161461163b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611632906138cc565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461167e90613caa565b80601f01602080910402602001604051908101604052809291908181526020018280546116aa90613caa565b80156116f75780601f106116cc576101008083540402835291602001916116f7565b820191906000526020600020905b8154815290600101906020018083116116da57829003601f168201915b5050505050905090565b611709611d46565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e906137ec565b60405180910390fd5b8060056000611784611d46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611831611d46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611876919061370f565b60405180910390a35050565b61189361188d611d46565b83611e73565b6118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c99061396c565b60405180910390fd5b6118de84848484612291565b50505050565b600c80546118f190613caa565b80601f016020809104026020016040519081016040528092919081815260200182805461191d90613caa565b801561196a5780601f1061193f5761010080835404028352916020019161196a565b820191906000526020600020905b81548152906001019060200180831161194d57829003601f168201915b505050505081565b606061197d82611d4e565b6119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b39061390c565b60405180910390fd5b60006119c66122ed565b905060008151116119e65760405180602001604052806000815250611a14565b806119f08461237f565b600c604051602001611a0493929190613655565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b611a4a611d46565b73ffffffffffffffffffffffffffffffffffffffff16611a68611645565b73ffffffffffffffffffffffffffffffffffffffff1614611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab5906138cc565b60405180910390fd5b80600c9080519060200190611ad4929190612d3c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b74611d46565b73ffffffffffffffffffffffffffffffffffffffff16611b92611645565b73ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf906138cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f9061378c565b60405180910390fd5b611c61816121cb565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d2f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d3f5750611d3e826124e0565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e2d8361133f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e7e82611d4e565b611ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb49061380c565b60405180910390fd5b6000611ec88361133f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f3757508373ffffffffffffffffffffffffffffffffffffffff16611f1f84610a1b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f485750611f478185611ad8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f718261133f565b73ffffffffffffffffffffffffffffffffffffffff1614611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe906138ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e906137cc565b60405180910390fd5b61204283838361254a565b61204d600082611dba565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461209d9190613bc0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120f49190613adf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121c782826040518060200160405280600081525061265e565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61229c848484611f51565b6122a8848484846126b9565b6122e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122de9061376c565b60405180910390fd5b50505050565b6060600b80546122fc90613caa565b80601f016020809104026020016040519081016040528092919081815260200182805461232890613caa565b80156123755780601f1061234a57610100808354040283529160200191612375565b820191906000526020600020905b81548152906001019060200180831161235857829003601f168201915b5050505050905090565b606060008214156123c7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124db565b600082905060005b600082146123f95780806123e290613d0d565b915050600a826123f29190613b35565b91506123cf565b60008167ffffffffffffffff81111561241557612414613e72565b5b6040519080825280601f01601f1916602001820160405280156124475781602001600182028036833780820191505090505b5090505b600085146124d4576001826124609190613bc0565b9150600a8561246f9190613d56565b603061247b9190613adf565b60f81b81838151811061249157612490613e43565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124cd9190613b35565b945061244b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612555838383612850565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125985761259381612855565b6125d7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125d6576125d5838261289e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561261a5761261581612a0b565b612659565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612658576126578282612adc565b5b5b505050565b6126688383612b5b565b61267560008484846126b9565b6126b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ab9061376c565b60405180910390fd5b505050565b60006126da8473ffffffffffffffffffffffffffffffffffffffff16612d29565b15612843578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612703611d46565b8786866040518563ffffffff1660e01b815260040161272594939291906136a1565b602060405180830381600087803b15801561273f57600080fd5b505af192505050801561277057506040513d601f19601f8201168201806040525081019061276d9190613145565b60015b6127f3573d80600081146127a0576040519150601f19603f3d011682016040523d82523d6000602084013e6127a5565b606091505b506000815114156127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061376c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612848565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016128ab8461147f565b6128b59190613bc0565b905060006007600084815260200190815260200160002054905081811461299a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612a1f9190613bc0565b9050600060096000848152602001908152602001600020549050600060088381548110612a4f57612a4e613e43565b5b906000526020600020015490508060088381548110612a7157612a70613e43565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ac057612abf613e14565b5b6001900381819060005260206000200160009055905550505050565b6000612ae78361147f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc29061388c565b60405180910390fd5b612bd481611d4e565b15612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906137ac565b60405180910390fd5b612c206000838361254a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c709190613adf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612d4890613caa565b90600052602060002090601f016020900481019282612d6a5760008555612db1565b82601f10612d8357805160ff1916838001178555612db1565b82800160010185558215612db1579182015b82811115612db0578251825591602001919060010190612d95565b5b509050612dbe9190612dc2565b5090565b5b80821115612ddb576000816000905550600101612dc3565b5090565b6000612df2612ded846139ec565b6139c7565b905082815260208101848484011115612e0e57612e0d613ea6565b5b612e19848285613c68565b509392505050565b6000612e34612e2f84613a1d565b6139c7565b905082815260208101848484011115612e5057612e4f613ea6565b5b612e5b848285613c68565b509392505050565b600081359050612e72816143e5565b92915050565b600081359050612e87816143fc565b92915050565b600081359050612e9c81614413565b92915050565b600081519050612eb181614413565b92915050565b600082601f830112612ecc57612ecb613ea1565b5b8135612edc848260208601612ddf565b91505092915050565b600082601f830112612efa57612ef9613ea1565b5b8135612f0a848260208601612e21565b91505092915050565b600081359050612f228161442a565b92915050565b600060208284031215612f3e57612f3d613eb0565b5b6000612f4c84828501612e63565b91505092915050565b60008060408385031215612f6c57612f6b613eb0565b5b6000612f7a85828601612e63565b9250506020612f8b85828601612e63565b9150509250929050565b600080600060608486031215612fae57612fad613eb0565b5b6000612fbc86828701612e63565b9350506020612fcd86828701612e63565b9250506040612fde86828701612f13565b9150509250925092565b6000806000806080858703121561300257613001613eb0565b5b600061301087828801612e63565b945050602061302187828801612e63565b935050604061303287828801612f13565b925050606085013567ffffffffffffffff81111561305357613052613eab565b5b61305f87828801612eb7565b91505092959194509250565b6000806040838503121561308257613081613eb0565b5b600061309085828601612e63565b92505060206130a185828601612e78565b9150509250929050565b600080604083850312156130c2576130c1613eb0565b5b60006130d085828601612e63565b92505060206130e185828601612f13565b9150509250929050565b60006020828403121561310157613100613eb0565b5b600061310f84828501612e78565b91505092915050565b60006020828403121561312e5761312d613eb0565b5b600061313c84828501612e8d565b91505092915050565b60006020828403121561315b5761315a613eb0565b5b600061316984828501612ea2565b91505092915050565b60006020828403121561318857613187613eb0565b5b600082013567ffffffffffffffff8111156131a6576131a5613eab565b5b6131b284828501612ee5565b91505092915050565b6000602082840312156131d1576131d0613eb0565b5b60006131df84828501612f13565b91505092915050565b60006131f48383613637565b60208301905092915050565b61320981613bf4565b82525050565b600061321a82613a73565b6132248185613aa1565b935061322f83613a4e565b8060005b8381101561326057815161324788826131e8565b975061325283613a94565b925050600181019050613233565b5085935050505092915050565b61327681613c06565b82525050565b600061328782613a7e565b6132918185613ab2565b93506132a1818560208601613c77565b6132aa81613eb5565b840191505092915050565b60006132c082613a89565b6132ca8185613ac3565b93506132da818560208601613c77565b6132e381613eb5565b840191505092915050565b60006132f982613a89565b6133038185613ad4565b9350613313818560208601613c77565b80840191505092915050565b6000815461332c81613caa565b6133368186613ad4565b94506001821660008114613351576001811461336257613395565b60ff19831686528186019350613395565b61336b85613a5e565b60005b8381101561338d5781548189015260018201915060208101905061336e565b838801955050505b50505092915050565b60006133ab602b83613ac3565b91506133b682613ec6565b604082019050919050565b60006133ce603283613ac3565b91506133d982613f15565b604082019050919050565b60006133f1602683613ac3565b91506133fc82613f64565b604082019050919050565b6000613414601c83613ac3565b915061341f82613fb3565b602082019050919050565b6000613437602483613ac3565b915061344282613fdc565b604082019050919050565b600061345a601983613ac3565b91506134658261402b565b602082019050919050565b600061347d602c83613ac3565b915061348882614054565b604082019050919050565b60006134a0603883613ac3565b91506134ab826140a3565b604082019050919050565b60006134c3602a83613ac3565b91506134ce826140f2565b604082019050919050565b60006134e6602983613ac3565b91506134f182614141565b604082019050919050565b6000613509602083613ac3565b915061351482614190565b602082019050919050565b600061352c602c83613ac3565b9150613537826141b9565b604082019050919050565b600061354f602083613ac3565b915061355a82614208565b602082019050919050565b6000613572602983613ac3565b915061357d82614231565b604082019050919050565b6000613595602f83613ac3565b91506135a082614280565b604082019050919050565b60006135b8601383613ac3565b91506135c3826142cf565b602082019050919050565b60006135db602183613ac3565b91506135e6826142f8565b604082019050919050565b60006135fe603183613ac3565b915061360982614347565b604082019050919050565b6000613621602c83613ac3565b915061362c82614396565b604082019050919050565b61364081613c5e565b82525050565b61364f81613c5e565b82525050565b600061366182866132ee565b915061366d82856132ee565b9150613679828461331f565b9150819050949350505050565b600060208201905061369b6000830184613200565b92915050565b60006080820190506136b66000830187613200565b6136c36020830186613200565b6136d06040830185613646565b81810360608301526136e2818461327c565b905095945050505050565b60006020820190508181036000830152613707818461320f565b905092915050565b6000602082019050613724600083018461326d565b92915050565b6000602082019050818103600083015261374481846132b5565b905092915050565b600060208201905081810360008301526137658161339e565b9050919050565b60006020820190508181036000830152613785816133c1565b9050919050565b600060208201905081810360008301526137a5816133e4565b9050919050565b600060208201905081810360008301526137c581613407565b9050919050565b600060208201905081810360008301526137e58161342a565b9050919050565b600060208201905081810360008301526138058161344d565b9050919050565b6000602082019050818103600083015261382581613470565b9050919050565b6000602082019050818103600083015261384581613493565b9050919050565b60006020820190508181036000830152613865816134b6565b9050919050565b60006020820190508181036000830152613885816134d9565b9050919050565b600060208201905081810360008301526138a5816134fc565b9050919050565b600060208201905081810360008301526138c58161351f565b9050919050565b600060208201905081810360008301526138e581613542565b9050919050565b6000602082019050818103600083015261390581613565565b9050919050565b6000602082019050818103600083015261392581613588565b9050919050565b60006020820190508181036000830152613945816135ab565b9050919050565b60006020820190508181036000830152613965816135ce565b9050919050565b60006020820190508181036000830152613985816135f1565b9050919050565b600060208201905081810360008301526139a581613614565b9050919050565b60006020820190506139c16000830184613646565b92915050565b60006139d16139e2565b90506139dd8282613cdc565b919050565b6000604051905090565b600067ffffffffffffffff821115613a0757613a06613e72565b5b613a1082613eb5565b9050602081019050919050565b600067ffffffffffffffff821115613a3857613a37613e72565b5b613a4182613eb5565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613aea82613c5e565b9150613af583613c5e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b2a57613b29613d87565b5b828201905092915050565b6000613b4082613c5e565b9150613b4b83613c5e565b925082613b5b57613b5a613db6565b5b828204905092915050565b6000613b7182613c5e565b9150613b7c83613c5e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bb557613bb4613d87565b5b828202905092915050565b6000613bcb82613c5e565b9150613bd683613c5e565b925082821015613be957613be8613d87565b5b828203905092915050565b6000613bff82613c3e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c95578082015181840152602081019050613c7a565b83811115613ca4576000848401525b50505050565b60006002820490506001821680613cc257607f821691505b60208210811415613cd657613cd5613de5565b5b50919050565b613ce582613eb5565b810181811067ffffffffffffffff82111715613d0457613d03613e72565b5b80604052505050565b6000613d1882613c5e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d4b57613d4a613d87565b5b600182019050919050565b6000613d6182613c5e565b9150613d6c83613c5e565b925082613d7c57613d7b613db6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4f6e6c792074776f207065722077616c6c657400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6143ee81613bf4565b81146143f957600080fd5b50565b61440581613c06565b811461441057600080fd5b50565b61441c81613c12565b811461442757600080fd5b50565b61443381613c5e565b811461443e57600080fd5b5056fea264697066735822122053f9986a4a46fbc4c3717c48dc2c4a04cde73799cd2b31a8e65484cf4ea3ff4764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b46616e746f6d676f6368690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005474f434849000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6151634775376e42636357326a33665769587a4e743748696756384b6373687263486945416471515577593200000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Fantomgochi
Arg [1] : _symbol (string): GOCHI
Arg [2] : _initBaseURI (string): https://gateway.pinata.cloud/ipfs/QmaQcGu7nBccW2j3fWiXzNt7HigV8KcshrcHiEAdqQUwY2
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [4] : 46616e746f6d676f636869000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 474f434849000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f516d6151634775376e42636357326a33665769587a4e743748696756384b
Arg [10] : 6373687263486945416471515577593200000000000000000000000000000000
Deployed Bytecode Sourcemap
43202:2857:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34736:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45657:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22628:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24187:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23710:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43357:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35376:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43427:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25077:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35044:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45836:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45942:114;;;:::i;:::-;;43851:561;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25487:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44418:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45217:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45736:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35566:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45425:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43464:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22322:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43289:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22052:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42525:94;;;;;;;;;;;;;:::i;:::-;;45303:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41874:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22797:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24480:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25743:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43315:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44772:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43391:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43495:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45529:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24846:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42774:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34736:224;34838:4;34877:35;34862:50;;;:11;:50;;;;:90;;;;34916:36;34940:11;34916:23;:36::i;:::-;34862:90;34855:97;;34736:224;;;:::o;45657:73::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45718:6:::1;45709;;:15;;;;;;;;;;;;;;;;;;45657:73:::0;:::o;22628:100::-;22682:13;22715:5;22708:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22628:100;:::o;24187:221::-;24263:7;24291:16;24299:7;24291;:16::i;:::-;24283:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24376:15;:24;24392:7;24376:24;;;;;;;;;;;;;;;;;;;;;24369:31;;24187:221;;;:::o;23710:411::-;23791:13;23807:23;23822:7;23807:14;:23::i;:::-;23791:39;;23855:5;23849:11;;:2;:11;;;;23841:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23949:5;23933:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23958:37;23975:5;23982:12;:10;:12::i;:::-;23958:16;:37::i;:::-;23933:62;23911:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24092:21;24101:2;24105:7;24092:8;:21::i;:::-;23780:341;23710:411;;:::o;43357:29::-;;;;:::o;35376:113::-;35437:7;35464:10;:17;;;;35457:24;;35376:113;:::o;43427:32::-;;;;:::o;25077:339::-;25272:41;25291:12;:10;:12::i;:::-;25305:7;25272:18;:41::i;:::-;25264:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25380:28;25390:4;25396:2;25400:7;25380:9;:28::i;:::-;25077:339;;;:::o;35044:256::-;35141:7;35177:23;35194:5;35177:16;:23::i;:::-;35169:5;:31;35161:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35266:12;:19;35279:5;35266:19;;;;;;;;;;;;;;;:26;35286:5;35266:26;;;;;;;;;;;;35259:33;;35044:256;;;;:::o;45836:100::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45925:5:::1;45904:11;:18;45916:5;45904:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;45836:100:::0;:::o;45942:114::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46010:10:::1;46002:24;;:47;46027:21;46002:47;;;;;;;;;;;;;;;;;;;;;;;45994:56;;;::::0;::::1;;45942:114::o:0;43851:561::-;43921:14;43938:13;:11;:13::i;:::-;43921:30;;43967:6;;;;;;;;;;;43966:7;43958:16;;;;;;44003:1;43989:11;:15;43981:24;;;;;;44035:13;;44020:11;:28;;44012:37;;;;;;44088:9;;44073:11;44064:6;:20;;;;:::i;:::-;:33;;44056:42;;;;;;44133:1;44109:21;44119:10;44109:9;:21::i;:::-;:25;44101:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44185:7;:5;:7::i;:::-;44171:21;;:10;:21;;;44167:146;;44235:4;44208:31;;:11;:23;44220:10;44208:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;44205:101;;44282:11;44275:4;;:18;;;;:::i;:::-;44262:9;:31;;44254:40;;;;;;44205:101;44167:146;44326:9;44338:1;44326:13;;44321:86;44346:11;44341:1;:16;44321:86;;44373:26;44383:3;44397:1;44388:6;:10;;;;:::i;:::-;44373:9;:26::i;:::-;44359:3;;;;;:::i;:::-;;;;44321:86;;;;43914:498;43851:561;;:::o;25487:185::-;25625:39;25642:4;25648:2;25652:7;25625:39;;;;;;;;;;;;:16;:39::i;:::-;25487:185;;;:::o;44418:348::-;44493:16;44521:23;44547:17;44557:6;44547:9;:17::i;:::-;44521:43;;44571:25;44613:15;44599:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44571:58;;44641:9;44636:103;44656:15;44652:1;:19;44636:103;;;44701:30;44721:6;44729:1;44701:19;:30::i;:::-;44687:8;44696:1;44687:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;44673:3;;;;;:::i;:::-;;;;44636:103;;;;44752:8;44745:15;;;;44418:348;;;:::o;45217:80::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45283:8:::1;45276:4;:15;;;;45217:80:::0;:::o;45736:93::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45819:4:::1;45798:11;:18;45810:5;45798:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;45736:93:::0;:::o;35566:233::-;35641:7;35677:30;:28;:30::i;:::-;35669:5;:38;35661:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35774:10;35785:5;35774:17;;;;;;;;:::i;:::-;;;;;;;;;;35767:24;;35566:233;;;:::o;45425:98::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45506:11:::1;45496:7;:21;;;;;;;;;;;;:::i;:::-;;45425:98:::0;:::o;43464:26::-;;;;;;;;;;;;;:::o;22322:239::-;22394:7;22414:13;22430:7;:16;22438:7;22430:16;;;;;;;;;;;;;;;;;;;;;22414:32;;22482:1;22465:19;;:5;:19;;;;22457:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22548:5;22541:12;;;22322:239;;;:::o;43289:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22052:208::-;22124:7;22169:1;22152:19;;:5;:19;;;;22144:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22236:9;:16;22246:5;22236:16;;;;;;;;;;;;;;;;22229:23;;22052:208;;;:::o;42525:94::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42590:21:::1;42608:1;42590:9;:21::i;:::-;42525:94::o:0;45303:116::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45396:17:::1;45380:13;:33;;;;45303:116:::0;:::o;41874:87::-;41920:7;41947:6;;;;;;;;;;;41940:13;;41874:87;:::o;22797:104::-;22853:13;22886:7;22879:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22797:104;:::o;24480:295::-;24595:12;:10;:12::i;:::-;24583:24;;:8;:24;;;;24575:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24695:8;24650:18;:32;24669:12;:10;:12::i;:::-;24650:32;;;;;;;;;;;;;;;:42;24683:8;24650:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24748:8;24719:48;;24734:12;:10;:12::i;:::-;24719:48;;;24758:8;24719:48;;;;;;:::i;:::-;;;;;;;;24480:295;;:::o;25743:328::-;25918:41;25937:12;:10;:12::i;:::-;25951:7;25918:18;:41::i;:::-;25910:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26024:39;26038:4;26044:2;26048:7;26057:5;26024:13;:39::i;:::-;25743:328;;;;:::o;43315:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44772:423::-;44870:13;44911:16;44919:7;44911;:16::i;:::-;44895:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45001:28;45032:10;:8;:10::i;:::-;45001:41;;45087:1;45062:14;45056:28;:32;:133;;;;;;;;;;;;;;;;;45124:14;45140:18;:7;:16;:18::i;:::-;45160:13;45107:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45056:133;45049:140;;;44772:423;;;:::o;43391:31::-;;;;:::o;43495:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;45529:122::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45628:17:::1;45612:13;:33;;;;;;;;;;;;:::i;:::-;;45529:122:::0;:::o;24846:164::-;24943:4;24967:18;:25;24986:5;24967:25;;;;;;;;;;;;;;;:35;24993:8;24967:35;;;;;;;;;;;;;;;;;;;;;;;;;24960:42;;24846:164;;;;:::o;42774:192::-;42105:12;:10;:12::i;:::-;42094:23;;:7;:5;:7::i;:::-;:23;;;42086:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42883:1:::1;42863:22;;:8;:22;;;;42855:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42939:19;42949:8;42939:9;:19::i;:::-;42774:192:::0;:::o;21683:305::-;21785:4;21837:25;21822:40;;;:11;:40;;;;:105;;;;21894:33;21879:48;;;:11;:48;;;;21822:105;:158;;;;21944:36;21968:11;21944:23;:36::i;:::-;21822:158;21802:178;;21683:305;;;:::o;20157:98::-;20210:7;20237:10;20230:17;;20157:98;:::o;27581:127::-;27646:4;27698:1;27670:30;;:7;:16;27678:7;27670:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27663:37;;27581:127;;;:::o;31563:174::-;31665:2;31638:15;:24;31654:7;31638:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31721:7;31717:2;31683:46;;31692:23;31707:7;31692:14;:23::i;:::-;31683:46;;;;;;;;;;;;31563:174;;:::o;27875:348::-;27968:4;27993:16;28001:7;27993;:16::i;:::-;27985:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28069:13;28085:23;28100:7;28085:14;:23::i;:::-;28069:39;;28138:5;28127:16;;:7;:16;;;:51;;;;28171:7;28147:31;;:20;28159:7;28147:11;:20::i;:::-;:31;;;28127:51;:87;;;;28182:32;28199:5;28206:7;28182:16;:32::i;:::-;28127:87;28119:96;;;27875:348;;;;:::o;30867:578::-;31026:4;30999:31;;:23;31014:7;30999:14;:23::i;:::-;:31;;;30991:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31109:1;31095:16;;:2;:16;;;;31087:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31165:39;31186:4;31192:2;31196:7;31165:20;:39::i;:::-;31269:29;31286:1;31290:7;31269:8;:29::i;:::-;31330:1;31311:9;:15;31321:4;31311:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31359:1;31342:9;:13;31352:2;31342:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31390:2;31371:7;:16;31379:7;31371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31429:7;31425:2;31410:27;;31419:4;31410:27;;;;;;;;;;;;30867:578;;;:::o;28565:110::-;28641:26;28651:2;28655:7;28641:26;;;;;;;;;;;;:9;:26::i;:::-;28565:110;;:::o;42974:173::-;43030:16;43049:6;;;;;;;;;;;43030:25;;43075:8;43066:6;;:17;;;;;;;;;;;;;;;;;;43130:8;43099:40;;43120:8;43099:40;;;;;;;;;;;;43019:128;42974:173;:::o;26953:315::-;27110:28;27120:4;27126:2;27130:7;27110:9;:28::i;:::-;27157:48;27180:4;27186:2;27190:7;27199:5;27157:22;:48::i;:::-;27149:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26953:315;;;;:::o;43730:102::-;43790:13;43819:7;43812:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43730:102;:::o;7989:723::-;8045:13;8275:1;8266:5;:10;8262:53;;;8293:10;;;;;;;;;;;;;;;;;;;;;8262:53;8325:12;8340:5;8325:20;;8356:14;8381:78;8396:1;8388:4;:9;8381:78;;8414:8;;;;;:::i;:::-;;;;8445:2;8437:10;;;;;:::i;:::-;;;8381:78;;;8469:19;8501:6;8491:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8469:39;;8519:154;8535:1;8526:5;:10;8519:154;;8563:1;8553:11;;;;;:::i;:::-;;;8630:2;8622:5;:10;;;;:::i;:::-;8609:2;:24;;;;:::i;:::-;8596:39;;8579:6;8586;8579:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8659:2;8650:11;;;;;:::i;:::-;;;8519:154;;;8697:6;8683:21;;;;;7989:723;;;;:::o;7514:157::-;7599:4;7638:25;7623:40;;;:11;:40;;;;7616:47;;7514:157;;;:::o;36412:589::-;36556:45;36583:4;36589:2;36593:7;36556:26;:45::i;:::-;36634:1;36618:18;;:4;:18;;;36614:187;;;36653:40;36685:7;36653:31;:40::i;:::-;36614:187;;;36723:2;36715:10;;:4;:10;;;36711:90;;36742:47;36775:4;36781:7;36742:32;:47::i;:::-;36711:90;36614:187;36829:1;36815:16;;:2;:16;;;36811:183;;;36848:45;36885:7;36848:36;:45::i;:::-;36811:183;;;36921:4;36915:10;;:2;:10;;;36911:83;;36942:40;36970:2;36974:7;36942:27;:40::i;:::-;36911:83;36811:183;36412:589;;;:::o;28902:321::-;29032:18;29038:2;29042:7;29032:5;:18::i;:::-;29083:54;29114:1;29118:2;29122:7;29131:5;29083:22;:54::i;:::-;29061:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28902:321;;;:::o;32302:799::-;32457:4;32478:15;:2;:13;;;:15::i;:::-;32474:620;;;32530:2;32514:36;;;32551:12;:10;:12::i;:::-;32565:4;32571:7;32580:5;32514:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32510:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32773:1;32756:6;:13;:18;32752:272;;;32799:60;;;;;;;;;;:::i;:::-;;;;;;;;32752:272;32974:6;32968:13;32959:6;32955:2;32951:15;32944:38;32510:529;32647:41;;;32637:51;;;:6;:51;;;;32630:58;;;;;32474:620;33078:4;33071:11;;32302:799;;;;;;;:::o;33673:126::-;;;;:::o;37724:164::-;37828:10;:17;;;;37801:15;:24;37817:7;37801:24;;;;;;;;;;;:44;;;;37856:10;37872:7;37856:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37724:164;:::o;38515:988::-;38781:22;38831:1;38806:22;38823:4;38806:16;:22::i;:::-;:26;;;;:::i;:::-;38781:51;;38843:18;38864:17;:26;38882:7;38864:26;;;;;;;;;;;;38843:47;;39011:14;38997:10;:28;38993:328;;39042:19;39064:12;:18;39077:4;39064:18;;;;;;;;;;;;;;;:34;39083:14;39064:34;;;;;;;;;;;;39042:56;;39148:11;39115:12;:18;39128:4;39115:18;;;;;;;;;;;;;;;:30;39134:10;39115:30;;;;;;;;;;;:44;;;;39265:10;39232:17;:30;39250:11;39232:30;;;;;;;;;;;:43;;;;39027:294;38993:328;39417:17;:26;39435:7;39417:26;;;;;;;;;;;39410:33;;;39461:12;:18;39474:4;39461:18;;;;;;;;;;;;;;;:34;39480:14;39461:34;;;;;;;;;;;39454:41;;;38596:907;;38515:988;;:::o;39798:1079::-;40051:22;40096:1;40076:10;:17;;;;:21;;;;:::i;:::-;40051:46;;40108:18;40129:15;:24;40145:7;40129:24;;;;;;;;;;;;40108:45;;40480:19;40502:10;40513:14;40502:26;;;;;;;;:::i;:::-;;;;;;;;;;40480:48;;40566:11;40541:10;40552;40541:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40677:10;40646:15;:28;40662:11;40646:28;;;;;;;;;;;:41;;;;40818:15;:24;40834:7;40818:24;;;;;;;;;;;40811:31;;;40853:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39869:1008;;;39798:1079;:::o;37302:221::-;37387:14;37404:20;37421:2;37404:16;:20::i;:::-;37387:37;;37462:7;37435:12;:16;37448:2;37435:16;;;;;;;;;;;;;;;:24;37452:6;37435:24;;;;;;;;;;;:34;;;;37509:6;37480:17;:26;37498:7;37480:26;;;;;;;;;;;:35;;;;37376:147;37302:221;;:::o;29559:382::-;29653:1;29639:16;;:2;:16;;;;29631:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29712:16;29720:7;29712;:16::i;:::-;29711:17;29703:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29774:45;29803:1;29807:2;29811:7;29774:20;:45::i;:::-;29849:1;29832:9;:13;29842:2;29832:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29880:2;29861:7;:16;29869:7;29861:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29925:7;29921:2;29900:33;;29917:1;29900:33;;;;;;;;;;;;29559:382;;:::o;10514:387::-;10574:4;10782:12;10849:7;10837:20;10829:28;;10892:1;10885:4;:8;10878:15;;;10514:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;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;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;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;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;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:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;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;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;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;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::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;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::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;8679:360;;;;:::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;9045:364;;;;:::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;9415:377;;;;:::o;9822:845::-;9925:3;9962:5;9956:12;9991:36;10017:9;9991:36;:::i;:::-;10043:89;10125:6;10120:3;10043:89;:::i;:::-;10036:96;;10163:1;10152:9;10148:17;10179:1;10174:137;;;;10325:1;10320:341;;;;10141:520;;10174:137;10258:4;10254:9;10243;10239:25;10234:3;10227:38;10294:6;10289:3;10285:16;10278:23;;10174:137;;10320:341;10387:38;10419:5;10387:38;:::i;:::-;10447:1;10461:154;10475:6;10472:1;10469:13;10461:154;;;10549:7;10543:14;10539:1;10534:3;10530:11;10523:35;10599:1;10590:7;10586:15;10575:26;;10497:4;10494:1;10490:12;10485:17;;10461:154;;;10644:6;10639:3;10635:16;10628:23;;10327:334;;10141:520;;9929:738;;9822:845;;;;:::o;10673:366::-;10815:3;10836:67;10900:2;10895:3;10836:67;:::i;:::-;10829:74;;10912:93;11001:3;10912:93;:::i;:::-;11030:2;11025:3;11021:12;11014:19;;10673:366;;;:::o;11045:::-;11187:3;11208:67;11272:2;11267:3;11208:67;:::i;:::-;11201:74;;11284:93;11373:3;11284:93;:::i;:::-;11402:2;11397:3;11393:12;11386:19;;11045:366;;;:::o;11417:::-;11559:3;11580:67;11644:2;11639:3;11580:67;:::i;:::-;11573:74;;11656:93;11745:3;11656:93;:::i;:::-;11774:2;11769:3;11765:12;11758:19;;11417:366;;;:::o;11789:::-;11931:3;11952:67;12016:2;12011:3;11952:67;:::i;:::-;11945:74;;12028:93;12117:3;12028:93;:::i;:::-;12146:2;12141:3;12137:12;12130:19;;11789:366;;;:::o;12161:::-;12303:3;12324:67;12388:2;12383:3;12324:67;:::i;:::-;12317:74;;12400:93;12489:3;12400:93;:::i;:::-;12518:2;12513:3;12509:12;12502:19;;12161:366;;;:::o;12533:::-;12675:3;12696:67;12760:2;12755:3;12696:67;:::i;:::-;12689:74;;12772:93;12861:3;12772:93;:::i;:::-;12890:2;12885:3;12881:12;12874:19;;12533:366;;;:::o;12905:::-;13047:3;13068:67;13132:2;13127:3;13068:67;:::i;:::-;13061:74;;13144:93;13233:3;13144:93;:::i;:::-;13262:2;13257:3;13253:12;13246:19;;12905:366;;;:::o;13277:::-;13419:3;13440:67;13504:2;13499:3;13440:67;:::i;:::-;13433:74;;13516:93;13605:3;13516:93;:::i;:::-;13634:2;13629:3;13625:12;13618:19;;13277:366;;;:::o;13649:::-;13791:3;13812:67;13876:2;13871:3;13812:67;:::i;:::-;13805:74;;13888:93;13977:3;13888:93;:::i;:::-;14006:2;14001:3;13997:12;13990:19;;13649:366;;;:::o;14021:::-;14163:3;14184:67;14248:2;14243:3;14184:67;:::i;:::-;14177:74;;14260:93;14349:3;14260:93;:::i;:::-;14378:2;14373:3;14369:12;14362:19;;14021:366;;;:::o;14393:::-;14535:3;14556:67;14620:2;14615:3;14556:67;:::i;:::-;14549:74;;14632:93;14721:3;14632:93;:::i;:::-;14750:2;14745:3;14741:12;14734:19;;14393:366;;;:::o;14765:::-;14907:3;14928:67;14992:2;14987:3;14928:67;:::i;:::-;14921:74;;15004:93;15093:3;15004:93;:::i;:::-;15122:2;15117:3;15113:12;15106:19;;14765:366;;;:::o;15137:::-;15279:3;15300:67;15364:2;15359:3;15300:67;:::i;:::-;15293:74;;15376:93;15465:3;15376:93;:::i;:::-;15494:2;15489:3;15485:12;15478:19;;15137:366;;;:::o;15509:::-;15651:3;15672:67;15736:2;15731:3;15672:67;:::i;:::-;15665:74;;15748:93;15837:3;15748:93;:::i;:::-;15866:2;15861:3;15857:12;15850:19;;15509:366;;;:::o;15881:::-;16023:3;16044:67;16108:2;16103:3;16044:67;:::i;:::-;16037:74;;16120:93;16209:3;16120:93;:::i;:::-;16238:2;16233:3;16229:12;16222:19;;15881:366;;;:::o;16253:::-;16395:3;16416:67;16480:2;16475:3;16416:67;:::i;:::-;16409:74;;16492:93;16581:3;16492:93;:::i;:::-;16610:2;16605:3;16601:12;16594:19;;16253:366;;;:::o;16625:::-;16767:3;16788:67;16852:2;16847:3;16788:67;:::i;:::-;16781:74;;16864:93;16953:3;16864:93;:::i;:::-;16982:2;16977:3;16973:12;16966:19;;16625:366;;;:::o;16997:::-;17139:3;17160:67;17224:2;17219:3;17160:67;:::i;:::-;17153:74;;17236:93;17325:3;17236:93;:::i;:::-;17354:2;17349:3;17345:12;17338:19;;16997:366;;;:::o;17369:::-;17511:3;17532:67;17596:2;17591:3;17532:67;:::i;:::-;17525:74;;17608:93;17697:3;17608:93;:::i;:::-;17726:2;17721:3;17717:12;17710:19;;17369:366;;;:::o;17741:108::-;17818:24;17836:5;17818:24;:::i;:::-;17813:3;17806:37;17741:108;;:::o;17855:118::-;17942:24;17960:5;17942:24;:::i;:::-;17937:3;17930:37;17855:118;;:::o;17979:589::-;18204:3;18226:95;18317:3;18308:6;18226:95;:::i;:::-;18219:102;;18338:95;18429:3;18420:6;18338:95;:::i;:::-;18331:102;;18450:92;18538:3;18529:6;18450:92;:::i;:::-;18443:99;;18559:3;18552:10;;17979:589;;;;;;:::o;18574:222::-;18667:4;18705:2;18694:9;18690:18;18682:26;;18718:71;18786:1;18775:9;18771:17;18762:6;18718:71;:::i;:::-;18574:222;;;;:::o;18802:640::-;18997:4;19035:3;19024:9;19020:19;19012:27;;19049:71;19117:1;19106:9;19102:17;19093:6;19049:71;:::i;:::-;19130:72;19198:2;19187:9;19183:18;19174:6;19130:72;:::i;:::-;19212;19280:2;19269:9;19265:18;19256:6;19212:72;:::i;:::-;19331:9;19325:4;19321:20;19316:2;19305:9;19301:18;19294:48;19359:76;19430:4;19421:6;19359:76;:::i;:::-;19351:84;;18802:640;;;;;;;:::o;19448:373::-;19591:4;19629:2;19618:9;19614:18;19606:26;;19678:9;19672:4;19668:20;19664:1;19653:9;19649:17;19642:47;19706:108;19809:4;19800:6;19706:108;:::i;:::-;19698:116;;19448:373;;;;:::o;19827:210::-;19914:4;19952:2;19941:9;19937:18;19929:26;;19965:65;20027:1;20016:9;20012:17;20003:6;19965:65;:::i;:::-;19827:210;;;;:::o;20043:313::-;20156:4;20194:2;20183:9;20179:18;20171:26;;20243:9;20237:4;20233:20;20229:1;20218:9;20214:17;20207:47;20271:78;20344:4;20335:6;20271:78;:::i;:::-;20263:86;;20043:313;;;;:::o;20362:419::-;20528:4;20566:2;20555:9;20551:18;20543:26;;20615:9;20609:4;20605:20;20601:1;20590:9;20586:17;20579:47;20643:131;20769:4;20643:131;:::i;:::-;20635:139;;20362:419;;;:::o;20787:::-;20953:4;20991:2;20980:9;20976:18;20968:26;;21040:9;21034:4;21030:20;21026:1;21015:9;21011:17;21004:47;21068:131;21194:4;21068:131;:::i;:::-;21060:139;;20787:419;;;:::o;21212:::-;21378:4;21416:2;21405:9;21401:18;21393:26;;21465:9;21459:4;21455:20;21451:1;21440:9;21436:17;21429:47;21493:131;21619:4;21493:131;:::i;:::-;21485:139;;21212:419;;;:::o;21637:::-;21803:4;21841:2;21830:9;21826:18;21818:26;;21890:9;21884:4;21880:20;21876:1;21865:9;21861:17;21854:47;21918:131;22044:4;21918:131;:::i;:::-;21910:139;;21637:419;;;:::o;22062:::-;22228:4;22266:2;22255:9;22251:18;22243:26;;22315:9;22309:4;22305:20;22301:1;22290:9;22286:17;22279:47;22343:131;22469:4;22343:131;:::i;:::-;22335:139;;22062:419;;;:::o;22487:::-;22653:4;22691:2;22680:9;22676:18;22668:26;;22740:9;22734:4;22730:20;22726:1;22715:9;22711:17;22704:47;22768:131;22894:4;22768:131;:::i;:::-;22760:139;;22487:419;;;:::o;22912:::-;23078:4;23116:2;23105:9;23101:18;23093:26;;23165:9;23159:4;23155:20;23151:1;23140:9;23136:17;23129:47;23193:131;23319:4;23193:131;:::i;:::-;23185:139;;22912:419;;;:::o;23337:::-;23503:4;23541:2;23530:9;23526:18;23518:26;;23590:9;23584:4;23580:20;23576:1;23565:9;23561:17;23554:47;23618:131;23744:4;23618:131;:::i;:::-;23610:139;;23337:419;;;:::o;23762:::-;23928:4;23966:2;23955:9;23951:18;23943:26;;24015:9;24009:4;24005:20;24001:1;23990:9;23986:17;23979:47;24043:131;24169:4;24043:131;:::i;:::-;24035:139;;23762:419;;;:::o;24187:::-;24353:4;24391:2;24380:9;24376:18;24368:26;;24440:9;24434:4;24430:20;24426:1;24415:9;24411:17;24404:47;24468:131;24594:4;24468:131;:::i;:::-;24460:139;;24187:419;;;:::o;24612:::-;24778:4;24816:2;24805:9;24801:18;24793:26;;24865:9;24859:4;24855:20;24851:1;24840:9;24836:17;24829:47;24893:131;25019:4;24893:131;:::i;:::-;24885:139;;24612:419;;;:::o;25037:::-;25203:4;25241:2;25230:9;25226:18;25218:26;;25290:9;25284:4;25280:20;25276:1;25265:9;25261:17;25254:47;25318:131;25444:4;25318:131;:::i;:::-;25310:139;;25037:419;;;:::o;25462:::-;25628:4;25666:2;25655:9;25651:18;25643:26;;25715:9;25709:4;25705:20;25701:1;25690:9;25686:17;25679:47;25743:131;25869:4;25743:131;:::i;:::-;25735:139;;25462:419;;;:::o;25887:::-;26053:4;26091:2;26080:9;26076:18;26068:26;;26140:9;26134:4;26130:20;26126:1;26115:9;26111:17;26104:47;26168:131;26294:4;26168:131;:::i;:::-;26160:139;;25887:419;;;:::o;26312:::-;26478:4;26516:2;26505:9;26501:18;26493:26;;26565:9;26559:4;26555:20;26551:1;26540:9;26536:17;26529:47;26593:131;26719:4;26593:131;:::i;:::-;26585:139;;26312:419;;;:::o;26737:::-;26903:4;26941:2;26930:9;26926:18;26918:26;;26990:9;26984:4;26980:20;26976:1;26965:9;26961:17;26954:47;27018:131;27144:4;27018:131;:::i;:::-;27010:139;;26737:419;;;:::o;27162:::-;27328:4;27366:2;27355:9;27351:18;27343:26;;27415:9;27409:4;27405:20;27401:1;27390:9;27386:17;27379:47;27443:131;27569:4;27443:131;:::i;:::-;27435:139;;27162:419;;;:::o;27587:::-;27753:4;27791:2;27780:9;27776:18;27768:26;;27840:9;27834:4;27830:20;27826:1;27815:9;27811:17;27804:47;27868:131;27994:4;27868:131;:::i;:::-;27860:139;;27587:419;;;:::o;28012:::-;28178:4;28216:2;28205:9;28201:18;28193:26;;28265:9;28259:4;28255:20;28251:1;28240:9;28236:17;28229:47;28293:131;28419:4;28293:131;:::i;:::-;28285:139;;28012:419;;;:::o;28437:222::-;28530:4;28568:2;28557:9;28553:18;28545:26;;28581:71;28649:1;28638:9;28634:17;28625:6;28581:71;:::i;:::-;28437:222;;;;:::o;28665:129::-;28699:6;28726:20;;:::i;:::-;28716:30;;28755:33;28783:4;28775:6;28755:33;:::i;:::-;28665:129;;;:::o;28800:75::-;28833:6;28866:2;28860:9;28850:19;;28800:75;:::o;28881:307::-;28942:4;29032:18;29024:6;29021:30;29018:56;;;29054:18;;:::i;:::-;29018:56;29092:29;29114:6;29092:29;:::i;:::-;29084:37;;29176:4;29170;29166:15;29158:23;;28881:307;;;:::o;29194:308::-;29256:4;29346:18;29338:6;29335:30;29332:56;;;29368:18;;:::i;:::-;29332:56;29406:29;29428:6;29406:29;:::i;:::-;29398:37;;29490:4;29484;29480:15;29472:23;;29194:308;;;:::o;29508:132::-;29575:4;29598:3;29590:11;;29628:4;29623:3;29619:14;29611:22;;29508:132;;;:::o;29646:141::-;29695:4;29718:3;29710:11;;29741:3;29738:1;29731:14;29775:4;29772:1;29762:18;29754:26;;29646:141;;;:::o;29793:114::-;29860:6;29894:5;29888:12;29878:22;;29793:114;;;:::o;29913:98::-;29964:6;29998:5;29992:12;29982:22;;29913:98;;;:::o;30017:99::-;30069:6;30103:5;30097:12;30087:22;;30017:99;;;:::o;30122:113::-;30192:4;30224;30219:3;30215:14;30207:22;;30122:113;;;:::o;30241:184::-;30340:11;30374:6;30369:3;30362:19;30414:4;30409:3;30405:14;30390:29;;30241:184;;;;:::o;30431:168::-;30514:11;30548:6;30543:3;30536:19;30588:4;30583:3;30579:14;30564:29;;30431:168;;;;:::o;30605:169::-;30689:11;30723:6;30718:3;30711:19;30763:4;30758:3;30754:14;30739:29;;30605:169;;;;:::o;30780:148::-;30882:11;30919:3;30904:18;;30780:148;;;;:::o;30934:305::-;30974:3;30993:20;31011:1;30993:20;:::i;:::-;30988:25;;31027:20;31045:1;31027:20;:::i;:::-;31022:25;;31181:1;31113:66;31109:74;31106:1;31103:81;31100:107;;;31187:18;;:::i;:::-;31100:107;31231:1;31228;31224:9;31217:16;;30934:305;;;;:::o;31245:185::-;31285:1;31302:20;31320:1;31302:20;:::i;:::-;31297:25;;31336:20;31354:1;31336:20;:::i;:::-;31331:25;;31375:1;31365:35;;31380:18;;:::i;:::-;31365:35;31422:1;31419;31415:9;31410:14;;31245:185;;;;:::o;31436:348::-;31476:7;31499:20;31517:1;31499:20;:::i;:::-;31494:25;;31533:20;31551:1;31533:20;:::i;:::-;31528:25;;31721:1;31653:66;31649:74;31646:1;31643:81;31638:1;31631:9;31624:17;31620:105;31617:131;;;31728:18;;:::i;:::-;31617:131;31776:1;31773;31769:9;31758:20;;31436:348;;;;:::o;31790:191::-;31830:4;31850:20;31868:1;31850:20;:::i;:::-;31845:25;;31884:20;31902:1;31884:20;:::i;:::-;31879:25;;31923:1;31920;31917:8;31914:34;;;31928:18;;:::i;:::-;31914:34;31973:1;31970;31966:9;31958:17;;31790:191;;;;:::o;31987:96::-;32024:7;32053:24;32071:5;32053:24;:::i;:::-;32042:35;;31987:96;;;:::o;32089:90::-;32123:7;32166:5;32159:13;32152:21;32141:32;;32089:90;;;:::o;32185:149::-;32221:7;32261:66;32254:5;32250:78;32239:89;;32185:149;;;:::o;32340:126::-;32377:7;32417:42;32410:5;32406:54;32395:65;;32340:126;;;:::o;32472:77::-;32509:7;32538:5;32527:16;;32472:77;;;:::o;32555:154::-;32639:6;32634:3;32629;32616:30;32701:1;32692:6;32687:3;32683:16;32676:27;32555:154;;;:::o;32715:307::-;32783:1;32793:113;32807:6;32804:1;32801:13;32793:113;;;32892:1;32887:3;32883:11;32877:18;32873:1;32868:3;32864:11;32857:39;32829:2;32826:1;32822:10;32817:15;;32793:113;;;32924:6;32921:1;32918:13;32915:101;;;33004:1;32995:6;32990:3;32986:16;32979:27;32915:101;32764:258;32715:307;;;:::o;33028:320::-;33072:6;33109:1;33103:4;33099:12;33089:22;;33156:1;33150:4;33146:12;33177:18;33167:81;;33233:4;33225:6;33221:17;33211:27;;33167:81;33295:2;33287:6;33284:14;33264:18;33261:38;33258:84;;;33314:18;;:::i;:::-;33258:84;33079:269;33028:320;;;:::o;33354:281::-;33437:27;33459:4;33437:27;:::i;:::-;33429:6;33425:40;33567:6;33555:10;33552:22;33531:18;33519:10;33516:34;33513:62;33510:88;;;33578:18;;:::i;:::-;33510:88;33618:10;33614:2;33607:22;33397:238;33354:281;;:::o;33641:233::-;33680:3;33703:24;33721:5;33703:24;:::i;:::-;33694:33;;33749:66;33742:5;33739:77;33736:103;;;33819:18;;:::i;:::-;33736:103;33866:1;33859:5;33855:13;33848:20;;33641:233;;;:::o;33880:176::-;33912:1;33929:20;33947:1;33929:20;:::i;:::-;33924:25;;33963:20;33981:1;33963:20;:::i;:::-;33958:25;;34002:1;33992:35;;34007:18;;:::i;:::-;33992:35;34048:1;34045;34041:9;34036:14;;33880:176;;;;:::o;34062:180::-;34110:77;34107:1;34100:88;34207:4;34204:1;34197:15;34231:4;34228:1;34221:15;34248:180;34296:77;34293:1;34286:88;34393:4;34390:1;34383:15;34417:4;34414:1;34407:15;34434:180;34482:77;34479:1;34472:88;34579:4;34576:1;34569:15;34603:4;34600:1;34593:15;34620:180;34668:77;34665:1;34658:88;34765:4;34762:1;34755:15;34789:4;34786:1;34779:15;34806:180;34854:77;34851:1;34844:88;34951:4;34948:1;34941:15;34975:4;34972:1;34965:15;34992:180;35040:77;35037:1;35030:88;35137:4;35134:1;35127:15;35161:4;35158:1;35151:15;35178:117;35287:1;35284;35277:12;35301:117;35410:1;35407;35400:12;35424:117;35533:1;35530;35523:12;35547:117;35656:1;35653;35646:12;35670:102;35711:6;35762:2;35758:7;35753:2;35746:5;35742:14;35738:28;35728:38;;35670:102;;;:::o;35778:230::-;35918:34;35914:1;35906:6;35902:14;35895:58;35987:13;35982:2;35974:6;35970:15;35963:38;35778:230;:::o;36014:237::-;36154:34;36150:1;36142:6;36138:14;36131:58;36223:20;36218:2;36210:6;36206:15;36199:45;36014:237;:::o;36257:225::-;36397:34;36393:1;36385:6;36381:14;36374:58;36466:8;36461:2;36453:6;36449:15;36442:33;36257:225;:::o;36488:178::-;36628:30;36624:1;36616:6;36612:14;36605:54;36488:178;:::o;36672:223::-;36812:34;36808:1;36800:6;36796:14;36789:58;36881:6;36876:2;36868:6;36864:15;36857:31;36672:223;:::o;36901:175::-;37041:27;37037:1;37029:6;37025:14;37018:51;36901:175;:::o;37082:231::-;37222:34;37218:1;37210:6;37206:14;37199:58;37291:14;37286:2;37278:6;37274:15;37267:39;37082:231;:::o;37319:243::-;37459:34;37455:1;37447:6;37443:14;37436:58;37528:26;37523:2;37515:6;37511:15;37504:51;37319:243;:::o;37568:229::-;37708:34;37704:1;37696:6;37692:14;37685:58;37777:12;37772:2;37764:6;37760:15;37753:37;37568:229;:::o;37803:228::-;37943:34;37939:1;37931:6;37927:14;37920:58;38012:11;38007:2;37999:6;37995:15;37988:36;37803:228;:::o;38037:182::-;38177:34;38173:1;38165:6;38161:14;38154:58;38037:182;:::o;38225:231::-;38365:34;38361:1;38353:6;38349:14;38342:58;38434:14;38429:2;38421:6;38417:15;38410:39;38225:231;:::o;38462:182::-;38602:34;38598:1;38590:6;38586:14;38579:58;38462:182;:::o;38650:228::-;38790:34;38786:1;38778:6;38774:14;38767:58;38859:11;38854:2;38846:6;38842:15;38835:36;38650:228;:::o;38884:234::-;39024:34;39020:1;39012:6;39008:14;39001:58;39093:17;39088:2;39080:6;39076:15;39069:42;38884:234;:::o;39124:169::-;39264:21;39260:1;39252:6;39248:14;39241:45;39124:169;:::o;39299:220::-;39439:34;39435:1;39427:6;39423:14;39416:58;39508:3;39503:2;39495:6;39491:15;39484:28;39299:220;:::o;39525:236::-;39665:34;39661:1;39653:6;39649:14;39642:58;39734:19;39729:2;39721:6;39717:15;39710:44;39525:236;:::o;39767:231::-;39907:34;39903:1;39895:6;39891:14;39884:58;39976:14;39971:2;39963:6;39959:15;39952:39;39767:231;:::o;40004:122::-;40077:24;40095:5;40077:24;:::i;:::-;40070:5;40067:35;40057:63;;40116:1;40113;40106:12;40057:63;40004:122;:::o;40132:116::-;40202:21;40217:5;40202:21;:::i;:::-;40195:5;40192:32;40182:60;;40238:1;40235;40228:12;40182:60;40132:116;:::o;40254:120::-;40326:23;40343:5;40326:23;:::i;:::-;40319:5;40316:34;40306:62;;40364:1;40361;40354:12;40306:62;40254:120;:::o;40380:122::-;40453:24;40471:5;40453:24;:::i;:::-;40446:5;40443:35;40433:63;;40492:1;40489;40482:12;40433:63;40380:122;:::o
Swarm Source
ipfs://53f9986a4a46fbc4c3717c48dc2c4a04cde73799cd2b31a8e65484cf4ea3ff47
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.