Overview
APE Balance
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
APETEST
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2025-02-01 */ // File: @openzeppelin/[email protected]/interfaces/draft-IERC6093.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } // File: @openzeppelin/[email protected]/utils/math/SignedMath.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.20; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // File: @openzeppelin/[email protected]/utils/math/Math.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol) pragma solidity ^0.8.20; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Muldiv operation overflow. */ error MathOverflowedMulDiv(); enum Rounding { Floor, // Toward negative infinity Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero } /** * @dev Return the log in base 10 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256 of a positive value rounded towards zero. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0); } } /** * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers. */ function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { return uint8(rounding) % 2 == 1; } } // File: @openzeppelin/[email protected]/utils/Strings.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) pragma solidity ^0.8.20; /** * @dev String operations. */ library Strings { bytes16 private constant HEX_DIGITS = "0123456789abcdef"; uint8 private constant ADDRESS_LENGTH = 20; /** * @dev The `value` string doesn't fit in the specified `length`. */ error StringsInsufficientHexLength(uint256 value, uint256 length); /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toStringSigned(int256 value) internal pure returns (string memory) { return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { uint256 localValue = value; 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_DIGITS[localValue & 0xf]; localValue >>= 4; } if (localValue != 0) { revert StringsInsufficientHexLength(value, length); } 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); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); } } // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/[email protected]/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.20; /** * @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); } // File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/[email protected]/interfaces/IERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol) pragma solidity ^0.8.20; // File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; /** * @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); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/[email protected]/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; /** * @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 address zero. * * 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); } // File: @openzeppelin/[email protected]/interfaces/IERC721.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721.sol) pragma solidity ^0.8.20; // File: @openzeppelin/[email protected]/interfaces/IERC4906.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4906.sol) pragma solidity ^0.8.20; /// @title EIP-721 Metadata Update Extension interface IERC4906 is IERC165, IERC721 { /// @dev This event emits when the metadata of a token is changed. /// So that the third-party platforms such as NFT market could /// timely update the images and related attributes of the NFT. event MetadataUpdate(uint256 _tokenId); /// @dev This event emits when the metadata of a range of tokens is changed. /// So that the third-party platforms such as NFT market could /// timely update the images and related attributes of the NFTs. event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId); } // File: @openzeppelin/[email protected]/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.20; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/[email protected]/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.20; /** * @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}. */ abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors { using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; mapping(uint256 tokenId => address) private _owners; mapping(address owner => uint256) private _balances; mapping(uint256 tokenId => address) private _tokenApprovals; mapping(address owner => mapping(address operator => 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 returns (uint256) { if (owner == address(0)) { revert ERC721InvalidOwner(address(0)); } return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual returns (address) { return _requireOwned(tokenId); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual returns (string memory) { _requireOwned(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string.concat(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 { _approve(to, tokenId, _msgSender()); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual returns (address) { _requireOwned(tokenId); return _getApproved(tokenId); } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual { if (to == address(0)) { revert ERC721InvalidReceiver(address(0)); } // Setting an "auth" arguments enables the `_isAuthorized` check which verifies that the token exists // (from != 0). Therefore, it is not needed to verify that the return value is not 0 here. address previousOwner = _update(to, tokenId, _msgSender()); if (previousOwner != from) { revert ERC721IncorrectOwner(from, tokenId, previousOwner); } } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual { transferFrom(from, to, tokenId); _checkOnERC721Received(from, to, tokenId, data); } /** * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist * * IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the * core ERC721 logic MUST be matched with the use of {_increaseBalance} to keep balances * consistent with ownership. The invariant to preserve is that for any address `a` the value returned by * `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`. */ function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _owners[tokenId]; } /** * @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted. */ function _getApproved(uint256 tokenId) internal view virtual returns (address) { return _tokenApprovals[tokenId]; } /** * @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in * particular (ignoring whether it is owned by `owner`). * * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this * assumption. */ function _isAuthorized(address owner, address spender, uint256 tokenId) internal view virtual returns (bool) { return spender != address(0) && (owner == spender || isApprovedForAll(owner, spender) || _getApproved(tokenId) == spender); } /** * @dev Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner. * Reverts if `spender` does not have approval from the provided `owner` for the given token or for all its assets * the `spender` for the specific `tokenId`. * * WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this * assumption. */ function _checkAuthorized(address owner, address spender, uint256 tokenId) internal view virtual { if (!_isAuthorized(owner, spender, tokenId)) { if (owner == address(0)) { revert ERC721NonexistentToken(tokenId); } else { revert ERC721InsufficientApproval(spender, tokenId); } } } /** * @dev Unsafe write access to the balances, used by extensions that "mint" tokens using an {ownerOf} override. * * NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that * a uint256 would ever overflow from increments when these increments are bounded to uint128 values. * * WARNING: Increasing an account's balance using this function tends to be paired with an override of the * {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership * remain consistent with one another. */ function _increaseBalance(address account, uint128 value) internal virtual { unchecked { _balances[account] += value; } } /** * @dev Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner * (or `to`) is the zero address. Returns the owner of the `tokenId` before the update. * * The `auth` argument is optional. If the value passed is non 0, then this function will check that * `auth` is either the owner of the token, or approved to operate on the token (by the owner). * * Emits a {Transfer} event. * * NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}. */ function _update(address to, uint256 tokenId, address auth) internal virtual returns (address) { address from = _ownerOf(tokenId); // Perform (optional) operator check if (auth != address(0)) { _checkAuthorized(from, auth, tokenId); } // Execute the update if (from != address(0)) { // Clear approval. No need to re-authorize or emit the Approval event _approve(address(0), tokenId, address(0), false); unchecked { _balances[from] -= 1; } } if (to != address(0)) { unchecked { _balances[to] += 1; } } _owners[tokenId] = to; emit Transfer(from, to, tokenId); return from; } /** * @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 { if (to == address(0)) { revert ERC721InvalidReceiver(address(0)); } address previousOwner = _update(to, tokenId, address(0)); if (previousOwner != address(0)) { revert ERC721InvalidSender(address(0)); } } /** * @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance. * * 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 { _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); _checkOnERC721Received(address(0), to, tokenId, data); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * This is an internal function that does not check if the sender is authorized to operate on the token. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal { address previousOwner = _update(address(0), tokenId, address(0)); if (previousOwner == address(0)) { revert ERC721NonexistentToken(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 { if (to == address(0)) { revert ERC721InvalidReceiver(address(0)); } address previousOwner = _update(to, tokenId, address(0)); if (previousOwner == address(0)) { revert ERC721NonexistentToken(tokenId); } else if (previousOwner != from) { revert ERC721IncorrectOwner(from, tokenId, previousOwner); } } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients * are aware of the ERC721 standard 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 like {safeTransferFrom} in the sense that it invokes * {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `tokenId` token must exist and be owned by `from`. * - `to` cannot be the zero address. * - `from` cannot be the zero address. * - 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) internal { _safeTransfer(from, to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual { _transfer(from, to, tokenId); _checkOnERC721Received(from, to, tokenId, data); } /** * @dev Approve `to` to operate on `tokenId` * * The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is * either the owner of the token, or approved to operate on all tokens held by this owner. * * Emits an {Approval} event. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address to, uint256 tokenId, address auth) internal virtual { _approve(to, tokenId, auth, true); } /** * @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not * emitted in the context of transfers. */ function _approve(address to, uint256 tokenId, address auth, bool emitEvent) internal virtual { // Avoid reading the owner unless necessary if (emitEvent || auth != address(0)) { address owner = _requireOwned(tokenId); // We do not use _isAuthorized because single-token approvals should not be able to call approve if (auth != address(0) && owner != auth && !isApprovedForAll(owner, auth)) { revert ERC721InvalidApprover(auth); } if (emitEvent) { emit Approval(owner, to, tokenId); } } _tokenApprovals[tokenId] = to; } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Requirements: * - operator can't be the address zero. * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll(address owner, address operator, bool approved) internal virtual { if (operator == address(0)) { revert ERC721InvalidOperator(operator); } _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned). * Returns the owner. * * Overrides to ownership logic should be done to {_ownerOf}. */ function _requireOwned(uint256 tokenId) internal view returns (address) { address owner = _ownerOf(tokenId); if (owner == address(0)) { revert ERC721NonexistentToken(tokenId); } return owner; } /** * @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target address. This will revert if the * recipient doesn't accept the token transfer. 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 */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private { if (to.code.length > 0) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { if (retval != IERC721Receiver.onERC721Received.selector) { revert ERC721InvalidReceiver(to); } } catch (bytes memory reason) { if (reason.length == 0) { revert ERC721InvalidReceiver(to); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } } } // File: @openzeppelin/[email protected]/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.20; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is IERC4906, ERC721 { using Strings for uint256; // Interface ID as defined in ERC-4906. This does not correspond to a traditional interface ID as ERC-4906 only // defines events and does not include any external function. bytes4 private constant ERC4906_INTERFACE_ID = bytes4(0x49064906); // Optional mapping for token URIs mapping(uint256 tokenId => string) private _tokenURIs; /** * @dev See {IERC165-supportsInterface} */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, IERC165) returns (bool) { return interfaceId == ERC4906_INTERFACE_ID || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireOwned(tokenId); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via string.concat). if (bytes(_tokenURI).length > 0) { return string.concat(base, _tokenURI); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Emits {MetadataUpdate}. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { _tokenURIs[tokenId] = _tokenURI; emit MetadataUpdate(tokenId); } } // File: @chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData( uint80 _roundId ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); } // File: @openzeppelin/contracts/interfaces/IERC2981.sol // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.20; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. * * NOTE: ERC-2981 allows setting the royalty to 100% of the price. In that case all the price would be sent to the * royalty receiver and 0 tokens to the seller. Contracts dealing with royalty should consider empty transfers. */ function royaltyInfo( uint256 tokenId, uint256 salePrice ) external view returns (address receiver, uint256 royaltyAmount); } // Compatible with OpenZeppelin Contracts ^5.0.0 pragma solidity ^0.8.20; contract APETEST is ERC721, ERC721URIStorage, Ownable, IERC2981 { uint256 private _nextTokenId; mapping(address=>bool) allowedSaleContract; address private aiowAddress = 0x9aC26D5af386f5950D3D94476aFB4060325c6976; uint256 private _totalSupply = 10; bool public isHidden = true; string public hiddenUri = "https://dpw988cyzvmfj.cloudfront.net/hidden-images/679d0b58e1cb15f1181b9857"; struct RoyaltyInfo { address recipient; uint96 royaltyFraction; // Royalty as a fraction of the sale price (e.g., 500 = 5%) } mapping(uint256 => RoyaltyInfo) private _royalties; uint96 royaltyFraction = 500; uint96 private constant FEE_DENOMINATOR = 10000; // 100% = 10,000 basis points constructor(address initialOwner) ERC721("ApeTest", "Test") Ownable(initialOwner) { allowedSaleContract[0x37a92FC1F0D5bEc690a250c535EDE28eA76179b3] = true; } function safeMint(address to, string memory uri) external onlySaleContract { uint256 tokenId = _nextTokenId++; _safeMint(to, tokenId); _setTokenURI(tokenId, uri); _setRoyalty(tokenId, to, royaltyFraction); } function mint(address to, string memory uri) external onlySaleContract returns (uint256) { require(_totalSupply > _nextTokenId, "All token minted"); uint256 tokenId = _nextTokenId++; _mint(to, tokenId); _setTokenURI(tokenId, uri); _setRoyalty(tokenId, to, royaltyFraction); return tokenId; } modifier onlySaleContract() { require(allowedSaleContract[msg.sender]); _; } modifier onlyAiow() { require(msg.sender == aiowAddress); _; } function addSaleContract(address saleContract, bool approved) public onlyAiow { allowedSaleContract[saleContract]=approved; } function changeAiowAddress(address _aiowAddress) public onlyAiow { aiowAddress = _aiowAddress; } function changeHiddenImage(string memory uri) public onlyOwner { hiddenUri = uri; } function setTokenUrl(uint256 tokenId, string memory uri) public onlyOwner { _setTokenURI(tokenId, uri); } function unHide() public onlyOwner { isHidden = false; } // The following functions are overrides required by Solidity. function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { if (isHidden) { return hiddenUri; } return super.tokenURI(tokenId); } function totalSupply() public view returns (uint256) { return _nextTokenId; } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721URIStorage, IERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } // Set royalty information for a token function _setRoyalty(uint256 tokenId, address recipient, uint96 royaltyPercentage) internal { require(royaltyPercentage <= FEE_DENOMINATOR, "Royalty percentage too high"); _royalties[tokenId] = RoyaltyInfo(recipient, royaltyPercentage); } function setRoyalty(uint256 tokenId, address recipient, uint96 royaltyPercentage) external onlyOwner { require(royaltyPercentage <= FEE_DENOMINATOR, "Royalty percentage too high"); _setRoyalty(tokenId, recipient, royaltyPercentage); } // EIP-2981 royaltyInfo function function royaltyInfo(uint256 tokenId, uint256 salePrice) external view override returns (address, uint256) { RoyaltyInfo memory royalty = _royalties[tokenId]; uint256 royaltyAmount = (salePrice * royalty.royaltyFraction) / FEE_DENOMINATOR; return (royalty.recipient, royaltyAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"saleContract","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"addSaleContract","outputs":[],"stateMutability":"nonpayable","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":"address","name":"_aiowAddress","type":"address"}],"name":"changeAiowAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"changeHiddenImage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"isHidden","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","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":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"name":"safeMint","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":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint96","name":"royaltyPercentage","type":"uint96"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"setTokenUrl","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unHide","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052739ac26d5af386f5950d3d94476afb4060325c6976600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a600b556001600c60006101000a81548160ff0219169083151502179055506040518060800160405280604b815260200162003a6f604b9139600d9081620000a39190620005d7565b506101f4600f60006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550348015620000e457600080fd5b5060405162003aba38038062003aba83398181016040528101906200010a919062000728565b806040518060400160405280600781526020017f41706554657374000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f54657374000000000000000000000000000000000000000000000000000000008152508160009081620001889190620005d7565b5080600190816200019a9190620005d7565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620002125760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200020991906200076b565b60405180910390fd5b62000223816200029760201b60201c565b506001600960007337a92fc1f0d5bec690a250c535ede28ea76179b373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000788565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003df57607f821691505b602082108103620003f557620003f462000397565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200045f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000420565b6200046b868362000420565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004b8620004b2620004ac8462000483565b6200048d565b62000483565b9050919050565b6000819050919050565b620004d48362000497565b620004ec620004e382620004bf565b8484546200042d565b825550505050565b600090565b62000503620004f4565b62000510818484620004c9565b505050565b5b8181101562000538576200052c600082620004f9565b60018101905062000516565b5050565b601f82111562000587576200055181620003fb565b6200055c8462000410565b810160208510156200056c578190505b620005846200057b8562000410565b83018262000515565b50505b505050565b600082821c905092915050565b6000620005ac600019846008026200058c565b1980831691505092915050565b6000620005c7838362000599565b9150826002028217905092915050565b620005e2826200035d565b67ffffffffffffffff811115620005fe57620005fd62000368565b5b6200060a8254620003c6565b620006178282856200053c565b600060209050601f8311600181146200064f57600084156200063a578287015190505b620006468582620005b9565b865550620006b6565b601f1984166200065f86620003fb565b60005b82811015620006895784890151825560018201915060208501945060208101905062000662565b86831015620006a95784890151620006a5601f89168262000599565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006f082620006c3565b9050919050565b6200070281620006e3565b81146200070e57600080fd5b50565b6000815190506200072281620006f7565b92915050565b600060208284031215620007415762000740620006be565b5b6000620007518482850162000711565b91505092915050565b6200076581620006e3565b82525050565b60006020820190506200078260008301846200075a565b92915050565b6132d780620007986000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806380c8d690116100f9578063bd0bc04711610097578063d0def52111610071578063d0def521146104ca578063d204c45e146104fa578063e985e9c514610516578063f2fde38b14610546576101c4565b8063bd0bc04714610460578063c5be87501461047c578063c87b56dd1461049a576101c4565b806395d89b41116100d357806395d89b41146103ec578063a22cb4651461040a578063aeca06ab14610426578063b88d4fde14610444576101c4565b806380c8d690146103965780638da5cb5b146103b25780638e6fcd32146103d0576101c4565b806334d1c641116101665780636352211e116101405780636352211e1461032257806370a0823114610352578063715018a6146103825780637f8b1e0e1461038c576101c4565b806334d1c641146102ce57806342842e0e146102ea578063524cad9814610306576101c4565b8063095ea7b3116101a2578063095ea7b31461024757806318160ddd1461026357806323b872dd146102815780632a55205a1461029d576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217575b600080fd5b6101e360048036038101906101de9190612468565b610562565b6040516101f091906124b0565b60405180910390f35b6102016105dc565b60405161020e919061255b565b60405180910390f35b610231600480360381019061022c91906125b3565b61066e565b60405161023e9190612621565b60405180910390f35b610261600480360381019061025c9190612668565b61068a565b005b61026b6106a0565b60405161027891906126b7565b60405180910390f35b61029b600480360381019061029691906126d2565b6106aa565b005b6102b760048036038101906102b29190612725565b6107ac565b6040516102c5929190612765565b60405180910390f35b6102e860048036038101906102e391906128c3565b6108b5565b005b61030460048036038101906102ff91906126d2565b6108cb565b005b610320600480360381019061031b919061291f565b6108eb565b005b61033c600480360381019061033791906125b3565b610989565b6040516103499190612621565b60405180910390f35b61036c6004803603810190610367919061291f565b61099b565b60405161037991906126b7565b60405180910390f35b61038a610a55565b005b610394610a69565b005b6103b060048036038101906103ab9190612990565b610a8e565b005b6103ba610b07565b6040516103c79190612621565b60405180910390f35b6103ea60048036038101906103e59190612a0f565b610b31565b005b6103f4610be6565b604051610401919061255b565b60405180910390f35b610424600480360381019061041f9190612a0f565b610c78565b005b61042e610c8e565b60405161043b91906124b0565b60405180910390f35b61045e60048036038101906104599190612af0565b610ca1565b005b61047a60048036038101906104759190612b73565b610cbe565b005b610484610cd9565b604051610491919061255b565b60405180910390f35b6104b460048036038101906104af91906125b3565b610d67565b6040516104c1919061255b565b60405180910390f35b6104e460048036038101906104df9190612bbc565b610e21565b6040516104f191906126b7565b60405180910390f35b610514600480360381019061050f9190612bbc565b610f1d565b005b610530600480360381019061052b9190612c18565b610fcc565b60405161053d91906124b0565b60405180910390f35b610560600480360381019061055b919061291f565b611060565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d557506105d4826110e6565b5b9050919050565b6060600080546105eb90612c87565b80601f016020809104026020016040519081016040528092919081815260200182805461061790612c87565b80156106645780601f1061063957610100808354040283529160200191610664565b820191906000526020600020905b81548152906001019060200180831161064757829003601f168201915b5050505050905090565b600061067982611147565b50610683826111cf565b9050919050565b61069c828261069761120c565b611214565b5050565b6000600854905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361071c5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016107139190612621565b60405180910390fd5b6000610730838361072b61120c565b611226565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107a6578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161079d93929190612cb8565b60405180910390fd5b50505050565b6000806000600e60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905060006127106bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866108969190612d1e565b6108a09190612d8f565b90508160000151819350935050509250929050565b6108bd611440565b6108c782826114c7565b5050565b6108e683838360405180602001604052806000815250610ca1565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461094557600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061099482611147565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a0e5760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610a059190612621565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a5d611440565b610a676000611523565b565b610a71611440565b6000600c60006101000a81548160ff021916908315150217905550565b610a96611440565b6127106bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90612e0c565b60405180910390fd5b610b028383836115e9565b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b8b57600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b606060018054610bf590612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2190612c87565b8015610c6e5780601f10610c4357610100808354040283529160200191610c6e565b820191906000526020600020905b815481529060010190602001808311610c5157829003601f168201915b5050505050905090565b610c8a610c8361120c565b838361171c565b5050565b600c60009054906101000a900460ff1681565b610cac8484846106aa565b610cb88484848461188b565b50505050565b610cc6611440565b80600d9081610cd59190612fd8565b5050565b600d8054610ce690612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1290612c87565b8015610d5f5780601f10610d3457610100808354040283529160200191610d5f565b820191906000526020600020905b815481529060010190602001808311610d4257829003601f168201915b505050505081565b6060600c60009054906101000a900460ff1615610e1057600d8054610d8b90612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054610db790612c87565b8015610e045780601f10610dd957610100808354040283529160200191610e04565b820191906000526020600020905b815481529060010190602001808311610de757829003601f168201915b50505050509050610e1c565b610e1982611a42565b90505b919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e7957600080fd5b600854600b5411610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb6906130f6565b60405180910390fd5b600060086000815480929190610ed490613116565b919050559050610ee48482611b55565b610eee81846114c7565b610f138185600f60009054906101000a90046bffffffffffffffffffffffff166115e9565b8091505092915050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f7357600080fd5b600060086000815480929190610f8890613116565b919050559050610f988382611c4e565b610fa281836114c7565b610fc78184600f60009054906101000a90046bffffffffffffffffffffffff166115e9565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611068611440565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110da5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016110d19190612621565b60405180910390fd5b6110e381611523565b50565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611140575061113f82611c6c565b5b9050919050565b60008061115383611d4e565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111c657826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016111bd91906126b7565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6112218383836001611d8b565b505050565b60008061123284611d4e565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461127457611273818486611f50565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611305576112b6600085600080611d8b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611388576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b61144861120c565b73ffffffffffffffffffffffffffffffffffffffff16611466610b07565b73ffffffffffffffffffffffffffffffffffffffff16146114c55761148961120c565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016114bc9190612621565b60405180910390fd5b565b806006600084815260200190815260200160002090816114e79190612fd8565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161151791906126b7565b60405180910390a15050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127106bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111561164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190612e0c565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600e600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361178d57816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016117849190612621565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161187e91906124b0565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611a3c578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026118cf61120c565b8685856040518563ffffffff1660e01b81526004016118f194939291906131b3565b6020604051808303816000875af192505050801561192d57506040513d601f19601f8201168201806040525081019061192a9190613214565b60015b6119b1573d806000811461195d576040519150601f19603f3d011682016040523d82523d6000602084013e611962565b606091505b5060008151036119a957836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016119a09190612621565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a3a57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611a319190612621565b60405180910390fd5b505b50505050565b6060611a4d82611147565b506000600660008481526020019081526020016000208054611a6e90612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9a90612c87565b8015611ae75780601f10611abc57610100808354040283529160200191611ae7565b820191906000526020600020905b815481529060010190602001808311611aca57829003601f168201915b505050505090506000611af8612014565b90506000815103611b0d578192505050611b50565b600082511115611b42578082604051602001611b2a92919061327d565b60405160208183030381529060405292505050611b50565b611b4b8461202b565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bc75760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611bbe9190612621565b60405180910390fd5b6000611bd583836000611226565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c495760006040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401611c409190612621565b60405180910390fd5b505050565b611c68828260405180602001604052806000815250612094565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d3757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d475750611d46826120b0565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611dc45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611ef8576000611dd484611147565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e3f57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611e525750611e508184610fcc565b155b15611e9457826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611e8b9190612621565b60405180910390fd5b8115611ef657838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611f5b83838361211a565b61200f57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fd057806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611fc791906126b7565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401612006929190612765565b60405180910390fd5b505050565b606060405180602001604052806000815250905090565b606061203682611147565b506000612041612014565b90506000815111612061576040518060200160405280600081525061208c565b8061206b846121db565b60405160200161207c92919061327d565b6040516020818303038152906040525b915050919050565b61209e8383611b55565b6120ab600084848461188b565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121d257508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061219357506121928484610fcc565b5b806121d157508273ffffffffffffffffffffffffffffffffffffffff166121b9836111cf565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6060600060016121ea846122a9565b01905060008167ffffffffffffffff81111561220957612208612798565b5b6040519080825280601f01601f19166020018201604052801561223b5781602001600182028036833780820191505090505b509050600082602001820190505b60011561229e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161229257612291612d60565b5b04945060008503612249575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612307577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816122fd576122fc612d60565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612344576d04ee2d6d415b85acef8100000000838161233a57612339612d60565b5b0492506020810190505b662386f26fc10000831061237357662386f26fc10000838161236957612368612d60565b5b0492506010810190505b6305f5e100831061239c576305f5e100838161239257612391612d60565b5b0492506008810190505b61271083106123c15761271083816123b7576123b6612d60565b5b0492506004810190505b606483106123e457606483816123da576123d9612d60565b5b0492506002810190505b600a83106123f3576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61244581612410565b811461245057600080fd5b50565b6000813590506124628161243c565b92915050565b60006020828403121561247e5761247d612406565b5b600061248c84828501612453565b91505092915050565b60008115159050919050565b6124aa81612495565b82525050565b60006020820190506124c560008301846124a1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125055780820151818401526020810190506124ea565b60008484015250505050565b6000601f19601f8301169050919050565b600061252d826124cb565b61253781856124d6565b93506125478185602086016124e7565b61255081612511565b840191505092915050565b600060208201905081810360008301526125758184612522565b905092915050565b6000819050919050565b6125908161257d565b811461259b57600080fd5b50565b6000813590506125ad81612587565b92915050565b6000602082840312156125c9576125c8612406565b5b60006125d78482850161259e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061260b826125e0565b9050919050565b61261b81612600565b82525050565b60006020820190506126366000830184612612565b92915050565b61264581612600565b811461265057600080fd5b50565b6000813590506126628161263c565b92915050565b6000806040838503121561267f5761267e612406565b5b600061268d85828601612653565b925050602061269e8582860161259e565b9150509250929050565b6126b18161257d565b82525050565b60006020820190506126cc60008301846126a8565b92915050565b6000806000606084860312156126eb576126ea612406565b5b60006126f986828701612653565b935050602061270a86828701612653565b925050604061271b8682870161259e565b9150509250925092565b6000806040838503121561273c5761273b612406565b5b600061274a8582860161259e565b925050602061275b8582860161259e565b9150509250929050565b600060408201905061277a6000830185612612565b61278760208301846126a8565b9392505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127d082612511565b810181811067ffffffffffffffff821117156127ef576127ee612798565b5b80604052505050565b60006128026123fc565b905061280e82826127c7565b919050565b600067ffffffffffffffff82111561282e5761282d612798565b5b61283782612511565b9050602081019050919050565b82818337600083830152505050565b600061286661286184612813565b6127f8565b90508281526020810184848401111561288257612881612793565b5b61288d848285612844565b509392505050565b600082601f8301126128aa576128a961278e565b5b81356128ba848260208601612853565b91505092915050565b600080604083850312156128da576128d9612406565b5b60006128e88582860161259e565b925050602083013567ffffffffffffffff8111156129095761290861240b565b5b61291585828601612895565b9150509250929050565b60006020828403121561293557612934612406565b5b600061294384828501612653565b91505092915050565b60006bffffffffffffffffffffffff82169050919050565b61296d8161294c565b811461297857600080fd5b50565b60008135905061298a81612964565b92915050565b6000806000606084860312156129a9576129a8612406565b5b60006129b78682870161259e565b93505060206129c886828701612653565b92505060406129d98682870161297b565b9150509250925092565b6129ec81612495565b81146129f757600080fd5b50565b600081359050612a09816129e3565b92915050565b60008060408385031215612a2657612a25612406565b5b6000612a3485828601612653565b9250506020612a45858286016129fa565b9150509250929050565b600067ffffffffffffffff821115612a6a57612a69612798565b5b612a7382612511565b9050602081019050919050565b6000612a93612a8e84612a4f565b6127f8565b905082815260208101848484011115612aaf57612aae612793565b5b612aba848285612844565b509392505050565b600082601f830112612ad757612ad661278e565b5b8135612ae7848260208601612a80565b91505092915050565b60008060008060808587031215612b0a57612b09612406565b5b6000612b1887828801612653565b9450506020612b2987828801612653565b9350506040612b3a8782880161259e565b925050606085013567ffffffffffffffff811115612b5b57612b5a61240b565b5b612b6787828801612ac2565b91505092959194509250565b600060208284031215612b8957612b88612406565b5b600082013567ffffffffffffffff811115612ba757612ba661240b565b5b612bb384828501612895565b91505092915050565b60008060408385031215612bd357612bd2612406565b5b6000612be185828601612653565b925050602083013567ffffffffffffffff811115612c0257612c0161240b565b5b612c0e85828601612895565b9150509250929050565b60008060408385031215612c2f57612c2e612406565b5b6000612c3d85828601612653565b9250506020612c4e85828601612653565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c9f57607f821691505b602082108103612cb257612cb1612c58565b5b50919050565b6000606082019050612ccd6000830186612612565b612cda60208301856126a8565b612ce76040830184612612565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d298261257d565b9150612d348361257d565b9250828202612d428161257d565b91508282048414831517612d5957612d58612cef565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d9a8261257d565b9150612da58361257d565b925082612db557612db4612d60565b5b828204905092915050565b7f526f79616c74792070657263656e7461676520746f6f20686967680000000000600082015250565b6000612df6601b836124d6565b9150612e0182612dc0565b602082019050919050565b60006020820190508181036000830152612e2581612de9565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612e8e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612e51565b612e988683612e51565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612ed5612ed0612ecb8461257d565b612eb0565b61257d565b9050919050565b6000819050919050565b612eef83612eba565b612f03612efb82612edc565b848454612e5e565b825550505050565b600090565b612f18612f0b565b612f23818484612ee6565b505050565b5b81811015612f4757612f3c600082612f10565b600181019050612f29565b5050565b601f821115612f8c57612f5d81612e2c565b612f6684612e41565b81016020851015612f75578190505b612f89612f8185612e41565b830182612f28565b50505b505050565b600082821c905092915050565b6000612faf60001984600802612f91565b1980831691505092915050565b6000612fc88383612f9e565b9150826002028217905092915050565b612fe1826124cb565b67ffffffffffffffff811115612ffa57612ff9612798565b5b6130048254612c87565b61300f828285612f4b565b600060209050601f8311600181146130425760008415613030578287015190505b61303a8582612fbc565b8655506130a2565b601f19841661305086612e2c565b60005b8281101561307857848901518255600182019150602085019450602081019050613053565b868310156130955784890151613091601f891682612f9e565b8355505b6001600288020188555050505b505050505050565b7f416c6c20746f6b656e206d696e74656400000000000000000000000000000000600082015250565b60006130e06010836124d6565b91506130eb826130aa565b602082019050919050565b6000602082019050818103600083015261310f816130d3565b9050919050565b60006131218261257d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361315357613152612cef565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b60006131858261315e565b61318f8185613169565b935061319f8185602086016124e7565b6131a881612511565b840191505092915050565b60006080820190506131c86000830187612612565b6131d56020830186612612565b6131e260408301856126a8565b81810360608301526131f4818461317a565b905095945050505050565b60008151905061320e8161243c565b92915050565b60006020828403121561322a57613229612406565b5b6000613238848285016131ff565b91505092915050565b600081905092915050565b6000613257826124cb565b6132618185613241565b93506132718185602086016124e7565b80840191505092915050565b6000613289828561324c565b9150613295828461324c565b9150819050939250505056fea2646970667358221220ec9a7bd3929474a34fa445d9022ab485e3b6f97f32d674d2e2783db07cb3672964736f6c6343000818003368747470733a2f2f64707739383863797a766d666a2e636c6f756466726f6e742e6e65742f68696464656e2d696d616765732f363739643062353865316362313566313138316239383537000000000000000000000000ee9dece310dda4dfcbcf0e63e3a19c7df3b99274
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806380c8d690116100f9578063bd0bc04711610097578063d0def52111610071578063d0def521146104ca578063d204c45e146104fa578063e985e9c514610516578063f2fde38b14610546576101c4565b8063bd0bc04714610460578063c5be87501461047c578063c87b56dd1461049a576101c4565b806395d89b41116100d357806395d89b41146103ec578063a22cb4651461040a578063aeca06ab14610426578063b88d4fde14610444576101c4565b806380c8d690146103965780638da5cb5b146103b25780638e6fcd32146103d0576101c4565b806334d1c641116101665780636352211e116101405780636352211e1461032257806370a0823114610352578063715018a6146103825780637f8b1e0e1461038c576101c4565b806334d1c641146102ce57806342842e0e146102ea578063524cad9814610306576101c4565b8063095ea7b3116101a2578063095ea7b31461024757806318160ddd1461026357806323b872dd146102815780632a55205a1461029d576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217575b600080fd5b6101e360048036038101906101de9190612468565b610562565b6040516101f091906124b0565b60405180910390f35b6102016105dc565b60405161020e919061255b565b60405180910390f35b610231600480360381019061022c91906125b3565b61066e565b60405161023e9190612621565b60405180910390f35b610261600480360381019061025c9190612668565b61068a565b005b61026b6106a0565b60405161027891906126b7565b60405180910390f35b61029b600480360381019061029691906126d2565b6106aa565b005b6102b760048036038101906102b29190612725565b6107ac565b6040516102c5929190612765565b60405180910390f35b6102e860048036038101906102e391906128c3565b6108b5565b005b61030460048036038101906102ff91906126d2565b6108cb565b005b610320600480360381019061031b919061291f565b6108eb565b005b61033c600480360381019061033791906125b3565b610989565b6040516103499190612621565b60405180910390f35b61036c6004803603810190610367919061291f565b61099b565b60405161037991906126b7565b60405180910390f35b61038a610a55565b005b610394610a69565b005b6103b060048036038101906103ab9190612990565b610a8e565b005b6103ba610b07565b6040516103c79190612621565b60405180910390f35b6103ea60048036038101906103e59190612a0f565b610b31565b005b6103f4610be6565b604051610401919061255b565b60405180910390f35b610424600480360381019061041f9190612a0f565b610c78565b005b61042e610c8e565b60405161043b91906124b0565b60405180910390f35b61045e60048036038101906104599190612af0565b610ca1565b005b61047a60048036038101906104759190612b73565b610cbe565b005b610484610cd9565b604051610491919061255b565b60405180910390f35b6104b460048036038101906104af91906125b3565b610d67565b6040516104c1919061255b565b60405180910390f35b6104e460048036038101906104df9190612bbc565b610e21565b6040516104f191906126b7565b60405180910390f35b610514600480360381019061050f9190612bbc565b610f1d565b005b610530600480360381019061052b9190612c18565b610fcc565b60405161053d91906124b0565b60405180910390f35b610560600480360381019061055b919061291f565b611060565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d557506105d4826110e6565b5b9050919050565b6060600080546105eb90612c87565b80601f016020809104026020016040519081016040528092919081815260200182805461061790612c87565b80156106645780601f1061063957610100808354040283529160200191610664565b820191906000526020600020905b81548152906001019060200180831161064757829003601f168201915b5050505050905090565b600061067982611147565b50610683826111cf565b9050919050565b61069c828261069761120c565b611214565b5050565b6000600854905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361071c5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016107139190612621565b60405180910390fd5b6000610730838361072b61120c565b611226565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107a6578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161079d93929190612cb8565b60405180910390fd5b50505050565b6000806000600e60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905060006127106bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866108969190612d1e565b6108a09190612d8f565b90508160000151819350935050509250929050565b6108bd611440565b6108c782826114c7565b5050565b6108e683838360405180602001604052806000815250610ca1565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461094557600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061099482611147565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a0e5760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610a059190612621565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a5d611440565b610a676000611523565b565b610a71611440565b6000600c60006101000a81548160ff021916908315150217905550565b610a96611440565b6127106bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90612e0c565b60405180910390fd5b610b028383836115e9565b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b8b57600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b606060018054610bf590612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2190612c87565b8015610c6e5780601f10610c4357610100808354040283529160200191610c6e565b820191906000526020600020905b815481529060010190602001808311610c5157829003601f168201915b5050505050905090565b610c8a610c8361120c565b838361171c565b5050565b600c60009054906101000a900460ff1681565b610cac8484846106aa565b610cb88484848461188b565b50505050565b610cc6611440565b80600d9081610cd59190612fd8565b5050565b600d8054610ce690612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1290612c87565b8015610d5f5780601f10610d3457610100808354040283529160200191610d5f565b820191906000526020600020905b815481529060010190602001808311610d4257829003601f168201915b505050505081565b6060600c60009054906101000a900460ff1615610e1057600d8054610d8b90612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054610db790612c87565b8015610e045780601f10610dd957610100808354040283529160200191610e04565b820191906000526020600020905b815481529060010190602001808311610de757829003601f168201915b50505050509050610e1c565b610e1982611a42565b90505b919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e7957600080fd5b600854600b5411610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb6906130f6565b60405180910390fd5b600060086000815480929190610ed490613116565b919050559050610ee48482611b55565b610eee81846114c7565b610f138185600f60009054906101000a90046bffffffffffffffffffffffff166115e9565b8091505092915050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f7357600080fd5b600060086000815480929190610f8890613116565b919050559050610f988382611c4e565b610fa281836114c7565b610fc78184600f60009054906101000a90046bffffffffffffffffffffffff166115e9565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611068611440565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110da5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016110d19190612621565b60405180910390fd5b6110e381611523565b50565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611140575061113f82611c6c565b5b9050919050565b60008061115383611d4e565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111c657826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016111bd91906126b7565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6112218383836001611d8b565b505050565b60008061123284611d4e565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461127457611273818486611f50565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611305576112b6600085600080611d8b565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611388576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b61144861120c565b73ffffffffffffffffffffffffffffffffffffffff16611466610b07565b73ffffffffffffffffffffffffffffffffffffffff16146114c55761148961120c565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016114bc9190612621565b60405180910390fd5b565b806006600084815260200190815260200160002090816114e79190612fd8565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161151791906126b7565b60405180910390a15050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127106bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111561164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190612e0c565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600e600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361178d57816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016117849190612621565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161187e91906124b0565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611a3c578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026118cf61120c565b8685856040518563ffffffff1660e01b81526004016118f194939291906131b3565b6020604051808303816000875af192505050801561192d57506040513d601f19601f8201168201806040525081019061192a9190613214565b60015b6119b1573d806000811461195d576040519150601f19603f3d011682016040523d82523d6000602084013e611962565b606091505b5060008151036119a957836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016119a09190612621565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a3a57836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611a319190612621565b60405180910390fd5b505b50505050565b6060611a4d82611147565b506000600660008481526020019081526020016000208054611a6e90612c87565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9a90612c87565b8015611ae75780601f10611abc57610100808354040283529160200191611ae7565b820191906000526020600020905b815481529060010190602001808311611aca57829003601f168201915b505050505090506000611af8612014565b90506000815103611b0d578192505050611b50565b600082511115611b42578082604051602001611b2a92919061327d565b60405160208183030381529060405292505050611b50565b611b4b8461202b565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bc75760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611bbe9190612621565b60405180910390fd5b6000611bd583836000611226565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c495760006040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401611c409190612621565b60405180910390fd5b505050565b611c68828260405180602001604052806000815250612094565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d3757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d475750611d46826120b0565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8080611dc45750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611ef8576000611dd484611147565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e3f57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611e525750611e508184610fcc565b155b15611e9457826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611e8b9190612621565b60405180910390fd5b8115611ef657838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611f5b83838361211a565b61200f57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fd057806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611fc791906126b7565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401612006929190612765565b60405180910390fd5b505050565b606060405180602001604052806000815250905090565b606061203682611147565b506000612041612014565b90506000815111612061576040518060200160405280600081525061208c565b8061206b846121db565b60405160200161207c92919061327d565b6040516020818303038152906040525b915050919050565b61209e8383611b55565b6120ab600084848461188b565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121d257508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061219357506121928484610fcc565b5b806121d157508273ffffffffffffffffffffffffffffffffffffffff166121b9836111cf565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6060600060016121ea846122a9565b01905060008167ffffffffffffffff81111561220957612208612798565b5b6040519080825280601f01601f19166020018201604052801561223b5781602001600182028036833780820191505090505b509050600082602001820190505b60011561229e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161229257612291612d60565b5b04945060008503612249575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612307577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816122fd576122fc612d60565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612344576d04ee2d6d415b85acef8100000000838161233a57612339612d60565b5b0492506020810190505b662386f26fc10000831061237357662386f26fc10000838161236957612368612d60565b5b0492506010810190505b6305f5e100831061239c576305f5e100838161239257612391612d60565b5b0492506008810190505b61271083106123c15761271083816123b7576123b6612d60565b5b0492506004810190505b606483106123e457606483816123da576123d9612d60565b5b0492506002810190505b600a83106123f3576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61244581612410565b811461245057600080fd5b50565b6000813590506124628161243c565b92915050565b60006020828403121561247e5761247d612406565b5b600061248c84828501612453565b91505092915050565b60008115159050919050565b6124aa81612495565b82525050565b60006020820190506124c560008301846124a1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125055780820151818401526020810190506124ea565b60008484015250505050565b6000601f19601f8301169050919050565b600061252d826124cb565b61253781856124d6565b93506125478185602086016124e7565b61255081612511565b840191505092915050565b600060208201905081810360008301526125758184612522565b905092915050565b6000819050919050565b6125908161257d565b811461259b57600080fd5b50565b6000813590506125ad81612587565b92915050565b6000602082840312156125c9576125c8612406565b5b60006125d78482850161259e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061260b826125e0565b9050919050565b61261b81612600565b82525050565b60006020820190506126366000830184612612565b92915050565b61264581612600565b811461265057600080fd5b50565b6000813590506126628161263c565b92915050565b6000806040838503121561267f5761267e612406565b5b600061268d85828601612653565b925050602061269e8582860161259e565b9150509250929050565b6126b18161257d565b82525050565b60006020820190506126cc60008301846126a8565b92915050565b6000806000606084860312156126eb576126ea612406565b5b60006126f986828701612653565b935050602061270a86828701612653565b925050604061271b8682870161259e565b9150509250925092565b6000806040838503121561273c5761273b612406565b5b600061274a8582860161259e565b925050602061275b8582860161259e565b9150509250929050565b600060408201905061277a6000830185612612565b61278760208301846126a8565b9392505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127d082612511565b810181811067ffffffffffffffff821117156127ef576127ee612798565b5b80604052505050565b60006128026123fc565b905061280e82826127c7565b919050565b600067ffffffffffffffff82111561282e5761282d612798565b5b61283782612511565b9050602081019050919050565b82818337600083830152505050565b600061286661286184612813565b6127f8565b90508281526020810184848401111561288257612881612793565b5b61288d848285612844565b509392505050565b600082601f8301126128aa576128a961278e565b5b81356128ba848260208601612853565b91505092915050565b600080604083850312156128da576128d9612406565b5b60006128e88582860161259e565b925050602083013567ffffffffffffffff8111156129095761290861240b565b5b61291585828601612895565b9150509250929050565b60006020828403121561293557612934612406565b5b600061294384828501612653565b91505092915050565b60006bffffffffffffffffffffffff82169050919050565b61296d8161294c565b811461297857600080fd5b50565b60008135905061298a81612964565b92915050565b6000806000606084860312156129a9576129a8612406565b5b60006129b78682870161259e565b93505060206129c886828701612653565b92505060406129d98682870161297b565b9150509250925092565b6129ec81612495565b81146129f757600080fd5b50565b600081359050612a09816129e3565b92915050565b60008060408385031215612a2657612a25612406565b5b6000612a3485828601612653565b9250506020612a45858286016129fa565b9150509250929050565b600067ffffffffffffffff821115612a6a57612a69612798565b5b612a7382612511565b9050602081019050919050565b6000612a93612a8e84612a4f565b6127f8565b905082815260208101848484011115612aaf57612aae612793565b5b612aba848285612844565b509392505050565b600082601f830112612ad757612ad661278e565b5b8135612ae7848260208601612a80565b91505092915050565b60008060008060808587031215612b0a57612b09612406565b5b6000612b1887828801612653565b9450506020612b2987828801612653565b9350506040612b3a8782880161259e565b925050606085013567ffffffffffffffff811115612b5b57612b5a61240b565b5b612b6787828801612ac2565b91505092959194509250565b600060208284031215612b8957612b88612406565b5b600082013567ffffffffffffffff811115612ba757612ba661240b565b5b612bb384828501612895565b91505092915050565b60008060408385031215612bd357612bd2612406565b5b6000612be185828601612653565b925050602083013567ffffffffffffffff811115612c0257612c0161240b565b5b612c0e85828601612895565b9150509250929050565b60008060408385031215612c2f57612c2e612406565b5b6000612c3d85828601612653565b9250506020612c4e85828601612653565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c9f57607f821691505b602082108103612cb257612cb1612c58565b5b50919050565b6000606082019050612ccd6000830186612612565b612cda60208301856126a8565b612ce76040830184612612565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d298261257d565b9150612d348361257d565b9250828202612d428161257d565b91508282048414831517612d5957612d58612cef565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d9a8261257d565b9150612da58361257d565b925082612db557612db4612d60565b5b828204905092915050565b7f526f79616c74792070657263656e7461676520746f6f20686967680000000000600082015250565b6000612df6601b836124d6565b9150612e0182612dc0565b602082019050919050565b60006020820190508181036000830152612e2581612de9565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612e8e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612e51565b612e988683612e51565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612ed5612ed0612ecb8461257d565b612eb0565b61257d565b9050919050565b6000819050919050565b612eef83612eba565b612f03612efb82612edc565b848454612e5e565b825550505050565b600090565b612f18612f0b565b612f23818484612ee6565b505050565b5b81811015612f4757612f3c600082612f10565b600181019050612f29565b5050565b601f821115612f8c57612f5d81612e2c565b612f6684612e41565b81016020851015612f75578190505b612f89612f8185612e41565b830182612f28565b50505b505050565b600082821c905092915050565b6000612faf60001984600802612f91565b1980831691505092915050565b6000612fc88383612f9e565b9150826002028217905092915050565b612fe1826124cb565b67ffffffffffffffff811115612ffa57612ff9612798565b5b6130048254612c87565b61300f828285612f4b565b600060209050601f8311600181146130425760008415613030578287015190505b61303a8582612fbc565b8655506130a2565b601f19841661305086612e2c565b60005b8281101561307857848901518255600182019150602085019450602081019050613053565b868310156130955784890151613091601f891682612f9e565b8355505b6001600288020188555050505b505050505050565b7f416c6c20746f6b656e206d696e74656400000000000000000000000000000000600082015250565b60006130e06010836124d6565b91506130eb826130aa565b602082019050919050565b6000602082019050818103600083015261310f816130d3565b9050919050565b60006131218261257d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361315357613152612cef565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b60006131858261315e565b61318f8185613169565b935061319f8185602086016124e7565b6131a881612511565b840191505092915050565b60006080820190506131c86000830187612612565b6131d56020830186612612565b6131e260408301856126a8565b81810360608301526131f4818461317a565b905095945050505050565b60008151905061320e8161243c565b92915050565b60006020828403121561322a57613229612406565b5b6000613238848285016131ff565b91505092915050565b600081905092915050565b6000613257826124cb565b6132618185613241565b93506132718185602086016124e7565b80840191505092915050565b6000613289828561324c565b9150613295828461324c565b9150819050939250505056fea2646970667358221220ec9a7bd3929474a34fa445d9022ab485e3b6f97f32d674d2e2783db07cb3672964736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ee9dece310dda4dfcbcf0e63e3a19c7df3b99274
-----Decoded View---------------
Arg [0] : initialOwner (address): 0xEE9DeCE310ddA4dFcbCF0e63E3a19C7Df3b99274
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ee9dece310dda4dfcbcf0e63e3a19c7df3b99274
Deployed Bytecode Sourcemap
50769:4162:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53700:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31149:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32321:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32140:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53595:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32990:588;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54586:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;53017:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33649:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52774:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30962:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30687:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18258:103;;;:::i;:::-;;53150:70;;;:::i;:::-;;54277:257;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17583:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52627:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31309:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32551:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51051:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33854:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52898:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51085:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53304:283;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52049:370;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51769:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32768:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18516:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53700:250;53832:4;53876:26;53861:41;;;:11;:41;;;;:81;;;;53906:36;53930:11;53906:23;:36::i;:::-;53861:81;53854:88;;53700:250;;;:::o;31149:91::-;31194:13;31227:5;31220:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31149:91;:::o;32321:158::-;32388:7;32408:22;32422:7;32408:13;:22::i;:::-;;32450:21;32463:7;32450:12;:21::i;:::-;32443:28;;32321:158;;;:::o;32140:115::-;32212:35;32221:2;32225:7;32234:12;:10;:12::i;:::-;32212:8;:35::i;:::-;32140:115;;:::o;53595:91::-;53639:7;53666:12;;53659:19;;53595:91;:::o;32990:588::-;33099:1;33085:16;;:2;:16;;;33081:89;;33155:1;33125:33;;;;;;;;;;;:::i;:::-;;;;;;;;33081:89;33391:21;33415:34;33423:2;33427:7;33436:12;:10;:12::i;:::-;33415:7;:34::i;:::-;33391:58;;33481:4;33464:21;;:13;:21;;;33460:111;;33530:4;33536:7;33545:13;33509:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;33460:111;33070:508;32990:588;;;:::o;54586:336::-;54675:7;54684;54714:26;54743:10;:19;54754:7;54743:19;;;;;;;;;;;54714:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54773:21;51507:5;54797:55;;54810:7;:23;;;54798:35;;:9;:35;;;;:::i;:::-;54797:55;;;;:::i;:::-;54773:79;;54871:7;:17;;;54890:13;54863:41;;;;;;54586:336;;;;;:::o;53017:119::-;17469:13;:11;:13::i;:::-;53102:26:::1;53115:7;53124:3;53102:12;:26::i;:::-;53017:119:::0;;:::o;33649:134::-;33736:39;33753:4;33759:2;33763:7;33736:39;;;;;;;;;;;;:16;:39::i;:::-;33649:134;;;:::o;52774:110::-;52587:11;;;;;;;;;;;52573:25;;:10;:25;;;52565:34;;;;;;52864:12:::1;52850:11;;:26;;;;;;;;;;;;;;;;;;52774:110:::0;:::o;30962:120::-;31025:7;31052:22;31066:7;31052:13;:22::i;:::-;31045:29;;30962:120;;;:::o;30687:213::-;30750:7;30791:1;30774:19;;:5;:19;;;30770:89;;30844:1;30817:30;;;;;;;;;;;:::i;:::-;;;;;;;;30770:89;30876:9;:16;30886:5;30876:16;;;;;;;;;;;;;;;;30869:23;;30687:213;;;:::o;18258:103::-;17469:13;:11;:13::i;:::-;18323:30:::1;18350:1;18323:18;:30::i;:::-;18258:103::o:0;53150:70::-;17469:13;:11;:13::i;:::-;53207:5:::1;53196:8;;:16;;;;;;;;;;;;;;;;;;53150:70::o:0;54277:257::-;17469:13;:11;:13::i;:::-;51507:5:::1;54397:36;;:17;:36;;;;54389:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;54476:50;54488:7;54497:9;54508:17;54476:11;:50::i;:::-;54277:257:::0;;;:::o;17583:87::-;17629:7;17656:6;;;;;;;;;;;17649:13;;17583:87;:::o;52627:139::-;52587:11;;;;;;;;;;;52573:25;;:10;:25;;;52565:34;;;;;;52750:8:::1;52716:19;:33;52736:12;52716:33;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;52627:139:::0;;:::o;31309:95::-;31356:13;31389:7;31382:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31309:95;:::o;32551:146::-;32637:52;32656:12;:10;:12::i;:::-;32670:8;32680;32637:18;:52::i;:::-;32551:146;;:::o;51051:27::-;;;;;;;;;;;;;:::o;33854:211::-;33968:31;33981:4;33987:2;33991:7;33968:12;:31::i;:::-;34010:47;34033:4;34039:2;34043:7;34052:4;34010:22;:47::i;:::-;33854:211;;;;:::o;52898:97::-;17469:13;:11;:13::i;:::-;52984:3:::1;52972:9;:15;;;;;;:::i;:::-;;52898:97:::0;:::o;51085:103::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53304:283::-;53431:13;53476:8;;;;;;;;;;;53472:57;;;53508:9;53501:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53472:57;53556:23;53571:7;53556:14;:23::i;:::-;53549:30;;53304:283;;;;:::o;52049:370::-;52129:7;52474:19;:31;52494:10;52474:31;;;;;;;;;;;;;;;;;;;;;;;;;52466:40;;;;;;52172:12:::1;;52157;;:27;52149:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;52216:15;52234:12;;:14;;;;;;;;;:::i;:::-;;;;;52216:32;;52259:18;52265:2;52269:7;52259:5;:18::i;:::-;52288:26;52301:7;52310:3;52288:12;:26::i;:::-;52335:41;52347:7;52356:2;52360:15;;;;;;;;;;;52335:11;:41::i;:::-;52404:7;52397:14;;;52049:370:::0;;;;:::o;51769:272::-;52474:19;:31;52494:10;52474:31;;;;;;;;;;;;;;;;;;;;;;;;;52466:40;;;;;;51855:15:::1;51873:12;;:14;;;;;;;;;:::i;:::-;;;;;51855:32;;51898:22;51908:2;51912:7;51898:9;:22::i;:::-;51931:26;51944:7;51953:3;51931:12;:26::i;:::-;51978:41;51990:7;51999:2;52003:15;;;;;;;;;;;51978:11;:41::i;:::-;51844:197;51769:272:::0;;:::o;32768:155::-;32856:4;32880:18;:25;32899:5;32880:25;;;;;;;;;;;;;;;:35;32906:8;32880:35;;;;;;;;;;;;;;;;;;;;;;;;;32873:42;;32768:155;;;;:::o;18516:220::-;17469:13;:11;:13::i;:::-;18621:1:::1;18601:22;;:8;:22;;::::0;18597:93:::1;;18675:1;18647:31;;;;;;;;;;;:::i;:::-;;;;;;;;18597:93;18700:28;18719:8;18700:18;:28::i;:::-;18516:220:::0;:::o;47722:209::-;47824:4;47537:10;47530:18;;47848:35;;;:11;:35;;;;:75;;;;47887:36;47911:11;47887:23;:36::i;:::-;47848:75;47841:82;;47722:209;;;:::o;45304:247::-;45367:7;45387:13;45403:17;45412:7;45403:8;:17::i;:::-;45387:33;;45452:1;45435:19;;:5;:19;;;45431:90;;45501:7;45478:31;;;;;;;;;;;:::i;:::-;;;;;;;;45431:90;45538:5;45531:12;;;45304:247;;;:::o;34827:129::-;34897:7;34924:15;:24;34940:7;34924:24;;;;;;;;;;;;;;;;;;;;;34917:31;;34827:129;;;:::o;15586:98::-;15639:7;15666:10;15659:17;;15586:98;:::o;43528:130::-;43617:33;43626:2;43630:7;43639:4;43645;43617:8;:33::i;:::-;43528:130;;;:::o;37789:824::-;37875:7;37895:12;37910:17;37919:7;37910:8;:17::i;:::-;37895:32;;38006:1;37990:18;;:4;:18;;;37986:88;;38025:37;38042:4;38048;38054:7;38025:16;:37::i;:::-;37986:88;38137:1;38121:18;;:4;:18;;;38117:263;;38239:48;38256:1;38260:7;38277:1;38281:5;38239:8;:48::i;:::-;38352:1;38333:9;:15;38343:4;38333:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;38117:263;38410:1;38396:16;;:2;:16;;;38392:111;;38475:1;38458:9;:13;38468:2;38458:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;38392:111;38534:2;38515:7;:16;38523:7;38515:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38573:7;38569:2;38554:27;;38563:4;38554:27;;;;;;;;;;;;38601:4;38594:11;;;37789:824;;;;;:::o;17748:166::-;17819:12;:10;:12::i;:::-;17808:23;;:7;:5;:7::i;:::-;:23;;;17804:103;;17882:12;:10;:12::i;:::-;17855:40;;;;;;;;;;;:::i;:::-;;;;;;;;17804:103;17748:166::o;48737:170::-;48851:9;48829:10;:19;48840:7;48829:19;;;;;;;;;;;:31;;;;;;:::i;:::-;;48876:23;48891:7;48876:23;;;;;;:::i;:::-;;;;;;;;48737:170;;:::o;18896:191::-;18970:16;18989:6;;;;;;;;;;;18970:25;;19015:8;19006:6;;:17;;;;;;;;;;;;;;;;;;19070:8;19039:40;;19060:8;19039:40;;;;;;;;;;;;18959:128;18896:191;:::o;54008:261::-;51507:5;54119:36;;:17;:36;;;;54111:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;54220:41;;;;;;;;54232:9;54220:41;;;;;;54243:17;54220:41;;;;;54198:10;:19;54209:7;54198:19;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54008:261;;;:::o;44743:318::-;44871:1;44851:22;;:8;:22;;;44847:93;;44919:8;44897:31;;;;;;;;;;;:::i;:::-;;;;;;;;44847:93;44988:8;44950:18;:25;44969:5;44950:25;;;;;;;;;;;;;;;:35;44976:8;44950:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45034:8;45012:41;;45027:5;45012:41;;;45044:8;45012:41;;;;;;:::i;:::-;;;;;;;;44743:318;;;:::o;46101:799::-;46235:1;46218:2;:14;;;:18;46214:679;;;46273:2;46257:36;;;46294:12;:10;:12::i;:::-;46308:4;46314:7;46323:4;46257:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46253:629;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46588:1;46571:6;:13;:18;46567:300;;46643:2;46621:25;;;;;;;;;;;:::i;:::-;;;;;;;;46567:300;46817:6;46811:13;46802:6;46798:2;46794:15;46787:38;46253:629;46386:41;;;46376:51;;;:6;:51;;;;46372:132;;46481:2;46459:25;;;;;;;;;;;:::i;:::-;;;;;;;;46372:132;46329:190;46214:679;46101:799;;;;:::o;48002:609::-;48075:13;48101:22;48115:7;48101:13;:22::i;:::-;;48136:23;48162:10;:19;48173:7;48162:19;;;;;;;;;;;48136:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48192:18;48213:10;:8;:10::i;:::-;48192:31;;48321:1;48305:4;48299:18;:23;48295:72;;48346:9;48339:16;;;;;;48295:72;48494:1;48474:9;48468:23;:27;48464:97;;;48533:4;48539:9;48519:30;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48512:37;;;;;;48464:97;48580:23;48595:7;48580:14;:23::i;:::-;48573:30;;;;48002:609;;;;:::o;38949:335::-;39031:1;39017:16;;:2;:16;;;39013:89;;39087:1;39057:33;;;;;;;;;;;:::i;:::-;;;;;;;;39013:89;39112:21;39136:32;39144:2;39148:7;39165:1;39136:7;:32::i;:::-;39112:56;;39208:1;39183:27;;:13;:27;;;39179:98;;39262:1;39234:31;;;;;;;;;;;:::i;:::-;;;;;;;;39179:98;39002:282;38949:335;;:::o;39647:102::-;39715:26;39725:2;39729:7;39715:26;;;;;;;;;;;;:9;:26::i;:::-;39647:102;;:::o;30318:305::-;30420:4;30472:25;30457:40;;;:11;:40;;;;:105;;;;30529:33;30514:48;;;:11;:48;;;;30457:105;:158;;;;30579:36;30603:11;30579:23;:36::i;:::-;30457:158;30437:178;;30318:305;;;:::o;34589:117::-;34655:7;34682;:16;34690:7;34682:16;;;;;;;;;;;;;;;;;;;;;34675:23;;34589:117;;;:::o;43846:678::-;44008:9;:31;;;;44037:1;44021:18;;:4;:18;;;;44008:31;44004:471;;;44056:13;44072:22;44086:7;44072:13;:22::i;:::-;44056:38;;44241:1;44225:18;;:4;:18;;;;:35;;;;;44256:4;44247:13;;:5;:13;;;;44225:35;:69;;;;;44265:29;44282:5;44289:4;44265:16;:29::i;:::-;44264:30;44225:69;44221:144;;;44344:4;44322:27;;;;;;;;;;;:::i;:::-;;;;;;;;44221:144;44385:9;44381:83;;;44440:7;44436:2;44420:28;;44429:5;44420:28;;;;;;;;;;;;44381:83;44041:434;44004:471;44514:2;44487:15;:24;44503:7;44487:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43846:678;;;;:::o;35996:376::-;36109:38;36123:5;36130:7;36139;36109:13;:38::i;:::-;36104:261;;36185:1;36168:19;;:5;:19;;;36164:190;;36238:7;36215:31;;;;;;;;;;;:::i;:::-;;;;;;;;36164:190;36321:7;36330;36294:44;;;;;;;;;;;;:::i;:::-;;;;;;;;36104:261;35996:376;;;:::o;31984:94::-;32035:13;32061:9;;;;;;;;;;;;;;31984:94;:::o;31475:260::-;31539:13;31565:22;31579:7;31565:13;:22::i;:::-;;31600:21;31624:10;:8;:10::i;:::-;31600:34;;31676:1;31658:7;31652:21;:25;:75;;;;;;;;;;;;;;;;;31694:7;31703:18;:7;:16;:18::i;:::-;31680:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31652:75;31645:82;;;31475:260;;;:::o;39976:185::-;40071:18;40077:2;40081:7;40071:5;:18::i;:::-;40100:53;40131:1;40135:2;40139:7;40148:4;40100:22;:53::i;:::-;39976:185;;;:::o;22062:148::-;22138:4;22177:25;22162:40;;;:11;:40;;;;22155:47;;22062:148;;;:::o;35276:276::-;35379:4;35435:1;35416:21;;:7;:21;;;;:128;;;;;35464:7;35455:16;;:5;:16;;;:52;;;;35475:32;35492:5;35499:7;35475:16;:32::i;:::-;35455:52;:88;;;;35536:7;35511:32;;:21;35524:7;35511:12;:21::i;:::-;:32;;;35455:88;35416:128;35396:148;;35276:276;;;;;:::o;12350:718::-;12406:13;12457:14;12494:1;12474:17;12485:5;12474:10;:17::i;:::-;:21;12457:38;;12510:20;12544:6;12533:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12510:41;;12566:11;12695:6;12691:2;12687:15;12679:6;12675:28;12668:35;;12732:290;12739:4;12732:290;;;12764:5;;;;;;;;12906:10;12901:2;12894:5;12890:14;12885:32;12880:3;12872:46;12964:2;12955:11;;;;;;:::i;:::-;;;;;12998:1;12989:5;:10;12732:290;12985:21;12732:290;13043:6;13036:13;;;;;12350:718;;;:::o;8748:948::-;8801:7;8821:14;8838:1;8821:18;;8888:8;8879:5;:17;8875:106;;8926:8;8917:17;;;;;;:::i;:::-;;;;;8963:2;8953:12;;;;8875:106;9008:8;8999:5;:17;8995:106;;9046:8;9037:17;;;;;;:::i;:::-;;;;;9083:2;9073:12;;;;8995:106;9128:8;9119:5;:17;9115:106;;9166:8;9157:17;;;;;;:::i;:::-;;;;;9203:2;9193:12;;;;9115:106;9248:7;9239:5;:16;9235:103;;9285:7;9276:16;;;;;;:::i;:::-;;;;;9321:1;9311:11;;;;9235:103;9365:7;9356:5;:16;9352:103;;9402:7;9393:16;;;;;;:::i;:::-;;;;;9438:1;9428:11;;;;9352:103;9482:7;9473:5;:16;9469:103;;9519:7;9510:16;;;;;;:::i;:::-;;;;;9555:1;9545:11;;;;9469:103;9599:7;9590:5;:16;9586:68;;9637:1;9627:11;;;;9586:68;9682:6;9675:13;;;8748:948;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:474::-;5935:6;5943;5992:2;5980:9;5971:7;5967:23;5963:32;5960:119;;;5998:79;;:::i;:::-;5960:119;6118:1;6143:53;6188:7;6179:6;6168:9;6164:22;6143:53;:::i;:::-;6133:63;;6089:117;6245:2;6271:53;6316:7;6307:6;6296:9;6292:22;6271:53;:::i;:::-;6261:63;;6216:118;5867:474;;;;;:::o;6347:332::-;6468:4;6506:2;6495:9;6491:18;6483:26;;6519:71;6587:1;6576:9;6572:17;6563:6;6519:71;:::i;:::-;6600:72;6668:2;6657:9;6653:18;6644:6;6600:72;:::i;:::-;6347:332;;;;;:::o;6685:117::-;6794:1;6791;6784:12;6808:117;6917:1;6914;6907:12;6931:180;6979:77;6976:1;6969:88;7076:4;7073:1;7066:15;7100:4;7097:1;7090:15;7117:281;7200:27;7222:4;7200:27;:::i;:::-;7192:6;7188:40;7330:6;7318:10;7315:22;7294:18;7282:10;7279:34;7276:62;7273:88;;;7341:18;;:::i;:::-;7273:88;7381:10;7377:2;7370:22;7160:238;7117:281;;:::o;7404:129::-;7438:6;7465:20;;:::i;:::-;7455:30;;7494:33;7522:4;7514:6;7494:33;:::i;:::-;7404:129;;;:::o;7539:308::-;7601:4;7691:18;7683:6;7680:30;7677:56;;;7713:18;;:::i;:::-;7677:56;7751:29;7773:6;7751:29;:::i;:::-;7743:37;;7835:4;7829;7825:15;7817:23;;7539:308;;;:::o;7853:146::-;7950:6;7945:3;7940;7927:30;7991:1;7982:6;7977:3;7973:16;7966:27;7853:146;;;:::o;8005:425::-;8083:5;8108:66;8124:49;8166:6;8124:49;:::i;:::-;8108:66;:::i;:::-;8099:75;;8197:6;8190:5;8183:21;8235:4;8228:5;8224:16;8273:3;8264:6;8259:3;8255:16;8252:25;8249:112;;;8280:79;;:::i;:::-;8249:112;8370:54;8417:6;8412:3;8407;8370:54;:::i;:::-;8089:341;8005:425;;;;;:::o;8450:340::-;8506:5;8555:3;8548:4;8540:6;8536:17;8532:27;8522:122;;8563:79;;:::i;:::-;8522:122;8680:6;8667:20;8705:79;8780:3;8772:6;8765:4;8757:6;8753:17;8705:79;:::i;:::-;8696:88;;8512:278;8450:340;;;;:::o;8796:654::-;8874:6;8882;8931:2;8919:9;8910:7;8906:23;8902:32;8899:119;;;8937:79;;:::i;:::-;8899:119;9057:1;9082:53;9127:7;9118:6;9107:9;9103:22;9082:53;:::i;:::-;9072:63;;9028:117;9212:2;9201:9;9197:18;9184:32;9243:18;9235:6;9232:30;9229:117;;;9265:79;;:::i;:::-;9229:117;9370:63;9425:7;9416:6;9405:9;9401:22;9370:63;:::i;:::-;9360:73;;9155:288;8796:654;;;;;:::o;9456:329::-;9515:6;9564:2;9552:9;9543:7;9539:23;9535:32;9532:119;;;9570:79;;:::i;:::-;9532:119;9690:1;9715:53;9760:7;9751:6;9740:9;9736:22;9715:53;:::i;:::-;9705:63;;9661:117;9456:329;;;;:::o;9791:109::-;9827:7;9867:26;9860:5;9856:38;9845:49;;9791:109;;;:::o;9906:120::-;9978:23;9995:5;9978:23;:::i;:::-;9971:5;9968:34;9958:62;;10016:1;10013;10006:12;9958:62;9906:120;:::o;10032:137::-;10077:5;10115:6;10102:20;10093:29;;10131:32;10157:5;10131:32;:::i;:::-;10032:137;;;;:::o;10175:617::-;10251:6;10259;10267;10316:2;10304:9;10295:7;10291:23;10287:32;10284:119;;;10322:79;;:::i;:::-;10284:119;10442:1;10467:53;10512:7;10503:6;10492:9;10488:22;10467:53;:::i;:::-;10457:63;;10413:117;10569:2;10595:53;10640:7;10631:6;10620:9;10616:22;10595:53;:::i;:::-;10585:63;;10540:118;10697:2;10723:52;10767:7;10758:6;10747:9;10743:22;10723:52;:::i;:::-;10713:62;;10668:117;10175:617;;;;;:::o;10798:116::-;10868:21;10883:5;10868:21;:::i;:::-;10861:5;10858:32;10848:60;;10904:1;10901;10894:12;10848:60;10798:116;:::o;10920:133::-;10963:5;11001:6;10988:20;10979:29;;11017:30;11041:5;11017:30;:::i;:::-;10920:133;;;;:::o;11059:468::-;11124:6;11132;11181:2;11169:9;11160:7;11156:23;11152:32;11149:119;;;11187:79;;:::i;:::-;11149:119;11307:1;11332:53;11377:7;11368:6;11357:9;11353:22;11332:53;:::i;:::-;11322:63;;11278:117;11434:2;11460:50;11502:7;11493:6;11482:9;11478:22;11460:50;:::i;:::-;11450:60;;11405:115;11059:468;;;;;:::o;11533:307::-;11594:4;11684:18;11676:6;11673:30;11670:56;;;11706:18;;:::i;:::-;11670:56;11744:29;11766:6;11744:29;:::i;:::-;11736:37;;11828:4;11822;11818:15;11810:23;;11533:307;;;:::o;11846:423::-;11923:5;11948:65;11964:48;12005:6;11964:48;:::i;:::-;11948:65;:::i;:::-;11939:74;;12036:6;12029:5;12022:21;12074:4;12067:5;12063:16;12112:3;12103:6;12098:3;12094:16;12091:25;12088:112;;;12119:79;;:::i;:::-;12088:112;12209:54;12256:6;12251:3;12246;12209:54;:::i;:::-;11929:340;11846:423;;;;;:::o;12288:338::-;12343:5;12392:3;12385:4;12377:6;12373:17;12369:27;12359:122;;12400:79;;:::i;:::-;12359:122;12517:6;12504:20;12542:78;12616:3;12608:6;12601:4;12593:6;12589:17;12542:78;:::i;:::-;12533:87;;12349:277;12288:338;;;;:::o;12632:943::-;12727:6;12735;12743;12751;12800:3;12788:9;12779:7;12775:23;12771:33;12768:120;;;12807:79;;:::i;:::-;12768:120;12927:1;12952:53;12997:7;12988:6;12977:9;12973:22;12952:53;:::i;:::-;12942:63;;12898:117;13054:2;13080:53;13125:7;13116:6;13105:9;13101:22;13080:53;:::i;:::-;13070:63;;13025:118;13182:2;13208:53;13253:7;13244:6;13233:9;13229:22;13208:53;:::i;:::-;13198:63;;13153:118;13338:2;13327:9;13323:18;13310:32;13369:18;13361:6;13358:30;13355:117;;;13391:79;;:::i;:::-;13355:117;13496:62;13550:7;13541:6;13530:9;13526:22;13496:62;:::i;:::-;13486:72;;13281:287;12632:943;;;;;;;:::o;13581:509::-;13650:6;13699:2;13687:9;13678:7;13674:23;13670:32;13667:119;;;13705:79;;:::i;:::-;13667:119;13853:1;13842:9;13838:17;13825:31;13883:18;13875:6;13872:30;13869:117;;;13905:79;;:::i;:::-;13869:117;14010:63;14065:7;14056:6;14045:9;14041:22;14010:63;:::i;:::-;14000:73;;13796:287;13581:509;;;;:::o;14096:654::-;14174:6;14182;14231:2;14219:9;14210:7;14206:23;14202:32;14199:119;;;14237:79;;:::i;:::-;14199:119;14357:1;14382:53;14427:7;14418:6;14407:9;14403:22;14382:53;:::i;:::-;14372:63;;14328:117;14512:2;14501:9;14497:18;14484:32;14543:18;14535:6;14532:30;14529:117;;;14565:79;;:::i;:::-;14529:117;14670:63;14725:7;14716:6;14705:9;14701:22;14670:63;:::i;:::-;14660:73;;14455:288;14096:654;;;;;:::o;14756:474::-;14824:6;14832;14881:2;14869:9;14860:7;14856:23;14852:32;14849:119;;;14887:79;;:::i;:::-;14849:119;15007:1;15032:53;15077:7;15068:6;15057:9;15053:22;15032:53;:::i;:::-;15022:63;;14978:117;15134:2;15160:53;15205:7;15196:6;15185:9;15181:22;15160:53;:::i;:::-;15150:63;;15105:118;14756:474;;;;;:::o;15236:180::-;15284:77;15281:1;15274:88;15381:4;15378:1;15371:15;15405:4;15402:1;15395:15;15422:320;15466:6;15503:1;15497:4;15493:12;15483:22;;15550:1;15544:4;15540:12;15571:18;15561:81;;15627:4;15619:6;15615:17;15605:27;;15561:81;15689:2;15681:6;15678:14;15658:18;15655:38;15652:84;;15708:18;;:::i;:::-;15652:84;15473:269;15422:320;;;:::o;15748:442::-;15897:4;15935:2;15924:9;15920:18;15912:26;;15948:71;16016:1;16005:9;16001:17;15992:6;15948:71;:::i;:::-;16029:72;16097:2;16086:9;16082:18;16073:6;16029:72;:::i;:::-;16111;16179:2;16168:9;16164:18;16155:6;16111:72;:::i;:::-;15748:442;;;;;;:::o;16196:180::-;16244:77;16241:1;16234:88;16341:4;16338:1;16331:15;16365:4;16362:1;16355:15;16382:410;16422:7;16445:20;16463:1;16445:20;:::i;:::-;16440:25;;16479:20;16497:1;16479:20;:::i;:::-;16474:25;;16534:1;16531;16527:9;16556:30;16574:11;16556:30;:::i;:::-;16545:41;;16735:1;16726:7;16722:15;16719:1;16716:22;16696:1;16689:9;16669:83;16646:139;;16765:18;;:::i;:::-;16646:139;16430:362;16382:410;;;;:::o;16798:180::-;16846:77;16843:1;16836:88;16943:4;16940:1;16933:15;16967:4;16964:1;16957:15;16984:185;17024:1;17041:20;17059:1;17041:20;:::i;:::-;17036:25;;17075:20;17093:1;17075:20;:::i;:::-;17070:25;;17114:1;17104:35;;17119:18;;:::i;:::-;17104:35;17161:1;17158;17154:9;17149:14;;16984:185;;;;:::o;17175:177::-;17315:29;17311:1;17303:6;17299:14;17292:53;17175:177;:::o;17358:366::-;17500:3;17521:67;17585:2;17580:3;17521:67;:::i;:::-;17514:74;;17597:93;17686:3;17597:93;:::i;:::-;17715:2;17710:3;17706:12;17699:19;;17358:366;;;:::o;17730:419::-;17896:4;17934:2;17923:9;17919:18;17911:26;;17983:9;17977:4;17973:20;17969:1;17958:9;17954:17;17947:47;18011:131;18137:4;18011:131;:::i;:::-;18003:139;;17730:419;;;:::o;18155:141::-;18204:4;18227:3;18219:11;;18250:3;18247:1;18240:14;18284:4;18281:1;18271:18;18263:26;;18155:141;;;:::o;18302:93::-;18339:6;18386:2;18381;18374:5;18370:14;18366:23;18356:33;;18302:93;;;:::o;18401:107::-;18445:8;18495:5;18489:4;18485:16;18464:37;;18401:107;;;;:::o;18514:393::-;18583:6;18633:1;18621:10;18617:18;18656:97;18686:66;18675:9;18656:97;:::i;:::-;18774:39;18804:8;18793:9;18774:39;:::i;:::-;18762:51;;18846:4;18842:9;18835:5;18831:21;18822:30;;18895:4;18885:8;18881:19;18874:5;18871:30;18861:40;;18590:317;;18514:393;;;;;:::o;18913:60::-;18941:3;18962:5;18955:12;;18913:60;;;:::o;18979:142::-;19029:9;19062:53;19080:34;19089:24;19107:5;19089:24;:::i;:::-;19080:34;:::i;:::-;19062:53;:::i;:::-;19049:66;;18979:142;;;:::o;19127:75::-;19170:3;19191:5;19184:12;;19127:75;;;:::o;19208:269::-;19318:39;19349:7;19318:39;:::i;:::-;19379:91;19428:41;19452:16;19428:41;:::i;:::-;19420:6;19413:4;19407:11;19379:91;:::i;:::-;19373:4;19366:105;19284:193;19208:269;;;:::o;19483:73::-;19528:3;19483:73;:::o;19562:189::-;19639:32;;:::i;:::-;19680:65;19738:6;19730;19724:4;19680:65;:::i;:::-;19615:136;19562:189;;:::o;19757:186::-;19817:120;19834:3;19827:5;19824:14;19817:120;;;19888:39;19925:1;19918:5;19888:39;:::i;:::-;19861:1;19854:5;19850:13;19841:22;;19817:120;;;19757:186;;:::o;19949:543::-;20050:2;20045:3;20042:11;20039:446;;;20084:38;20116:5;20084:38;:::i;:::-;20168:29;20186:10;20168:29;:::i;:::-;20158:8;20154:44;20351:2;20339:10;20336:18;20333:49;;;20372:8;20357:23;;20333:49;20395:80;20451:22;20469:3;20451:22;:::i;:::-;20441:8;20437:37;20424:11;20395:80;:::i;:::-;20054:431;;20039:446;19949:543;;;:::o;20498:117::-;20552:8;20602:5;20596:4;20592:16;20571:37;;20498:117;;;;:::o;20621:169::-;20665:6;20698:51;20746:1;20742:6;20734:5;20731:1;20727:13;20698:51;:::i;:::-;20694:56;20779:4;20773;20769:15;20759:25;;20672:118;20621:169;;;;:::o;20795:295::-;20871:4;21017:29;21042:3;21036:4;21017:29;:::i;:::-;21009:37;;21079:3;21076:1;21072:11;21066:4;21063:21;21055:29;;20795:295;;;;:::o;21095:1395::-;21212:37;21245:3;21212:37;:::i;:::-;21314:18;21306:6;21303:30;21300:56;;;21336:18;;:::i;:::-;21300:56;21380:38;21412:4;21406:11;21380:38;:::i;:::-;21465:67;21525:6;21517;21511:4;21465:67;:::i;:::-;21559:1;21583:4;21570:17;;21615:2;21607:6;21604:14;21632:1;21627:618;;;;22289:1;22306:6;22303:77;;;22355:9;22350:3;22346:19;22340:26;22331:35;;22303:77;22406:67;22466:6;22459:5;22406:67;:::i;:::-;22400:4;22393:81;22262:222;21597:887;;21627:618;21679:4;21675:9;21667:6;21663:22;21713:37;21745:4;21713:37;:::i;:::-;21772:1;21786:208;21800:7;21797:1;21794:14;21786:208;;;21879:9;21874:3;21870:19;21864:26;21856:6;21849:42;21930:1;21922:6;21918:14;21908:24;;21977:2;21966:9;21962:18;21949:31;;21823:4;21820:1;21816:12;21811:17;;21786:208;;;22022:6;22013:7;22010:19;22007:179;;;22080:9;22075:3;22071:19;22065:26;22123:48;22165:4;22157:6;22153:17;22142:9;22123:48;:::i;:::-;22115:6;22108:64;22030:156;22007:179;22232:1;22228;22220:6;22216:14;22212:22;22206:4;22199:36;21634:611;;;21597:887;;21187:1303;;;21095:1395;;:::o;22496:166::-;22636:18;22632:1;22624:6;22620:14;22613:42;22496:166;:::o;22668:366::-;22810:3;22831:67;22895:2;22890:3;22831:67;:::i;:::-;22824:74;;22907:93;22996:3;22907:93;:::i;:::-;23025:2;23020:3;23016:12;23009:19;;22668:366;;;:::o;23040:419::-;23206:4;23244:2;23233:9;23229:18;23221:26;;23293:9;23287:4;23283:20;23279:1;23268:9;23264:17;23257:47;23321:131;23447:4;23321:131;:::i;:::-;23313:139;;23040:419;;;:::o;23465:233::-;23504:3;23527:24;23545:5;23527:24;:::i;:::-;23518:33;;23573:66;23566:5;23563:77;23560:103;;23643:18;;:::i;:::-;23560:103;23690:1;23683:5;23679:13;23672:20;;23465:233;;;:::o;23704:98::-;23755:6;23789:5;23783:12;23773:22;;23704:98;;;:::o;23808:168::-;23891:11;23925:6;23920:3;23913:19;23965:4;23960:3;23956:14;23941:29;;23808:168;;;;:::o;23982:373::-;24068:3;24096:38;24128:5;24096:38;:::i;:::-;24150:70;24213:6;24208:3;24150:70;:::i;:::-;24143:77;;24229:65;24287:6;24282:3;24275:4;24268:5;24264:16;24229:65;:::i;:::-;24319:29;24341:6;24319:29;:::i;:::-;24314:3;24310:39;24303:46;;24072:283;23982:373;;;;:::o;24361:640::-;24556:4;24594:3;24583:9;24579:19;24571:27;;24608:71;24676:1;24665:9;24661:17;24652:6;24608:71;:::i;:::-;24689:72;24757:2;24746:9;24742:18;24733:6;24689:72;:::i;:::-;24771;24839:2;24828:9;24824:18;24815:6;24771:72;:::i;:::-;24890:9;24884:4;24880:20;24875:2;24864:9;24860:18;24853:48;24918:76;24989:4;24980:6;24918:76;:::i;:::-;24910:84;;24361:640;;;;;;;:::o;25007:141::-;25063:5;25094:6;25088:13;25079:22;;25110:32;25136:5;25110:32;:::i;:::-;25007:141;;;;:::o;25154:349::-;25223:6;25272:2;25260:9;25251:7;25247:23;25243:32;25240:119;;;25278:79;;:::i;:::-;25240:119;25398:1;25423:63;25478:7;25469:6;25458:9;25454:22;25423:63;:::i;:::-;25413:73;;25369:127;25154:349;;;;:::o;25509:148::-;25611:11;25648:3;25633:18;;25509:148;;;;:::o;25663:390::-;25769:3;25797:39;25830:5;25797:39;:::i;:::-;25852:89;25934:6;25929:3;25852:89;:::i;:::-;25845:96;;25950:65;26008:6;26003:3;25996:4;25989:5;25985:16;25950:65;:::i;:::-;26040:6;26035:3;26031:16;26024:23;;25773:280;25663:390;;;;:::o;26059:435::-;26239:3;26261:95;26352:3;26343:6;26261:95;:::i;:::-;26254:102;;26373:95;26464:3;26455:6;26373:95;:::i;:::-;26366:102;;26485:3;26478:10;;26059:435;;;;;:::o
Swarm Source
ipfs://ec9a7bd3929474a34fa445d9022ab485e3b6f97f32d674d2e2783db07cb36729
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.