Overview
TokenID
884
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
MarvionVhNFTToken
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-07-13 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // contracts/MarvionVhNFTToken.sol pragma solidity ^0.8.7; contract MarvionVhNFTToken is ERC721, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIds; constructor (string memory name, string memory symbol) ERC721("Marvion VhNFTs v1", "VhNFTs1"){} struct Item { uint256 id; address owner; string uri; } mapping (uint256 => Item) public Items; event createItemsEvent(uint256 nftId, string uri, uint256 itemId , address owner); function createItems(uint256[] memory nftId, string[] memory uris , address owner) public onlyOwner returns (uint[] memory){ require(uris.length > 0, 'The uris is not valid'); uint256[] memory newItems = new uint[](uris.length); for(uint256 i = 0; i < uris.length; i++){ _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _safeMint(owner, newItemId); Items[newItemId] = Item(newItemId, owner, uris[i]); newItems[i] = newItemId; emit createItemsEvent(nftId[i], uris[i], newItemId, owner); } return newItems; } function setApprovalForItems(address to, uint256[] memory tokenIds) public{ require(tokenIds.length > 0, "The input data is incorrect"); for(uint256 i = 0; i < tokenIds.length; i++){ require(_isApprovedOrOwner(msg.sender, tokenIds[i]), "You are not owner of item"); _approve(to, tokenIds[i]); } } function transfers(address[] memory froms, address[] memory tos, uint256[] memory tokenIds) public{ require(froms.length == tos.length, "The input data is incorrect"); require(tokenIds.length == tos.length, "The input data is incorrect"); for(uint256 i = 0; i < froms.length; i++){ require(_isApprovedOrOwner(msg.sender, tokenIds[i]), "You are not owner of item"); _transfer(froms[i], tos[i], tokenIds[i]); } } function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return Items[tokenId].uri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"},{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"createItemsEvent","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Items","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nftId","type":"uint256[]"},{"internalType":"string[]","name":"uris","type":"string[]"},{"internalType":"address","name":"owner","type":"address"}],"name":"createItems","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"setApprovalForItems","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"froms","type":"address[]"},{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"transfers","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003a5e38038062003a5e8339818101604052810190620000379190620002fb565b6040518060400160405280601181526020017f4d617276696f6e2056684e4654732076310000000000000000000000000000008152506040518060400160405280600781526020017f56684e46547331000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb929190620001cd565b508060019080519060200190620000d4929190620001cd565b505050620000f7620000eb620000ff60201b60201c565b6200010760201b60201c565b505062000504565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001db9062000415565b90600052602060002090601f016020900481019282620001ff57600085556200024b565b82601f106200021a57805160ff19168380011785556200024b565b828001600101855582156200024b579182015b828111156200024a5782518255916020019190600101906200022d565b5b5090506200025a91906200025e565b5090565b5b80821115620002795760008160009055506001016200025f565b5090565b6000620002946200028e84620003a9565b62000380565b905082815260208101848484011115620002b357620002b2620004e4565b5b620002c0848285620003df565b509392505050565b600082601f830112620002e057620002df620004df565b5b8151620002f28482602086016200027d565b91505092915050565b60008060408385031215620003155762000314620004ee565b5b600083015167ffffffffffffffff811115620003365762000335620004e9565b5b6200034485828601620002c8565b925050602083015167ffffffffffffffff811115620003685762000367620004e9565b5b6200037685828601620002c8565b9150509250929050565b60006200038c6200039f565b90506200039a82826200044b565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c757620003c6620004b0565b5b620003d282620004f3565b9050602081019050919050565b60005b83811015620003ff578082015181840152602081019050620003e2565b838111156200040f576000848401525b50505050565b600060028204905060018216806200042e57607f821691505b6020821081141562000445576200044462000481565b5b50919050565b6200045682620004f3565b810181811067ffffffffffffffff82111715620004785762000477620004b0565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61354a80620005146000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063c87b56dd11610071578063c87b56dd1461032f578063dd3484451461035f578063e985e9c51461037b578063f2fde38b146103ab578063fd465134146103c75761012c565b8063715018a6146102b15780638da5cb5b146102bb57806395d89b41146102d9578063a22cb465146102f7578063b88d4fde146103135761012c565b8063217ab9d2116100f4578063217ab9d2146101fd57806323b872dd1461021957806342842e0e146102355780636352211e1461025157806370a08231146102815761012c565b806301ffc9a71461013157806306fdde0314610161578063081812fc1461017f578063095ea7b3146101af57806317b47cc4146101cb575b600080fd5b61014b600480360381019061014691906124d2565b6103f7565b6040516101589190612959565b60405180910390f35b6101696104d9565b6040516101769190612974565b60405180910390f35b6101996004803603810190610194919061252c565b61056b565b6040516101a691906128d0565b60405180910390f35b6101c960048036038101906101c49190612360565b6105b1565b005b6101e560048036038101906101e0919061252c565b6106c9565b6040516101f493929190612bd1565b60405180910390f35b610217600480360381019061021291906123a0565b61079b565b005b610233600480360381019061022e91906121ee565b610904565b005b61024f600480360381019061024a91906121ee565b610964565b005b61026b6004803603810190610266919061252c565b610984565b60405161027891906128d0565b60405180910390f35b61029b60048036038101906102969190612181565b610a36565b6040516102a89190612bb6565b60405180910390f35b6102b9610aee565b005b6102c3610b02565b6040516102d091906128d0565b60405180910390f35b6102e1610b2c565b6040516102ee9190612974565b60405180910390f35b610311600480360381019061030c9190612320565b610bbe565b005b61032d60048036038101906103289190612241565b610bd4565b005b6103496004803603810190610344919061252c565b610c36565b6040516103569190612974565b60405180910390f35b610379600480360381019061037491906122c4565b610d26565b005b610395600480360381019061039091906121ae565b610e15565b6040516103a29190612959565b60405180910390f35b6103c560048036038101906103c09190612181565b610ea9565b005b6103e160048036038101906103dc9190612447565b610f2d565b6040516103ee9190612937565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104c257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104d257506104d182611177565b5b9050919050565b6060600080546104e890612f17565b80601f016020809104026020016040519081016040528092919081815260200182805461051490612f17565b80156105615780601f1061053657610100808354040283529160200191610561565b820191906000526020600020905b81548152906001019060200180831161054457829003601f168201915b5050505050905090565b6000610576826111e1565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105bc82610984565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490612b56565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661064c61122c565b73ffffffffffffffffffffffffffffffffffffffff16148061067b575061067a8161067561122c565b610e15565b5b6106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190612ab6565b60405180910390fd5b6106c48383611234565b505050565b60086020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201805461071890612f17565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612f17565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b5050505050905083565b81518351146107df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d690612a16565b60405180910390fd5b8151815114610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081a90612a16565b60405180910390fd5b60005b83518110156108fe576108533383838151811061084657610845613021565b5b60200260200101516112ed565b610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990612a36565b60405180910390fd5b6108eb8482815181106108a8576108a7613021565b5b60200260200101518483815181106108c3576108c2613021565b5b60200260200101518484815181106108de576108dd613021565b5b6020026020010151611382565b80806108f690612f7a565b915050610826565b50505050565b61091561090f61122c565b826112ed565b610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b90612b96565b60405180910390fd5b61095f838383611382565b505050565b61097f83838360405180602001604052806000815250610bd4565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490612b36565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90612a96565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610af66115e9565b610b006000611667565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b3b90612f17565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6790612f17565b8015610bb45780601f10610b8957610100808354040283529160200191610bb4565b820191906000526020600020905b815481529060010190602001808311610b9757829003601f168201915b5050505050905090565b610bd0610bc961122c565b838361172d565b5050565b610be5610bdf61122c565b836112ed565b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90612b96565b60405180910390fd5b610c308484848461189a565b50505050565b6060610c41826118f6565b610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7790612b16565b60405180910390fd5b600860008381526020019081526020016000206002018054610ca190612f17565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd90612f17565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b50505050509050919050565b6000815111610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190612a16565b60405180910390fd5b60005b8151811015610e1057610d9a33838381518110610d8d57610d8c613021565b5b60200260200101516112ed565b610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd090612a36565b60405180910390fd5b610dfd83838381518110610df057610def613021565b5b6020026020010151611234565b8080610e0890612f7a565b915050610d6d565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610eb16115e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f18906129b6565b60405180910390fd5b610f2a81611667565b50565b6060610f376115e9565b6000835111610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290612b76565b60405180910390fd5b6000835167ffffffffffffffff811115610f9857610f97613050565b5b604051908082528060200260200182016040528015610fc65781602001602082028036833780820191505090505b50905060005b845181101561116b57610fdf6007611962565b6000610feb6007611978565b9050610ff78582611986565b60405180606001604052808281526020018673ffffffffffffffffffffffffffffffffffffffff16815260200187848151811061103757611036613021565b5b6020026020010151815250600860008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020190805190602001906110c2929190611d9d565b50905050808383815181106110da576110d9613021565b5b6020026020010181815250507f76bbebf8598c30d588fa6268dab08cd52e8a4b43b553c7843bdda7b53b47f67987838151811061111a57611119613021565b5b602002602001015187848151811061113557611134613021565b5b6020026020010151838860405161114f9493929190612c0f565b60405180910390a150808061116390612f7a565b915050610fcc565b50809150509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111ea816118f6565b611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090612b36565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112a783610984565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112f983610984565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061133b575061133a8185610e15565b5b8061137957508373ffffffffffffffffffffffffffffffffffffffff166113618461056b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166113a282610984565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef906129d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90612a56565b60405180910390fd5b6114738383836119a4565b61147e600082611234565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114ce9190612e2d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115259190612dd7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115e48383836119a9565b505050565b6115f161122c565b73ffffffffffffffffffffffffffffffffffffffff1661160f610b02565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90612af6565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390612a76565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161188d9190612959565b60405180910390a3505050565b6118a5848484611382565b6118b1848484846119ae565b6118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790612996565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6119a0828260405180602001604052806000815250611b45565b5050565b505050565b505050565b60006119cf8473ffffffffffffffffffffffffffffffffffffffff16611ba0565b15611b38578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119f861122c565b8786866040518563ffffffff1660e01b8152600401611a1a94939291906128eb565b602060405180830381600087803b158015611a3457600080fd5b505af1925050508015611a6557506040513d601f19601f82011682018060405250810190611a6291906124ff565b60015b611ae8573d8060008114611a95576040519150601f19603f3d011682016040523d82523d6000602084013e611a9a565b606091505b50600081511415611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790612996565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b3d565b600190505b949350505050565b611b4f8383611bc3565b611b5c60008484846119ae565b611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290612996565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90612ad6565b60405180910390fd5b611c3c816118f6565b15611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c73906129f6565b60405180910390fd5b611c88600083836119a4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cd89190612dd7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d99600083836119a9565b5050565b828054611da990612f17565b90600052602060002090601f016020900481019282611dcb5760008555611e12565b82601f10611de457805160ff1916838001178555611e12565b82800160010185558215611e12579182015b82811115611e11578251825591602001919060010190611df6565b5b509050611e1f9190611e23565b5090565b5b80821115611e3c576000816000905550600101611e24565b5090565b6000611e53611e4e84612c80565b612c5b565b90508083825260208201905082856020860282011115611e7657611e75613084565b5b60005b85811015611ea65781611e8c8882612032565b845260208401935060208301925050600181019050611e79565b5050509392505050565b6000611ec3611ebe84612cac565b612c5b565b90508083825260208201905082856020860282011115611ee657611ee5613084565b5b60005b85811015611f3457813567ffffffffffffffff811115611f0c57611f0b61307f565b5b808601611f19898261213e565b85526020850194506020840193505050600181019050611ee9565b5050509392505050565b6000611f51611f4c84612cd8565b612c5b565b90508083825260208201905082856020860282011115611f7457611f73613084565b5b60005b85811015611fa45781611f8a888261216c565b845260208401935060208301925050600181019050611f77565b5050509392505050565b6000611fc1611fbc84612d04565b612c5b565b905082815260208101848484011115611fdd57611fdc613089565b5b611fe8848285612ed5565b509392505050565b6000612003611ffe84612d35565b612c5b565b90508281526020810184848401111561201f5761201e613089565b5b61202a848285612ed5565b509392505050565b600081359050612041816134b8565b92915050565b600082601f83011261205c5761205b61307f565b5b813561206c848260208601611e40565b91505092915050565b600082601f83011261208a5761208961307f565b5b813561209a848260208601611eb0565b91505092915050565b600082601f8301126120b8576120b761307f565b5b81356120c8848260208601611f3e565b91505092915050565b6000813590506120e0816134cf565b92915050565b6000813590506120f5816134e6565b92915050565b60008151905061210a816134e6565b92915050565b600082601f8301126121255761212461307f565b5b8135612135848260208601611fae565b91505092915050565b600082601f8301126121535761215261307f565b5b8135612163848260208601611ff0565b91505092915050565b60008135905061217b816134fd565b92915050565b60006020828403121561219757612196613093565b5b60006121a584828501612032565b91505092915050565b600080604083850312156121c5576121c4613093565b5b60006121d385828601612032565b92505060206121e485828601612032565b9150509250929050565b60008060006060848603121561220757612206613093565b5b600061221586828701612032565b935050602061222686828701612032565b92505060406122378682870161216c565b9150509250925092565b6000806000806080858703121561225b5761225a613093565b5b600061226987828801612032565b945050602061227a87828801612032565b935050604061228b8782880161216c565b925050606085013567ffffffffffffffff8111156122ac576122ab61308e565b5b6122b887828801612110565b91505092959194509250565b600080604083850312156122db576122da613093565b5b60006122e985828601612032565b925050602083013567ffffffffffffffff81111561230a5761230961308e565b5b612316858286016120a3565b9150509250929050565b6000806040838503121561233757612336613093565b5b600061234585828601612032565b9250506020612356858286016120d1565b9150509250929050565b6000806040838503121561237757612376613093565b5b600061238585828601612032565b92505060206123968582860161216c565b9150509250929050565b6000806000606084860312156123b9576123b8613093565b5b600084013567ffffffffffffffff8111156123d7576123d661308e565b5b6123e386828701612047565b935050602084013567ffffffffffffffff8111156124045761240361308e565b5b61241086828701612047565b925050604084013567ffffffffffffffff8111156124315761243061308e565b5b61243d868287016120a3565b9150509250925092565b6000806000606084860312156124605761245f613093565b5b600084013567ffffffffffffffff81111561247e5761247d61308e565b5b61248a868287016120a3565b935050602084013567ffffffffffffffff8111156124ab576124aa61308e565b5b6124b786828701612075565b92505060406124c886828701612032565b9150509250925092565b6000602082840312156124e8576124e7613093565b5b60006124f6848285016120e6565b91505092915050565b60006020828403121561251557612514613093565b5b6000612523848285016120fb565b91505092915050565b60006020828403121561254257612541613093565b5b60006125508482850161216c565b91505092915050565b600061256583836128b2565b60208301905092915050565b61257a81612e61565b82525050565b600061258b82612d76565b6125958185612da4565b93506125a083612d66565b8060005b838110156125d15781516125b88882612559565b97506125c383612d97565b9250506001810190506125a4565b5085935050505092915050565b6125e781612e73565b82525050565b60006125f882612d81565b6126028185612db5565b9350612612818560208601612ee4565b61261b81613098565b840191505092915050565b600061263182612d8c565b61263b8185612dc6565b935061264b818560208601612ee4565b61265481613098565b840191505092915050565b600061266c603283612dc6565b9150612677826130a9565b604082019050919050565b600061268f602683612dc6565b915061269a826130f8565b604082019050919050565b60006126b2602583612dc6565b91506126bd82613147565b604082019050919050565b60006126d5601c83612dc6565b91506126e082613196565b602082019050919050565b60006126f8601b83612dc6565b9150612703826131bf565b602082019050919050565b600061271b601983612dc6565b9150612726826131e8565b602082019050919050565b600061273e602483612dc6565b915061274982613211565b604082019050919050565b6000612761601983612dc6565b915061276c82613260565b602082019050919050565b6000612784602983612dc6565b915061278f82613289565b604082019050919050565b60006127a7603e83612dc6565b91506127b2826132d8565b604082019050919050565b60006127ca602083612dc6565b91506127d582613327565b602082019050919050565b60006127ed602083612dc6565b91506127f882613350565b602082019050919050565b6000612810602f83612dc6565b915061281b82613379565b604082019050919050565b6000612833601883612dc6565b915061283e826133c8565b602082019050919050565b6000612856602183612dc6565b9150612861826133f1565b604082019050919050565b6000612879601583612dc6565b915061288482613440565b602082019050919050565b600061289c602e83612dc6565b91506128a782613469565b604082019050919050565b6128bb81612ecb565b82525050565b6128ca81612ecb565b82525050565b60006020820190506128e56000830184612571565b92915050565b60006080820190506129006000830187612571565b61290d6020830186612571565b61291a60408301856128c1565b818103606083015261292c81846125ed565b905095945050505050565b600060208201905081810360008301526129518184612580565b905092915050565b600060208201905061296e60008301846125de565b92915050565b6000602082019050818103600083015261298e8184612626565b905092915050565b600060208201905081810360008301526129af8161265f565b9050919050565b600060208201905081810360008301526129cf81612682565b9050919050565b600060208201905081810360008301526129ef816126a5565b9050919050565b60006020820190508181036000830152612a0f816126c8565b9050919050565b60006020820190508181036000830152612a2f816126eb565b9050919050565b60006020820190508181036000830152612a4f8161270e565b9050919050565b60006020820190508181036000830152612a6f81612731565b9050919050565b60006020820190508181036000830152612a8f81612754565b9050919050565b60006020820190508181036000830152612aaf81612777565b9050919050565b60006020820190508181036000830152612acf8161279a565b9050919050565b60006020820190508181036000830152612aef816127bd565b9050919050565b60006020820190508181036000830152612b0f816127e0565b9050919050565b60006020820190508181036000830152612b2f81612803565b9050919050565b60006020820190508181036000830152612b4f81612826565b9050919050565b60006020820190508181036000830152612b6f81612849565b9050919050565b60006020820190508181036000830152612b8f8161286c565b9050919050565b60006020820190508181036000830152612baf8161288f565b9050919050565b6000602082019050612bcb60008301846128c1565b92915050565b6000606082019050612be660008301866128c1565b612bf36020830185612571565b8181036040830152612c058184612626565b9050949350505050565b6000608082019050612c2460008301876128c1565b8181036020830152612c368186612626565b9050612c4560408301856128c1565b612c526060830184612571565b95945050505050565b6000612c65612c76565b9050612c718282612f49565b919050565b6000604051905090565b600067ffffffffffffffff821115612c9b57612c9a613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612cc757612cc6613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612cf357612cf2613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d1f57612d1e613050565b5b612d2882613098565b9050602081019050919050565b600067ffffffffffffffff821115612d5057612d4f613050565b5b612d5982613098565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612de282612ecb565b9150612ded83612ecb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e2257612e21612fc3565b5b828201905092915050565b6000612e3882612ecb565b9150612e4383612ecb565b925082821015612e5657612e55612fc3565b5b828203905092915050565b6000612e6c82612eab565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612f02578082015181840152602081019050612ee7565b83811115612f11576000848401525b50505050565b60006002820490506001821680612f2f57607f821691505b60208210811415612f4357612f42612ff2565b5b50919050565b612f5282613098565b810181811067ffffffffffffffff82111715612f7157612f70613050565b5b80604052505050565b6000612f8582612ecb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fb857612fb7612fc3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f54686520696e707574206461746120697320696e636f72726563740000000000600082015250565b7f596f7520617265206e6f74206f776e6572206f66206974656d00000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5468652075726973206973206e6f742076616c69640000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6134c181612e61565b81146134cc57600080fd5b50565b6134d881612e73565b81146134e357600080fd5b50565b6134ef81612e7f565b81146134fa57600080fd5b50565b61350681612ecb565b811461351157600080fd5b5056fea264697066735822122025ba6c767b5f389613e16adacb2a29b1e38cb2dcbf0c7d56b09a01d7493f786464736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063c87b56dd11610071578063c87b56dd1461032f578063dd3484451461035f578063e985e9c51461037b578063f2fde38b146103ab578063fd465134146103c75761012c565b8063715018a6146102b15780638da5cb5b146102bb57806395d89b41146102d9578063a22cb465146102f7578063b88d4fde146103135761012c565b8063217ab9d2116100f4578063217ab9d2146101fd57806323b872dd1461021957806342842e0e146102355780636352211e1461025157806370a08231146102815761012c565b806301ffc9a71461013157806306fdde0314610161578063081812fc1461017f578063095ea7b3146101af57806317b47cc4146101cb575b600080fd5b61014b600480360381019061014691906124d2565b6103f7565b6040516101589190612959565b60405180910390f35b6101696104d9565b6040516101769190612974565b60405180910390f35b6101996004803603810190610194919061252c565b61056b565b6040516101a691906128d0565b60405180910390f35b6101c960048036038101906101c49190612360565b6105b1565b005b6101e560048036038101906101e0919061252c565b6106c9565b6040516101f493929190612bd1565b60405180910390f35b610217600480360381019061021291906123a0565b61079b565b005b610233600480360381019061022e91906121ee565b610904565b005b61024f600480360381019061024a91906121ee565b610964565b005b61026b6004803603810190610266919061252c565b610984565b60405161027891906128d0565b60405180910390f35b61029b60048036038101906102969190612181565b610a36565b6040516102a89190612bb6565b60405180910390f35b6102b9610aee565b005b6102c3610b02565b6040516102d091906128d0565b60405180910390f35b6102e1610b2c565b6040516102ee9190612974565b60405180910390f35b610311600480360381019061030c9190612320565b610bbe565b005b61032d60048036038101906103289190612241565b610bd4565b005b6103496004803603810190610344919061252c565b610c36565b6040516103569190612974565b60405180910390f35b610379600480360381019061037491906122c4565b610d26565b005b610395600480360381019061039091906121ae565b610e15565b6040516103a29190612959565b60405180910390f35b6103c560048036038101906103c09190612181565b610ea9565b005b6103e160048036038101906103dc9190612447565b610f2d565b6040516103ee9190612937565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104c257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104d257506104d182611177565b5b9050919050565b6060600080546104e890612f17565b80601f016020809104026020016040519081016040528092919081815260200182805461051490612f17565b80156105615780601f1061053657610100808354040283529160200191610561565b820191906000526020600020905b81548152906001019060200180831161054457829003601f168201915b5050505050905090565b6000610576826111e1565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105bc82610984565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490612b56565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661064c61122c565b73ffffffffffffffffffffffffffffffffffffffff16148061067b575061067a8161067561122c565b610e15565b5b6106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190612ab6565b60405180910390fd5b6106c48383611234565b505050565b60086020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201805461071890612f17565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612f17565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b5050505050905083565b81518351146107df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d690612a16565b60405180910390fd5b8151815114610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081a90612a16565b60405180910390fd5b60005b83518110156108fe576108533383838151811061084657610845613021565b5b60200260200101516112ed565b610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990612a36565b60405180910390fd5b6108eb8482815181106108a8576108a7613021565b5b60200260200101518483815181106108c3576108c2613021565b5b60200260200101518484815181106108de576108dd613021565b5b6020026020010151611382565b80806108f690612f7a565b915050610826565b50505050565b61091561090f61122c565b826112ed565b610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b90612b96565b60405180910390fd5b61095f838383611382565b505050565b61097f83838360405180602001604052806000815250610bd4565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490612b36565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90612a96565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610af66115e9565b610b006000611667565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610b3b90612f17565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6790612f17565b8015610bb45780601f10610b8957610100808354040283529160200191610bb4565b820191906000526020600020905b815481529060010190602001808311610b9757829003601f168201915b5050505050905090565b610bd0610bc961122c565b838361172d565b5050565b610be5610bdf61122c565b836112ed565b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90612b96565b60405180910390fd5b610c308484848461189a565b50505050565b6060610c41826118f6565b610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7790612b16565b60405180910390fd5b600860008381526020019081526020016000206002018054610ca190612f17565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccd90612f17565b8015610d1a5780601f10610cef57610100808354040283529160200191610d1a565b820191906000526020600020905b815481529060010190602001808311610cfd57829003601f168201915b50505050509050919050565b6000815111610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6190612a16565b60405180910390fd5b60005b8151811015610e1057610d9a33838381518110610d8d57610d8c613021565b5b60200260200101516112ed565b610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd090612a36565b60405180910390fd5b610dfd83838381518110610df057610def613021565b5b6020026020010151611234565b8080610e0890612f7a565b915050610d6d565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610eb16115e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f18906129b6565b60405180910390fd5b610f2a81611667565b50565b6060610f376115e9565b6000835111610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290612b76565b60405180910390fd5b6000835167ffffffffffffffff811115610f9857610f97613050565b5b604051908082528060200260200182016040528015610fc65781602001602082028036833780820191505090505b50905060005b845181101561116b57610fdf6007611962565b6000610feb6007611978565b9050610ff78582611986565b60405180606001604052808281526020018673ffffffffffffffffffffffffffffffffffffffff16815260200187848151811061103757611036613021565b5b6020026020010151815250600860008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020190805190602001906110c2929190611d9d565b50905050808383815181106110da576110d9613021565b5b6020026020010181815250507f76bbebf8598c30d588fa6268dab08cd52e8a4b43b553c7843bdda7b53b47f67987838151811061111a57611119613021565b5b602002602001015187848151811061113557611134613021565b5b6020026020010151838860405161114f9493929190612c0f565b60405180910390a150808061116390612f7a565b915050610fcc565b50809150509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6111ea816118f6565b611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090612b36565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112a783610984565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112f983610984565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061133b575061133a8185610e15565b5b8061137957508373ffffffffffffffffffffffffffffffffffffffff166113618461056b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166113a282610984565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef906129d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145f90612a56565b60405180910390fd5b6114738383836119a4565b61147e600082611234565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114ce9190612e2d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115259190612dd7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46115e48383836119a9565b505050565b6115f161122c565b73ffffffffffffffffffffffffffffffffffffffff1661160f610b02565b73ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90612af6565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390612a76565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161188d9190612959565b60405180910390a3505050565b6118a5848484611382565b6118b1848484846119ae565b6118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790612996565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6119a0828260405180602001604052806000815250611b45565b5050565b505050565b505050565b60006119cf8473ffffffffffffffffffffffffffffffffffffffff16611ba0565b15611b38578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119f861122c565b8786866040518563ffffffff1660e01b8152600401611a1a94939291906128eb565b602060405180830381600087803b158015611a3457600080fd5b505af1925050508015611a6557506040513d601f19601f82011682018060405250810190611a6291906124ff565b60015b611ae8573d8060008114611a95576040519150601f19603f3d011682016040523d82523d6000602084013e611a9a565b606091505b50600081511415611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790612996565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b3d565b600190505b949350505050565b611b4f8383611bc3565b611b5c60008484846119ae565b611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290612996565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90612ad6565b60405180910390fd5b611c3c816118f6565b15611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c73906129f6565b60405180910390fd5b611c88600083836119a4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cd89190612dd7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d99600083836119a9565b5050565b828054611da990612f17565b90600052602060002090601f016020900481019282611dcb5760008555611e12565b82601f10611de457805160ff1916838001178555611e12565b82800160010185558215611e12579182015b82811115611e11578251825591602001919060010190611df6565b5b509050611e1f9190611e23565b5090565b5b80821115611e3c576000816000905550600101611e24565b5090565b6000611e53611e4e84612c80565b612c5b565b90508083825260208201905082856020860282011115611e7657611e75613084565b5b60005b85811015611ea65781611e8c8882612032565b845260208401935060208301925050600181019050611e79565b5050509392505050565b6000611ec3611ebe84612cac565b612c5b565b90508083825260208201905082856020860282011115611ee657611ee5613084565b5b60005b85811015611f3457813567ffffffffffffffff811115611f0c57611f0b61307f565b5b808601611f19898261213e565b85526020850194506020840193505050600181019050611ee9565b5050509392505050565b6000611f51611f4c84612cd8565b612c5b565b90508083825260208201905082856020860282011115611f7457611f73613084565b5b60005b85811015611fa45781611f8a888261216c565b845260208401935060208301925050600181019050611f77565b5050509392505050565b6000611fc1611fbc84612d04565b612c5b565b905082815260208101848484011115611fdd57611fdc613089565b5b611fe8848285612ed5565b509392505050565b6000612003611ffe84612d35565b612c5b565b90508281526020810184848401111561201f5761201e613089565b5b61202a848285612ed5565b509392505050565b600081359050612041816134b8565b92915050565b600082601f83011261205c5761205b61307f565b5b813561206c848260208601611e40565b91505092915050565b600082601f83011261208a5761208961307f565b5b813561209a848260208601611eb0565b91505092915050565b600082601f8301126120b8576120b761307f565b5b81356120c8848260208601611f3e565b91505092915050565b6000813590506120e0816134cf565b92915050565b6000813590506120f5816134e6565b92915050565b60008151905061210a816134e6565b92915050565b600082601f8301126121255761212461307f565b5b8135612135848260208601611fae565b91505092915050565b600082601f8301126121535761215261307f565b5b8135612163848260208601611ff0565b91505092915050565b60008135905061217b816134fd565b92915050565b60006020828403121561219757612196613093565b5b60006121a584828501612032565b91505092915050565b600080604083850312156121c5576121c4613093565b5b60006121d385828601612032565b92505060206121e485828601612032565b9150509250929050565b60008060006060848603121561220757612206613093565b5b600061221586828701612032565b935050602061222686828701612032565b92505060406122378682870161216c565b9150509250925092565b6000806000806080858703121561225b5761225a613093565b5b600061226987828801612032565b945050602061227a87828801612032565b935050604061228b8782880161216c565b925050606085013567ffffffffffffffff8111156122ac576122ab61308e565b5b6122b887828801612110565b91505092959194509250565b600080604083850312156122db576122da613093565b5b60006122e985828601612032565b925050602083013567ffffffffffffffff81111561230a5761230961308e565b5b612316858286016120a3565b9150509250929050565b6000806040838503121561233757612336613093565b5b600061234585828601612032565b9250506020612356858286016120d1565b9150509250929050565b6000806040838503121561237757612376613093565b5b600061238585828601612032565b92505060206123968582860161216c565b9150509250929050565b6000806000606084860312156123b9576123b8613093565b5b600084013567ffffffffffffffff8111156123d7576123d661308e565b5b6123e386828701612047565b935050602084013567ffffffffffffffff8111156124045761240361308e565b5b61241086828701612047565b925050604084013567ffffffffffffffff8111156124315761243061308e565b5b61243d868287016120a3565b9150509250925092565b6000806000606084860312156124605761245f613093565b5b600084013567ffffffffffffffff81111561247e5761247d61308e565b5b61248a868287016120a3565b935050602084013567ffffffffffffffff8111156124ab576124aa61308e565b5b6124b786828701612075565b92505060406124c886828701612032565b9150509250925092565b6000602082840312156124e8576124e7613093565b5b60006124f6848285016120e6565b91505092915050565b60006020828403121561251557612514613093565b5b6000612523848285016120fb565b91505092915050565b60006020828403121561254257612541613093565b5b60006125508482850161216c565b91505092915050565b600061256583836128b2565b60208301905092915050565b61257a81612e61565b82525050565b600061258b82612d76565b6125958185612da4565b93506125a083612d66565b8060005b838110156125d15781516125b88882612559565b97506125c383612d97565b9250506001810190506125a4565b5085935050505092915050565b6125e781612e73565b82525050565b60006125f882612d81565b6126028185612db5565b9350612612818560208601612ee4565b61261b81613098565b840191505092915050565b600061263182612d8c565b61263b8185612dc6565b935061264b818560208601612ee4565b61265481613098565b840191505092915050565b600061266c603283612dc6565b9150612677826130a9565b604082019050919050565b600061268f602683612dc6565b915061269a826130f8565b604082019050919050565b60006126b2602583612dc6565b91506126bd82613147565b604082019050919050565b60006126d5601c83612dc6565b91506126e082613196565b602082019050919050565b60006126f8601b83612dc6565b9150612703826131bf565b602082019050919050565b600061271b601983612dc6565b9150612726826131e8565b602082019050919050565b600061273e602483612dc6565b915061274982613211565b604082019050919050565b6000612761601983612dc6565b915061276c82613260565b602082019050919050565b6000612784602983612dc6565b915061278f82613289565b604082019050919050565b60006127a7603e83612dc6565b91506127b2826132d8565b604082019050919050565b60006127ca602083612dc6565b91506127d582613327565b602082019050919050565b60006127ed602083612dc6565b91506127f882613350565b602082019050919050565b6000612810602f83612dc6565b915061281b82613379565b604082019050919050565b6000612833601883612dc6565b915061283e826133c8565b602082019050919050565b6000612856602183612dc6565b9150612861826133f1565b604082019050919050565b6000612879601583612dc6565b915061288482613440565b602082019050919050565b600061289c602e83612dc6565b91506128a782613469565b604082019050919050565b6128bb81612ecb565b82525050565b6128ca81612ecb565b82525050565b60006020820190506128e56000830184612571565b92915050565b60006080820190506129006000830187612571565b61290d6020830186612571565b61291a60408301856128c1565b818103606083015261292c81846125ed565b905095945050505050565b600060208201905081810360008301526129518184612580565b905092915050565b600060208201905061296e60008301846125de565b92915050565b6000602082019050818103600083015261298e8184612626565b905092915050565b600060208201905081810360008301526129af8161265f565b9050919050565b600060208201905081810360008301526129cf81612682565b9050919050565b600060208201905081810360008301526129ef816126a5565b9050919050565b60006020820190508181036000830152612a0f816126c8565b9050919050565b60006020820190508181036000830152612a2f816126eb565b9050919050565b60006020820190508181036000830152612a4f8161270e565b9050919050565b60006020820190508181036000830152612a6f81612731565b9050919050565b60006020820190508181036000830152612a8f81612754565b9050919050565b60006020820190508181036000830152612aaf81612777565b9050919050565b60006020820190508181036000830152612acf8161279a565b9050919050565b60006020820190508181036000830152612aef816127bd565b9050919050565b60006020820190508181036000830152612b0f816127e0565b9050919050565b60006020820190508181036000830152612b2f81612803565b9050919050565b60006020820190508181036000830152612b4f81612826565b9050919050565b60006020820190508181036000830152612b6f81612849565b9050919050565b60006020820190508181036000830152612b8f8161286c565b9050919050565b60006020820190508181036000830152612baf8161288f565b9050919050565b6000602082019050612bcb60008301846128c1565b92915050565b6000606082019050612be660008301866128c1565b612bf36020830185612571565b8181036040830152612c058184612626565b9050949350505050565b6000608082019050612c2460008301876128c1565b8181036020830152612c368186612626565b9050612c4560408301856128c1565b612c526060830184612571565b95945050505050565b6000612c65612c76565b9050612c718282612f49565b919050565b6000604051905090565b600067ffffffffffffffff821115612c9b57612c9a613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612cc757612cc6613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612cf357612cf2613050565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d1f57612d1e613050565b5b612d2882613098565b9050602081019050919050565b600067ffffffffffffffff821115612d5057612d4f613050565b5b612d5982613098565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612de282612ecb565b9150612ded83612ecb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e2257612e21612fc3565b5b828201905092915050565b6000612e3882612ecb565b9150612e4383612ecb565b925082821015612e5657612e55612fc3565b5b828203905092915050565b6000612e6c82612eab565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612f02578082015181840152602081019050612ee7565b83811115612f11576000848401525b50505050565b60006002820490506001821680612f2f57607f821691505b60208210811415612f4357612f42612ff2565b5b50919050565b612f5282613098565b810181811067ffffffffffffffff82111715612f7157612f70613050565b5b80604052505050565b6000612f8582612ecb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fb857612fb7612fc3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f54686520696e707574206461746120697320696e636f72726563740000000000600082015250565b7f596f7520617265206e6f74206f776e6572206f66206974656d00000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5468652075726973206973206e6f742076616c69640000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6134c181612e61565b81146134cc57600080fd5b50565b6134d881612e73565b81146134e357600080fd5b50565b6134ef81612e7f565b81146134fa57600080fd5b50565b61350681612ecb565b811461351157600080fd5b5056fea264697066735822122025ba6c767b5f389613e16adacb2a29b1e38cb2dcbf0c7d56b09a01d7493f786464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string):
Arg [1] : symbol (string):
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
38995:2292:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21699:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22626:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24139:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23656:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39334:38;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;40577:481;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24839:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25246:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22337:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22068:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38115:103;;;:::i;:::-;;37467:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22795:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24382:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25502:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41072:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40203:366;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24608:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38373:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39475:714;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21699:305;21801:4;21853:25;21838:40;;;:11;:40;;;;:105;;;;21910:33;21895:48;;;:11;:48;;;;21838:105;:158;;;;21960:36;21984:11;21960:23;:36::i;:::-;21838:158;21818:178;;21699:305;;;:::o;22626:100::-;22680:13;22713:5;22706:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22626:100;:::o;24139:171::-;24215:7;24235:23;24250:7;24235:14;:23::i;:::-;24278:15;:24;24294:7;24278:24;;;;;;;;;;;;;;;;;;;;;24271:31;;24139:171;;;:::o;23656:417::-;23737:13;23753:23;23768:7;23753:14;:23::i;:::-;23737:39;;23801:5;23795:11;;:2;:11;;;;23787:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23895:5;23879:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23904:37;23921:5;23928:12;:10;:12::i;:::-;23904:16;:37::i;:::-;23879:62;23857:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;24044:21;24053:2;24057:7;24044:8;:21::i;:::-;23726:347;23656:417;;:::o;39334:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40577:481::-;40710:3;:10;40694:5;:12;:26;40686:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40790:3;:10;40771:8;:15;:29;40763:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40849:9;40845:206;40868:5;:12;40864:1;:16;40845:206;;;40909:43;40928:10;40940:8;40949:1;40940:11;;;;;;;;:::i;:::-;;;;;;;;40909:18;:43::i;:::-;40901:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40999:40;41009:5;41015:1;41009:8;;;;;;;;:::i;:::-;;;;;;;;41019:3;41023:1;41019:6;;;;;;;;:::i;:::-;;;;;;;;41027:8;41036:1;41027:11;;;;;;;;:::i;:::-;;;;;;;;40999:9;:40::i;:::-;40882:3;;;;;:::i;:::-;;;;40845:206;;;;40577:481;;;:::o;24839:336::-;25034:41;25053:12;:10;:12::i;:::-;25067:7;25034:18;:41::i;:::-;25026:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25139:28;25149:4;25155:2;25159:7;25139:9;:28::i;:::-;24839:336;;;:::o;25246:185::-;25384:39;25401:4;25407:2;25411:7;25384:39;;;;;;;;;;;;:16;:39::i;:::-;25246:185;;;:::o;22337:222::-;22409:7;22429:13;22445:7;:16;22453:7;22445:16;;;;;;;;;;;;;;;;;;;;;22429:32;;22497:1;22480:19;;:5;:19;;;;22472:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22546:5;22539:12;;;22337:222;;;:::o;22068:207::-;22140:7;22185:1;22168:19;;:5;:19;;;;22160:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22251:9;:16;22261:5;22251:16;;;;;;;;;;;;;;;;22244:23;;22068:207;;;:::o;38115:103::-;37353:13;:11;:13::i;:::-;38180:30:::1;38207:1;38180:18;:30::i;:::-;38115:103::o:0;37467:87::-;37513:7;37540:6;;;;;;;;;;;37533:13;;37467:87;:::o;22795:104::-;22851:13;22884:7;22877:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22795:104;:::o;24382:155::-;24477:52;24496:12;:10;:12::i;:::-;24510:8;24520;24477:18;:52::i;:::-;24382:155;;:::o;25502:323::-;25676:41;25695:12;:10;:12::i;:::-;25709:7;25676:18;:41::i;:::-;25668:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25779:38;25793:4;25799:2;25803:7;25812:4;25779:13;:38::i;:::-;25502:323;;;;:::o;41072:212::-;41137:13;41171:16;41179:7;41171;:16::i;:::-;41163:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41258:5;:14;41264:7;41258:14;;;;;;;;;;;:18;;41251:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41072:212;;;:::o;40203:366::-;40314:1;40296:8;:15;:19;40288:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;40372:9;40368:194;40391:8;:15;40387:1;:19;40368:194;;;40435:43;40454:10;40466:8;40475:1;40466:11;;;;;;;;:::i;:::-;;;;;;;;40435:18;:43::i;:::-;40427:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40525:25;40534:2;40538:8;40547:1;40538:11;;;;;;;;:::i;:::-;;;;;;;;40525:8;:25::i;:::-;40408:3;;;;;:::i;:::-;;;;40368:194;;;;40203:366;;:::o;24608:164::-;24705:4;24729:18;:25;24748:5;24729:25;;;;;;;;;;;;;;;:35;24755:8;24729:35;;;;;;;;;;;;;;;;;;;;;;;;;24722:42;;24608:164;;;;:::o;38373:201::-;37353:13;:11;:13::i;:::-;38482:1:::1;38462:22;;:8;:22;;;;38454:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38538:28;38557:8;38538:18;:28::i;:::-;38373:201:::0;:::o;39475:714::-;39584:13;37353;:11;:13::i;:::-;39631:1:::1;39617:4;:11;:15;39609:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;39679:25;39719:4;:11;39708:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39679:52;;39754:9;39750:395;39773:4;:11;39769:1;:15;39750:395;;;39806:21;:9;:19;:21::i;:::-;39842:17;39862:19;:9;:17;:19::i;:::-;39842:39;;39896:27;39906:5;39913:9;39896;:27::i;:::-;39963:31;;;;;;;;39968:9;39963:31;;;;39979:5;39963:31;;;;;;39986:4;39991:1;39986:7;;;;;;;;:::i;:::-;;;;;;;;39963:31;;::::0;39944:5:::1;:16;39950:9;39944:16;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;40037:9;40023:8;40032:1;40023:11;;;;;;;;:::i;:::-;;;;;;;:23;;;::::0;::::1;40080:53;40097:5;40103:1;40097:8;;;;;;;;:::i;:::-;;;;;;;;40107:4;40112:1;40107:7;;;;;;;;:::i;:::-;;;;;;;;40116:9;40127:5;40080:53;;;;;;;;;:::i;:::-;;;;;;;;39790:355;39786:3;;;;;:::i;:::-;;;;39750:395;;;;40173:8;40166:15;;;39475:714:::0;;;;;:::o;20204:157::-;20289:4;20328:25;20313:40;;;:11;:40;;;;20306:47;;20204:157;;;:::o;32114:135::-;32196:16;32204:7;32196;:16::i;:::-;32188:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32114:135;:::o;656:98::-;709:7;736:10;729:17;;656:98;:::o;31393:174::-;31495:2;31468:15;:24;31484:7;31468:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31551:7;31547:2;31513:46;;31522:23;31537:7;31522:14;:23::i;:::-;31513:46;;;;;;;;;;;;31393:174;;:::o;27626:264::-;27719:4;27736:13;27752:23;27767:7;27752:14;:23::i;:::-;27736:39;;27805:5;27794:16;;:7;:16;;;:52;;;;27814:32;27831:5;27838:7;27814:16;:32::i;:::-;27794:52;:87;;;;27874:7;27850:31;;:20;27862:7;27850:11;:20::i;:::-;:31;;;27794:87;27786:96;;;27626:264;;;;:::o;30649:625::-;30808:4;30781:31;;:23;30796:7;30781:14;:23::i;:::-;:31;;;30773:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30887:1;30873:16;;:2;:16;;;;30865:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30943:39;30964:4;30970:2;30974:7;30943:20;:39::i;:::-;31047:29;31064:1;31068:7;31047:8;:29::i;:::-;31108:1;31089:9;:15;31099:4;31089:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31137:1;31120:9;:13;31130:2;31120:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31168:2;31149:7;:16;31157:7;31149:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31207:7;31203:2;31188:27;;31197:4;31188:27;;;;;;;;;;;;31228:38;31248:4;31254:2;31258:7;31228:19;:38::i;:::-;30649:625;;;:::o;37632:132::-;37707:12;:10;:12::i;:::-;37696:23;;:7;:5;:7::i;:::-;:23;;;37688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37632:132::o;38734:191::-;38808:16;38827:6;;;;;;;;;;;38808:25;;38853:8;38844:6;;:17;;;;;;;;;;;;;;;;;;38908:8;38877:40;;38898:8;38877:40;;;;;;;;;;;;38797:128;38734:191;:::o;31710:315::-;31865:8;31856:17;;:5;:17;;;;31848:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31952:8;31914:18;:25;31933:5;31914:25;;;;;;;;;;;;;;;:35;31940:8;31914:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31998:8;31976:41;;31991:5;31976:41;;;32008:8;31976:41;;;;;;:::i;:::-;;;;;;;;31710:315;;;:::o;26706:313::-;26862:28;26872:4;26878:2;26882:7;26862:9;:28::i;:::-;26909:47;26932:4;26938:2;26942:7;26951:4;26909:22;:47::i;:::-;26901:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26706:313;;;;:::o;27332:127::-;27397:4;27449:1;27421:30;;:7;:16;27429:7;27421:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27414:37;;27332:127;;;:::o;35818:::-;35925:1;35907:7;:14;;;:19;;;;;;;;;;;35818:127;:::o;35696:114::-;35761:7;35788;:14;;;35781:21;;35696:114;;;:::o;28232:110::-;28308:26;28318:2;28322:7;28308:26;;;;;;;;;;;;:9;:26::i;:::-;28232:110;;:::o;34238:126::-;;;;:::o;34749:125::-;;;;:::o;32813:853::-;32967:4;32988:15;:2;:13;;;:15::i;:::-;32984:675;;;33040:2;33024:36;;;33061:12;:10;:12::i;:::-;33075:4;33081:7;33090:4;33024:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33020:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33282:1;33265:6;:13;:18;33261:328;;;33308:60;;;;;;;;;;:::i;:::-;;;;;;;;33261:328;33539:6;33533:13;33524:6;33520:2;33516:15;33509:38;33020:584;33156:41;;;33146:51;;;:6;:51;;;;33139:58;;;;;32984:675;33643:4;33636:11;;32813:853;;;;;;;:::o;28569:319::-;28698:18;28704:2;28708:7;28698:5;:18::i;:::-;28749:53;28780:1;28784:2;28788:7;28797:4;28749:22;:53::i;:::-;28727:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;28569:319;;;:::o;11361:326::-;11421:4;11678:1;11656:7;:19;;;:23;11649:30;;11361:326;;;:::o;29224:439::-;29318:1;29304:16;;:2;:16;;;;29296:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29377:16;29385:7;29377;:16::i;:::-;29376:17;29368:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29439:45;29468:1;29472:2;29476:7;29439:20;:45::i;:::-;29514:1;29497:9;:13;29507:2;29497:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29545:2;29526:7;:16;29534:7;29526:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29590:7;29586:2;29565:33;;29582:1;29565:33;;;;;;;;;;;;29611:44;29639:1;29643:2;29647:7;29611:19;:44::i;:::-;29224:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;768:957::-;874:5;899:91;915:74;982:6;915:74;:::i;:::-;899:91;:::i;:::-;890:100;;1010:5;1039:6;1032:5;1025:21;1073:4;1066:5;1062:16;1055:23;;1099:6;1149:3;1141:4;1133:6;1129:17;1124:3;1120:27;1117:36;1114:143;;;1168:79;;:::i;:::-;1114:143;1281:1;1266:453;1291:6;1288:1;1285:13;1266:453;;;1373:3;1360:17;1409:18;1396:11;1393:35;1390:122;;;1431:79;;:::i;:::-;1390:122;1555:11;1547:6;1543:24;1593:47;1636:3;1624:10;1593:47;:::i;:::-;1588:3;1581:60;1670:4;1665:3;1661:14;1654:21;;1704:4;1699:3;1695:14;1688:21;;1326:393;;1313:1;1310;1306:9;1301:14;;1266:453;;;1270:14;880:845;;768:957;;;;;:::o;1748:722::-;1844:5;1869:81;1885:64;1942:6;1885:64;:::i;:::-;1869:81;:::i;:::-;1860:90;;1970:5;1999:6;1992:5;1985:21;2033:4;2026:5;2022:16;2015:23;;2059:6;2109:3;2101:4;2093:6;2089:17;2084:3;2080:27;2077:36;2074:143;;;2128:79;;:::i;:::-;2074:143;2241:1;2226:238;2251:6;2248:1;2245:13;2226:238;;;2319:3;2348:37;2381:3;2369:10;2348:37;:::i;:::-;2343:3;2336:50;2415:4;2410:3;2406:14;2399:21;;2449:4;2444:3;2440:14;2433:21;;2286:178;2273:1;2270;2266:9;2261:14;;2226:238;;;2230:14;1850:620;;1748:722;;;;;:::o;2476:410::-;2553:5;2578:65;2594:48;2635:6;2594:48;:::i;:::-;2578:65;:::i;:::-;2569:74;;2666:6;2659:5;2652:21;2704:4;2697:5;2693:16;2742:3;2733:6;2728:3;2724:16;2721:25;2718:112;;;2749:79;;:::i;:::-;2718:112;2839:41;2873:6;2868:3;2863;2839:41;:::i;:::-;2559:327;2476:410;;;;;:::o;2892:412::-;2970:5;2995:66;3011:49;3053:6;3011:49;:::i;:::-;2995:66;:::i;:::-;2986:75;;3084:6;3077:5;3070:21;3122:4;3115:5;3111:16;3160:3;3151:6;3146:3;3142:16;3139:25;3136:112;;;3167:79;;:::i;:::-;3136:112;3257:41;3291:6;3286:3;3281;3257:41;:::i;:::-;2976:328;2892:412;;;;;:::o;3310:139::-;3356:5;3394:6;3381:20;3372:29;;3410:33;3437:5;3410:33;:::i;:::-;3310:139;;;;:::o;3472:370::-;3543:5;3592:3;3585:4;3577:6;3573:17;3569:27;3559:122;;3600:79;;:::i;:::-;3559:122;3717:6;3704:20;3742:94;3832:3;3824:6;3817:4;3809:6;3805:17;3742:94;:::i;:::-;3733:103;;3549:293;3472:370;;;;:::o;3864:390::-;3945:5;3994:3;3987:4;3979:6;3975:17;3971:27;3961:122;;4002:79;;:::i;:::-;3961:122;4119:6;4106:20;4144:104;4244:3;4236:6;4229:4;4221:6;4217:17;4144:104;:::i;:::-;4135:113;;3951:303;3864:390;;;;:::o;4277:370::-;4348:5;4397:3;4390:4;4382:6;4378:17;4374:27;4364:122;;4405:79;;:::i;:::-;4364:122;4522:6;4509:20;4547:94;4637:3;4629:6;4622:4;4614:6;4610:17;4547:94;:::i;:::-;4538:103;;4354:293;4277:370;;;;:::o;4653:133::-;4696:5;4734:6;4721:20;4712:29;;4750:30;4774:5;4750:30;:::i;:::-;4653:133;;;;:::o;4792:137::-;4837:5;4875:6;4862:20;4853:29;;4891:32;4917:5;4891:32;:::i;:::-;4792:137;;;;:::o;4935:141::-;4991:5;5022:6;5016:13;5007:22;;5038:32;5064:5;5038:32;:::i;:::-;4935:141;;;;:::o;5095:338::-;5150:5;5199:3;5192:4;5184:6;5180:17;5176:27;5166:122;;5207:79;;:::i;:::-;5166:122;5324:6;5311:20;5349:78;5423:3;5415:6;5408:4;5400:6;5396:17;5349:78;:::i;:::-;5340:87;;5156:277;5095:338;;;;:::o;5453:340::-;5509:5;5558:3;5551:4;5543:6;5539:17;5535:27;5525:122;;5566:79;;:::i;:::-;5525:122;5683:6;5670:20;5708:79;5783:3;5775:6;5768:4;5760:6;5756:17;5708:79;:::i;:::-;5699:88;;5515:278;5453:340;;;;:::o;5799:139::-;5845:5;5883:6;5870:20;5861:29;;5899:33;5926:5;5899:33;:::i;:::-;5799:139;;;;:::o;5944:329::-;6003:6;6052:2;6040:9;6031:7;6027:23;6023:32;6020:119;;;6058:79;;:::i;:::-;6020:119;6178:1;6203:53;6248:7;6239:6;6228:9;6224:22;6203:53;:::i;:::-;6193:63;;6149:117;5944:329;;;;:::o;6279:474::-;6347:6;6355;6404:2;6392:9;6383:7;6379:23;6375:32;6372:119;;;6410:79;;:::i;:::-;6372:119;6530:1;6555:53;6600:7;6591:6;6580:9;6576:22;6555:53;:::i;:::-;6545:63;;6501:117;6657:2;6683:53;6728:7;6719:6;6708:9;6704:22;6683:53;:::i;:::-;6673:63;;6628:118;6279:474;;;;;:::o;6759:619::-;6836:6;6844;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:53;7225:7;7216:6;7205:9;7201:22;7180:53;:::i;:::-;7170:63;;7125:118;7282:2;7308:53;7353:7;7344:6;7333:9;7329:22;7308:53;:::i;:::-;7298:63;;7253:118;6759:619;;;;;:::o;7384:943::-;7479:6;7487;7495;7503;7552:3;7540:9;7531:7;7527:23;7523:33;7520:120;;;7559:79;;:::i;:::-;7520:120;7679:1;7704:53;7749:7;7740:6;7729:9;7725:22;7704:53;:::i;:::-;7694:63;;7650:117;7806:2;7832:53;7877:7;7868:6;7857:9;7853:22;7832:53;:::i;:::-;7822:63;;7777:118;7934:2;7960:53;8005:7;7996:6;7985:9;7981:22;7960:53;:::i;:::-;7950:63;;7905:118;8090:2;8079:9;8075:18;8062:32;8121:18;8113:6;8110:30;8107:117;;;8143:79;;:::i;:::-;8107:117;8248:62;8302:7;8293:6;8282:9;8278:22;8248:62;:::i;:::-;8238:72;;8033:287;7384:943;;;;;;;:::o;8333:684::-;8426:6;8434;8483:2;8471:9;8462:7;8458:23;8454:32;8451:119;;;8489:79;;:::i;:::-;8451:119;8609:1;8634:53;8679:7;8670:6;8659:9;8655:22;8634:53;:::i;:::-;8624:63;;8580:117;8764:2;8753:9;8749:18;8736:32;8795:18;8787:6;8784:30;8781:117;;;8817:79;;:::i;:::-;8781:117;8922:78;8992:7;8983:6;8972:9;8968:22;8922:78;:::i;:::-;8912:88;;8707:303;8333:684;;;;;:::o;9023:468::-;9088:6;9096;9145:2;9133:9;9124:7;9120:23;9116:32;9113:119;;;9151:79;;:::i;:::-;9113:119;9271:1;9296:53;9341:7;9332:6;9321:9;9317:22;9296:53;:::i;:::-;9286:63;;9242:117;9398:2;9424:50;9466:7;9457:6;9446:9;9442:22;9424:50;:::i;:::-;9414:60;;9369:115;9023:468;;;;;:::o;9497:474::-;9565:6;9573;9622:2;9610:9;9601:7;9597:23;9593:32;9590:119;;;9628:79;;:::i;:::-;9590:119;9748:1;9773:53;9818:7;9809:6;9798:9;9794:22;9773:53;:::i;:::-;9763:63;;9719:117;9875:2;9901:53;9946:7;9937:6;9926:9;9922:22;9901:53;:::i;:::-;9891:63;;9846:118;9497:474;;;;;:::o;9977:1249::-;10129:6;10137;10145;10194:2;10182:9;10173:7;10169:23;10165:32;10162:119;;;10200:79;;:::i;:::-;10162:119;10348:1;10337:9;10333:17;10320:31;10378:18;10370:6;10367:30;10364:117;;;10400:79;;:::i;:::-;10364:117;10505:78;10575:7;10566:6;10555:9;10551:22;10505:78;:::i;:::-;10495:88;;10291:302;10660:2;10649:9;10645:18;10632:32;10691:18;10683:6;10680:30;10677:117;;;10713:79;;:::i;:::-;10677:117;10818:78;10888:7;10879:6;10868:9;10864:22;10818:78;:::i;:::-;10808:88;;10603:303;10973:2;10962:9;10958:18;10945:32;11004:18;10996:6;10993:30;10990:117;;;11026:79;;:::i;:::-;10990:117;11131:78;11201:7;11192:6;11181:9;11177:22;11131:78;:::i;:::-;11121:88;;10916:303;9977:1249;;;;;:::o;11232:1059::-;11369:6;11377;11385;11434:2;11422:9;11413:7;11409:23;11405:32;11402:119;;;11440:79;;:::i;:::-;11402:119;11588:1;11577:9;11573:17;11560:31;11618:18;11610:6;11607:30;11604:117;;;11640:79;;:::i;:::-;11604:117;11745:78;11815:7;11806:6;11795:9;11791:22;11745:78;:::i;:::-;11735:88;;11531:302;11900:2;11889:9;11885:18;11872:32;11931:18;11923:6;11920:30;11917:117;;;11953:79;;:::i;:::-;11917:117;12058:88;12138:7;12129:6;12118:9;12114:22;12058:88;:::i;:::-;12048:98;;11843:313;12195:2;12221:53;12266:7;12257:6;12246:9;12242:22;12221:53;:::i;:::-;12211:63;;12166:118;11232:1059;;;;;:::o;12297:327::-;12355:6;12404:2;12392:9;12383:7;12379:23;12375:32;12372:119;;;12410:79;;:::i;:::-;12372:119;12530:1;12555:52;12599:7;12590:6;12579:9;12575:22;12555:52;:::i;:::-;12545:62;;12501:116;12297:327;;;;:::o;12630:349::-;12699:6;12748:2;12736:9;12727:7;12723:23;12719:32;12716:119;;;12754:79;;:::i;:::-;12716:119;12874:1;12899:63;12954:7;12945:6;12934:9;12930:22;12899:63;:::i;:::-;12889:73;;12845:127;12630:349;;;;:::o;12985:329::-;13044:6;13093:2;13081:9;13072:7;13068:23;13064:32;13061:119;;;13099:79;;:::i;:::-;13061:119;13219:1;13244:53;13289:7;13280:6;13269:9;13265:22;13244:53;:::i;:::-;13234:63;;13190:117;12985:329;;;;:::o;13320:179::-;13389:10;13410:46;13452:3;13444:6;13410:46;:::i;:::-;13488:4;13483:3;13479:14;13465:28;;13320:179;;;;:::o;13505:118::-;13592:24;13610:5;13592:24;:::i;:::-;13587:3;13580:37;13505:118;;:::o;13659:732::-;13778:3;13807:54;13855:5;13807:54;:::i;:::-;13877:86;13956:6;13951:3;13877:86;:::i;:::-;13870:93;;13987:56;14037:5;13987:56;:::i;:::-;14066:7;14097:1;14082:284;14107:6;14104:1;14101:13;14082:284;;;14183:6;14177:13;14210:63;14269:3;14254:13;14210:63;:::i;:::-;14203:70;;14296:60;14349:6;14296:60;:::i;:::-;14286:70;;14142:224;14129:1;14126;14122:9;14117:14;;14082:284;;;14086:14;14382:3;14375:10;;13783:608;;;13659:732;;;;:::o;14397:109::-;14478:21;14493:5;14478:21;:::i;:::-;14473:3;14466:34;14397:109;;:::o;14512:360::-;14598:3;14626:38;14658:5;14626:38;:::i;:::-;14680:70;14743:6;14738:3;14680:70;:::i;:::-;14673:77;;14759:52;14804:6;14799:3;14792:4;14785:5;14781:16;14759:52;:::i;:::-;14836:29;14858:6;14836:29;:::i;:::-;14831:3;14827:39;14820:46;;14602:270;14512:360;;;;:::o;14878:364::-;14966:3;14994:39;15027:5;14994:39;:::i;:::-;15049:71;15113:6;15108:3;15049:71;:::i;:::-;15042:78;;15129:52;15174:6;15169:3;15162:4;15155:5;15151:16;15129:52;:::i;:::-;15206:29;15228:6;15206:29;:::i;:::-;15201:3;15197:39;15190:46;;14970:272;14878:364;;;;:::o;15248:366::-;15390:3;15411:67;15475:2;15470:3;15411:67;:::i;:::-;15404:74;;15487:93;15576:3;15487:93;:::i;:::-;15605:2;15600:3;15596:12;15589:19;;15248:366;;;:::o;15620:::-;15762:3;15783:67;15847:2;15842:3;15783:67;:::i;:::-;15776:74;;15859:93;15948:3;15859:93;:::i;:::-;15977:2;15972:3;15968:12;15961:19;;15620:366;;;:::o;15992:::-;16134:3;16155:67;16219:2;16214:3;16155:67;:::i;:::-;16148:74;;16231:93;16320:3;16231:93;:::i;:::-;16349:2;16344:3;16340:12;16333:19;;15992:366;;;:::o;16364:::-;16506:3;16527:67;16591:2;16586:3;16527:67;:::i;:::-;16520:74;;16603:93;16692:3;16603:93;:::i;:::-;16721:2;16716:3;16712:12;16705:19;;16364:366;;;:::o;16736:::-;16878:3;16899:67;16963:2;16958:3;16899:67;:::i;:::-;16892:74;;16975:93;17064:3;16975:93;:::i;:::-;17093:2;17088:3;17084:12;17077:19;;16736:366;;;:::o;17108:::-;17250:3;17271:67;17335:2;17330:3;17271:67;:::i;:::-;17264:74;;17347:93;17436:3;17347:93;:::i;:::-;17465:2;17460:3;17456:12;17449:19;;17108:366;;;:::o;17480:::-;17622:3;17643:67;17707:2;17702:3;17643:67;:::i;:::-;17636:74;;17719:93;17808:3;17719:93;:::i;:::-;17837:2;17832:3;17828:12;17821:19;;17480:366;;;:::o;17852:::-;17994:3;18015:67;18079:2;18074:3;18015:67;:::i;:::-;18008:74;;18091:93;18180:3;18091:93;:::i;:::-;18209:2;18204:3;18200:12;18193:19;;17852:366;;;:::o;18224:::-;18366:3;18387:67;18451:2;18446:3;18387:67;:::i;:::-;18380:74;;18463:93;18552:3;18463:93;:::i;:::-;18581:2;18576:3;18572:12;18565:19;;18224:366;;;:::o;18596:::-;18738:3;18759:67;18823:2;18818:3;18759:67;:::i;:::-;18752:74;;18835:93;18924:3;18835:93;:::i;:::-;18953:2;18948:3;18944:12;18937:19;;18596:366;;;:::o;18968:::-;19110:3;19131:67;19195:2;19190:3;19131:67;:::i;:::-;19124:74;;19207:93;19296:3;19207:93;:::i;:::-;19325:2;19320:3;19316:12;19309:19;;18968:366;;;:::o;19340:::-;19482:3;19503:67;19567:2;19562:3;19503:67;:::i;:::-;19496:74;;19579:93;19668:3;19579:93;:::i;:::-;19697:2;19692:3;19688:12;19681:19;;19340:366;;;:::o;19712:::-;19854:3;19875:67;19939:2;19934:3;19875:67;:::i;:::-;19868:74;;19951:93;20040:3;19951:93;:::i;:::-;20069:2;20064:3;20060:12;20053:19;;19712:366;;;:::o;20084:::-;20226:3;20247:67;20311:2;20306:3;20247:67;:::i;:::-;20240:74;;20323:93;20412:3;20323:93;:::i;:::-;20441:2;20436:3;20432:12;20425:19;;20084:366;;;:::o;20456:::-;20598:3;20619:67;20683:2;20678:3;20619:67;:::i;:::-;20612:74;;20695:93;20784:3;20695:93;:::i;:::-;20813:2;20808:3;20804:12;20797:19;;20456:366;;;:::o;20828:::-;20970:3;20991:67;21055:2;21050:3;20991:67;:::i;:::-;20984:74;;21067:93;21156:3;21067:93;:::i;:::-;21185:2;21180:3;21176:12;21169:19;;20828:366;;;:::o;21200:::-;21342:3;21363:67;21427:2;21422:3;21363:67;:::i;:::-;21356:74;;21439:93;21528:3;21439:93;:::i;:::-;21557:2;21552:3;21548:12;21541:19;;21200:366;;;:::o;21572:108::-;21649:24;21667:5;21649:24;:::i;:::-;21644:3;21637:37;21572:108;;:::o;21686:118::-;21773:24;21791:5;21773:24;:::i;:::-;21768:3;21761:37;21686:118;;:::o;21810:222::-;21903:4;21941:2;21930:9;21926:18;21918:26;;21954:71;22022:1;22011:9;22007:17;21998:6;21954:71;:::i;:::-;21810:222;;;;:::o;22038:640::-;22233:4;22271:3;22260:9;22256:19;22248:27;;22285:71;22353:1;22342:9;22338:17;22329:6;22285:71;:::i;:::-;22366:72;22434:2;22423:9;22419:18;22410:6;22366:72;:::i;:::-;22448;22516:2;22505:9;22501:18;22492:6;22448:72;:::i;:::-;22567:9;22561:4;22557:20;22552:2;22541:9;22537:18;22530:48;22595:76;22666:4;22657:6;22595:76;:::i;:::-;22587:84;;22038:640;;;;;;;:::o;22684:373::-;22827:4;22865:2;22854:9;22850:18;22842:26;;22914:9;22908:4;22904:20;22900:1;22889:9;22885:17;22878:47;22942:108;23045:4;23036:6;22942:108;:::i;:::-;22934:116;;22684:373;;;;:::o;23063:210::-;23150:4;23188:2;23177:9;23173:18;23165:26;;23201:65;23263:1;23252:9;23248:17;23239:6;23201:65;:::i;:::-;23063:210;;;;:::o;23279:313::-;23392:4;23430:2;23419:9;23415:18;23407:26;;23479:9;23473:4;23469:20;23465:1;23454:9;23450:17;23443:47;23507:78;23580:4;23571:6;23507:78;:::i;:::-;23499:86;;23279:313;;;;:::o;23598:419::-;23764:4;23802:2;23791:9;23787:18;23779:26;;23851:9;23845:4;23841:20;23837:1;23826:9;23822:17;23815:47;23879:131;24005:4;23879:131;:::i;:::-;23871:139;;23598:419;;;:::o;24023:::-;24189:4;24227:2;24216:9;24212:18;24204:26;;24276:9;24270:4;24266:20;24262:1;24251:9;24247:17;24240:47;24304:131;24430:4;24304:131;:::i;:::-;24296:139;;24023:419;;;:::o;24448:::-;24614:4;24652:2;24641:9;24637:18;24629:26;;24701:9;24695:4;24691:20;24687:1;24676:9;24672:17;24665:47;24729:131;24855:4;24729:131;:::i;:::-;24721:139;;24448:419;;;:::o;24873:::-;25039:4;25077:2;25066:9;25062:18;25054:26;;25126:9;25120:4;25116:20;25112:1;25101:9;25097:17;25090:47;25154:131;25280:4;25154:131;:::i;:::-;25146:139;;24873:419;;;:::o;25298:::-;25464:4;25502:2;25491:9;25487:18;25479:26;;25551:9;25545:4;25541:20;25537:1;25526:9;25522:17;25515:47;25579:131;25705:4;25579:131;:::i;:::-;25571:139;;25298:419;;;:::o;25723:::-;25889:4;25927:2;25916:9;25912:18;25904:26;;25976:9;25970:4;25966:20;25962:1;25951:9;25947:17;25940:47;26004:131;26130:4;26004:131;:::i;:::-;25996:139;;25723:419;;;:::o;26148:::-;26314:4;26352:2;26341:9;26337:18;26329:26;;26401:9;26395:4;26391:20;26387:1;26376:9;26372:17;26365:47;26429:131;26555:4;26429:131;:::i;:::-;26421:139;;26148:419;;;:::o;26573:::-;26739:4;26777:2;26766:9;26762:18;26754:26;;26826:9;26820:4;26816:20;26812:1;26801:9;26797:17;26790:47;26854:131;26980:4;26854:131;:::i;:::-;26846:139;;26573:419;;;:::o;26998:::-;27164:4;27202:2;27191:9;27187:18;27179:26;;27251:9;27245:4;27241:20;27237:1;27226:9;27222:17;27215:47;27279:131;27405:4;27279:131;:::i;:::-;27271:139;;26998:419;;;:::o;27423:::-;27589:4;27627:2;27616:9;27612:18;27604:26;;27676:9;27670:4;27666:20;27662:1;27651:9;27647:17;27640:47;27704:131;27830:4;27704:131;:::i;:::-;27696:139;;27423:419;;;:::o;27848:::-;28014:4;28052:2;28041:9;28037:18;28029:26;;28101:9;28095:4;28091:20;28087:1;28076:9;28072:17;28065:47;28129:131;28255:4;28129:131;:::i;:::-;28121:139;;27848:419;;;:::o;28273:::-;28439:4;28477:2;28466:9;28462:18;28454:26;;28526:9;28520:4;28516:20;28512:1;28501:9;28497:17;28490:47;28554:131;28680:4;28554:131;:::i;:::-;28546:139;;28273:419;;;:::o;28698:::-;28864:4;28902:2;28891:9;28887:18;28879:26;;28951:9;28945:4;28941:20;28937:1;28926:9;28922:17;28915:47;28979:131;29105:4;28979:131;:::i;:::-;28971:139;;28698:419;;;:::o;29123:::-;29289:4;29327:2;29316:9;29312:18;29304:26;;29376:9;29370:4;29366:20;29362:1;29351:9;29347:17;29340:47;29404:131;29530:4;29404:131;:::i;:::-;29396:139;;29123:419;;;:::o;29548:::-;29714:4;29752:2;29741:9;29737:18;29729:26;;29801:9;29795:4;29791:20;29787:1;29776:9;29772:17;29765:47;29829:131;29955:4;29829:131;:::i;:::-;29821:139;;29548:419;;;:::o;29973:::-;30139:4;30177:2;30166:9;30162:18;30154:26;;30226:9;30220:4;30216:20;30212:1;30201:9;30197:17;30190:47;30254:131;30380:4;30254:131;:::i;:::-;30246:139;;29973:419;;;:::o;30398:::-;30564:4;30602:2;30591:9;30587:18;30579:26;;30651:9;30645:4;30641:20;30637:1;30626:9;30622:17;30615:47;30679:131;30805:4;30679:131;:::i;:::-;30671:139;;30398:419;;;:::o;30823:222::-;30916:4;30954:2;30943:9;30939:18;30931:26;;30967:71;31035:1;31024:9;31020:17;31011:6;30967:71;:::i;:::-;30823:222;;;;:::o;31051:533::-;31220:4;31258:2;31247:9;31243:18;31235:26;;31271:71;31339:1;31328:9;31324:17;31315:6;31271:71;:::i;:::-;31352:72;31420:2;31409:9;31405:18;31396:6;31352:72;:::i;:::-;31471:9;31465:4;31461:20;31456:2;31445:9;31441:18;31434:48;31499:78;31572:4;31563:6;31499:78;:::i;:::-;31491:86;;31051:533;;;;;;:::o;31590:644::-;31787:4;31825:3;31814:9;31810:19;31802:27;;31839:71;31907:1;31896:9;31892:17;31883:6;31839:71;:::i;:::-;31957:9;31951:4;31947:20;31942:2;31931:9;31927:18;31920:48;31985:78;32058:4;32049:6;31985:78;:::i;:::-;31977:86;;32073:72;32141:2;32130:9;32126:18;32117:6;32073:72;:::i;:::-;32155;32223:2;32212:9;32208:18;32199:6;32155:72;:::i;:::-;31590:644;;;;;;;:::o;32240:129::-;32274:6;32301:20;;:::i;:::-;32291:30;;32330:33;32358:4;32350:6;32330:33;:::i;:::-;32240:129;;;:::o;32375:75::-;32408:6;32441:2;32435:9;32425:19;;32375:75;:::o;32456:311::-;32533:4;32623:18;32615:6;32612:30;32609:56;;;32645:18;;:::i;:::-;32609:56;32695:4;32687:6;32683:17;32675:25;;32755:4;32749;32745:15;32737:23;;32456:311;;;:::o;32773:321::-;32860:4;32950:18;32942:6;32939:30;32936:56;;;32972:18;;:::i;:::-;32936:56;33022:4;33014:6;33010:17;33002:25;;33082:4;33076;33072:15;33064:23;;32773:321;;;:::o;33100:311::-;33177:4;33267:18;33259:6;33256:30;33253:56;;;33289:18;;:::i;:::-;33253:56;33339:4;33331:6;33327:17;33319:25;;33399:4;33393;33389:15;33381:23;;33100:311;;;:::o;33417:307::-;33478:4;33568:18;33560:6;33557:30;33554:56;;;33590:18;;:::i;:::-;33554:56;33628:29;33650:6;33628:29;:::i;:::-;33620:37;;33712:4;33706;33702:15;33694:23;;33417:307;;;:::o;33730:308::-;33792:4;33882:18;33874:6;33871:30;33868:56;;;33904:18;;:::i;:::-;33868:56;33942:29;33964:6;33942:29;:::i;:::-;33934:37;;34026:4;34020;34016:15;34008:23;;33730:308;;;:::o;34044:132::-;34111:4;34134:3;34126:11;;34164:4;34159:3;34155:14;34147:22;;34044:132;;;:::o;34182:114::-;34249:6;34283:5;34277:12;34267:22;;34182:114;;;:::o;34302:98::-;34353:6;34387:5;34381:12;34371:22;;34302:98;;;:::o;34406:99::-;34458:6;34492:5;34486:12;34476:22;;34406:99;;;:::o;34511:113::-;34581:4;34613;34608:3;34604:14;34596:22;;34511:113;;;:::o;34630:184::-;34729:11;34763:6;34758:3;34751:19;34803:4;34798:3;34794:14;34779:29;;34630:184;;;;:::o;34820:168::-;34903:11;34937:6;34932:3;34925:19;34977:4;34972:3;34968:14;34953:29;;34820:168;;;;:::o;34994:169::-;35078:11;35112:6;35107:3;35100:19;35152:4;35147:3;35143:14;35128:29;;34994:169;;;;:::o;35169:305::-;35209:3;35228:20;35246:1;35228:20;:::i;:::-;35223:25;;35262:20;35280:1;35262:20;:::i;:::-;35257:25;;35416:1;35348:66;35344:74;35341:1;35338:81;35335:107;;;35422:18;;:::i;:::-;35335:107;35466:1;35463;35459:9;35452:16;;35169:305;;;;:::o;35480:191::-;35520:4;35540:20;35558:1;35540:20;:::i;:::-;35535:25;;35574:20;35592:1;35574:20;:::i;:::-;35569:25;;35613:1;35610;35607:8;35604:34;;;35618:18;;:::i;:::-;35604:34;35663:1;35660;35656:9;35648:17;;35480:191;;;;:::o;35677:96::-;35714:7;35743:24;35761:5;35743:24;:::i;:::-;35732:35;;35677:96;;;:::o;35779:90::-;35813:7;35856:5;35849:13;35842:21;35831:32;;35779:90;;;:::o;35875:149::-;35911:7;35951:66;35944:5;35940:78;35929:89;;35875:149;;;:::o;36030:126::-;36067:7;36107:42;36100:5;36096:54;36085:65;;36030:126;;;:::o;36162:77::-;36199:7;36228:5;36217:16;;36162:77;;;:::o;36245:154::-;36329:6;36324:3;36319;36306:30;36391:1;36382:6;36377:3;36373:16;36366:27;36245:154;;;:::o;36405:307::-;36473:1;36483:113;36497:6;36494:1;36491:13;36483:113;;;36582:1;36577:3;36573:11;36567:18;36563:1;36558:3;36554:11;36547:39;36519:2;36516:1;36512:10;36507:15;;36483:113;;;36614:6;36611:1;36608:13;36605:101;;;36694:1;36685:6;36680:3;36676:16;36669:27;36605:101;36454:258;36405:307;;;:::o;36718:320::-;36762:6;36799:1;36793:4;36789:12;36779:22;;36846:1;36840:4;36836:12;36867:18;36857:81;;36923:4;36915:6;36911:17;36901:27;;36857:81;36985:2;36977:6;36974:14;36954:18;36951:38;36948:84;;;37004:18;;:::i;:::-;36948:84;36769:269;36718:320;;;:::o;37044:281::-;37127:27;37149:4;37127:27;:::i;:::-;37119:6;37115:40;37257:6;37245:10;37242:22;37221:18;37209:10;37206:34;37203:62;37200:88;;;37268:18;;:::i;:::-;37200:88;37308:10;37304:2;37297:22;37087:238;37044:281;;:::o;37331:233::-;37370:3;37393:24;37411:5;37393:24;:::i;:::-;37384:33;;37439:66;37432:5;37429:77;37426:103;;;37509:18;;:::i;:::-;37426:103;37556:1;37549:5;37545:13;37538:20;;37331:233;;;:::o;37570:180::-;37618:77;37615:1;37608:88;37715:4;37712:1;37705:15;37739:4;37736:1;37729:15;37756:180;37804:77;37801:1;37794:88;37901:4;37898:1;37891:15;37925:4;37922:1;37915:15;37942:180;37990:77;37987:1;37980:88;38087:4;38084:1;38077:15;38111:4;38108:1;38101:15;38128:180;38176:77;38173:1;38166:88;38273:4;38270:1;38263:15;38297:4;38294:1;38287:15;38314:117;38423:1;38420;38413:12;38437:117;38546:1;38543;38536:12;38560:117;38669:1;38666;38659:12;38683:117;38792:1;38789;38782:12;38806:117;38915:1;38912;38905:12;38929:102;38970:6;39021:2;39017:7;39012:2;39005:5;39001:14;38997:28;38987:38;;38929:102;;;:::o;39037:237::-;39177:34;39173:1;39165:6;39161:14;39154:58;39246:20;39241:2;39233:6;39229:15;39222:45;39037:237;:::o;39280:225::-;39420:34;39416:1;39408:6;39404:14;39397:58;39489:8;39484:2;39476:6;39472:15;39465:33;39280:225;:::o;39511:224::-;39651:34;39647:1;39639:6;39635:14;39628:58;39720:7;39715:2;39707:6;39703:15;39696:32;39511:224;:::o;39741:178::-;39881:30;39877:1;39869:6;39865:14;39858:54;39741:178;:::o;39925:177::-;40065:29;40061:1;40053:6;40049:14;40042:53;39925:177;:::o;40108:175::-;40248:27;40244:1;40236:6;40232:14;40225:51;40108:175;:::o;40289:223::-;40429:34;40425:1;40417:6;40413:14;40406:58;40498:6;40493:2;40485:6;40481:15;40474:31;40289:223;:::o;40518:175::-;40658:27;40654:1;40646:6;40642:14;40635:51;40518:175;:::o;40699:228::-;40839:34;40835:1;40827:6;40823:14;40816:58;40908:11;40903:2;40895:6;40891:15;40884:36;40699:228;:::o;40933:249::-;41073:34;41069:1;41061:6;41057:14;41050:58;41142:32;41137:2;41129:6;41125:15;41118:57;40933:249;:::o;41188:182::-;41328:34;41324:1;41316:6;41312:14;41305:58;41188:182;:::o;41376:::-;41516:34;41512:1;41504:6;41500:14;41493:58;41376:182;:::o;41564:234::-;41704:34;41700:1;41692:6;41688:14;41681:58;41773:17;41768:2;41760:6;41756:15;41749:42;41564:234;:::o;41804:174::-;41944:26;41940:1;41932:6;41928:14;41921:50;41804:174;:::o;41984:220::-;42124:34;42120:1;42112:6;42108:14;42101:58;42193:3;42188:2;42180:6;42176:15;42169:28;41984:220;:::o;42210:171::-;42350:23;42346:1;42338:6;42334:14;42327:47;42210:171;:::o;42387:233::-;42527:34;42523:1;42515:6;42511:14;42504:58;42596:16;42591:2;42583:6;42579:15;42572:41;42387:233;:::o;42626:122::-;42699:24;42717:5;42699:24;:::i;:::-;42692:5;42689:35;42679:63;;42738:1;42735;42728:12;42679:63;42626:122;:::o;42754:116::-;42824:21;42839:5;42824:21;:::i;:::-;42817:5;42814:32;42804:60;;42860:1;42857;42850:12;42804:60;42754:116;:::o;42876:120::-;42948:23;42965:5;42948:23;:::i;:::-;42941:5;42938:34;42928:62;;42986:1;42983;42976:12;42928:62;42876:120;:::o;43002:122::-;43075:24;43093:5;43075:24;:::i;:::-;43068:5;43065:35;43055:63;;43114:1;43111;43104:12;43055:63;43002:122;:::o
Swarm Source
ipfs://25ba6c767b5f389613e16adacb2a29b1e38cb2dcbf0c7d56b09a01d7493f7864
Loading...
Loading
[ 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.