Overview
TokenID
50
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
LIMITLESS222
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2025-02-03 */ // 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); } // File: @openzeppelin/contracts/utils/Pausable.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity ^0.8.20; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { bool private _paused; /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); /** * @dev The operation failed because the contract is paused. */ error EnforcedPause(); /** * @dev The operation failed because the contract is not paused. */ error ExpectedPause(); /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { if (paused()) { revert EnforcedPause(); } } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { if (!paused()) { revert ExpectedPause(); } } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/extensions/ERC721Pausable.sol) pragma solidity ^0.8.20; /** * @dev ERC-721 token with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. * * IMPORTANT: This contract does not include public pause and unpause functions. In * addition to inheriting this contract, you must define both functions, invoking the * {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate * access control, e.g. using {AccessControl} or {Ownable}. Not doing so will * make the contract pause mechanism of the contract unreachable, and thus unusable. */ abstract contract ERC721Pausable is ERC721, Pausable { /** * @dev See {ERC721-_update}. * * Requirements: * * - the contract must not be paused. */ function _update( address to, uint256 tokenId, address auth ) internal virtual override whenNotPaused returns (address) { return super._update(to, tokenId, auth); } } // Compatible with OpenZeppelin Contracts ^5.0.0 pragma solidity ^0.8.20; contract LIMITLESS222 is ERC721, ERC721URIStorage, Ownable, IERC2981, Pausable { uint256 private _nextTokenId; mapping(address=>bool) allowedSaleContract; address private aiowAddress = 0x9aC26D5af386f5950D3D94476aFB4060325c6976; uint256 private _totalSupply = 222; address royaltyWallet = 0x6acee9f4D9cfd2307b1897ffcc62eEDbf6D0DDf4; uint96 royaltyFraction = 500; uint96 private constant FEE_DENOMINATOR = 10000; // 100% = 10,000 basis points constructor(address initialOwner) ERC721("Limitless 222", "blue") Ownable(initialOwner) { allowedSaleContract[0xd3c7Bb7e15980a960cED87040C0a6F7D3555c1Cc] = true; _pause(); } function safeMint(address to, string memory uri) external onlySaleContract { uint256 tokenId = _nextTokenId++; _safeMint(to, tokenId); _setTokenURI(tokenId, uri); } 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); 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 pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function _approve(address to, uint256 tokenId, address auth) internal override whenNotPaused { super._approve(to, tokenId, auth, true); } function _setApprovalForAll(address owner, address operator, bool approved) internal override whenNotPaused { super._setApprovalForAll(owner, operator, approved); } function setTokenUrl(uint256 tokenId, string memory uri) public onlyOwner { _setTokenURI(tokenId, uri); } // The following functions are overrides required by Solidity. function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { 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); } function setRoyalty(address recipient, uint96 royaltyPercentage) external onlyOwner { require(royaltyPercentage <= FEE_DENOMINATOR, "Royalty percentage too high"); royaltyFraction = royaltyPercentage; royaltyWallet = recipient; } // EIP-2981 royaltyInfo function function royaltyInfo(uint256 tokenId, uint256 salePrice) external view override returns (address, uint256) { uint256 royaltyAmount = (salePrice * royaltyFraction) / FEE_DENOMINATOR; return (royaltyWallet, 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":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"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":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052739ac26d5af386f5950d3d94476afb4060325c6976600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060de600b55736acee9f4d9cfd2307b1897ffcc62eedbf6d0ddf4600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101f4600c60146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550348015620000f357600080fd5b506040516200395f3803806200395f8339818101604052810190620001199190620004df565b806040518060400160405280600d81526020017f4c696d69746c65737320323232000000000000000000000000000000000000008152506040518060400160405280600481526020017f626c75650000000000000000000000000000000000000000000000000000000081525081600090816200019791906200078b565b508060019081620001a991906200078b565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620002215760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000218919062000883565b60405180910390fd5b6200023281620002d160201b60201c565b506000600760146101000a81548160ff02191690831515021790555060016009600073d3c7bb7e15980a960ced87040c0a6f7d3555c1cc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002ca6200039760201b60201c565b50620008a0565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003a76200040c60201b60201c565b6001600760146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620003f36200045660201b60201c565b60405162000402919062000883565b60405180910390a1565b6200041c6200045e60201b60201c565b1562000454576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600033905090565b6000600760149054906101000a900460ff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004a7826200047a565b9050919050565b620004b9816200049a565b8114620004c557600080fd5b50565b600081519050620004d981620004ae565b92915050565b600060208284031215620004f857620004f762000475565b5b60006200050884828501620004c8565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059357607f821691505b602082108103620005a957620005a86200054b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005d4565b6200061f8683620005d4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200066c62000666620006608462000637565b62000641565b62000637565b9050919050565b6000819050919050565b62000688836200064b565b620006a0620006978262000673565b848454620005e1565b825550505050565b600090565b620006b7620006a8565b620006c48184846200067d565b505050565b5b81811015620006ec57620006e0600082620006ad565b600181019050620006ca565b5050565b601f8211156200073b576200070581620005af565b6200071084620005c4565b8101602085101562000720578190505b620007386200072f85620005c4565b830182620006c9565b50505b505050565b600082821c905092915050565b6000620007606000198460080262000740565b1980831691505092915050565b60006200077b83836200074d565b9150826002028217905092915050565b620007968262000511565b67ffffffffffffffff811115620007b257620007b16200051c565b5b620007be82546200057a565b620007cb828285620006f0565b600060209050601f831160018114620008035760008415620007ee578287015190505b620007fa85826200076d565b8655506200086a565b601f1984166200081386620005af565b60005b828110156200083d5784890151825560018201915060208501945060208101905062000816565b868310156200085d578489015162000859601f8916826200074d565b8355505b6001600288020188555050505b505050505050565b6200087d816200049a565b82525050565b60006020820190506200089a600083018462000872565b92915050565b6130af80620008b06000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063a22cb46511610097578063d0def52111610071578063d0def5211461047f578063d204c45e146104af578063e985e9c5146104cb578063f2fde38b146104fb576101a9565b8063a22cb46514610417578063b88d4fde14610433578063c87b56dd1461044f576101a9565b80638da5cb5b116100d35780638da5cb5b146103a35780638e6fcd32146103c15780638f2fc60b146103dd57806395d89b41146103f9576101a9565b806370a082311461035f578063715018a61461038f5780638456cb5914610399576101a9565b80632a55205a1161016657806342842e0e1161014057806342842e0e146102d9578063524cad98146102f55780635c975abb146103115780636352211e1461032f576101a9565b80632a55205a1461028257806334d1c641146102b35780633f4ba83a146102cf576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c3919061229c565b610517565b6040516101d591906122e4565b60405180910390f35b6101e6610591565b6040516101f3919061238f565b60405180910390f35b610216600480360381019061021191906123e7565b610623565b6040516102239190612455565b60405180910390f35b6102466004803603810190610241919061249c565b61063f565b005b610250610655565b60405161025d91906124eb565b60405180910390f35b610280600480360381019061027b9190612506565b61065f565b005b61029c60048036038101906102979190612559565b610761565b6040516102aa929190612599565b60405180910390f35b6102cd60048036038101906102c891906126f7565b6107e7565b005b6102d76107fd565b005b6102f360048036038101906102ee9190612506565b61080f565b005b61030f600480360381019061030a9190612753565b61082f565b005b6103196108cd565b60405161032691906122e4565b60405180910390f35b610349600480360381019061034491906123e7565b6108e4565b6040516103569190612455565b60405180910390f35b61037960048036038101906103749190612753565b6108f6565b60405161038691906124eb565b60405180910390f35b6103976109b0565b005b6103a16109c4565b005b6103ab6109d6565b6040516103b89190612455565b60405180910390f35b6103db60048036038101906103d691906127ac565b610a00565b005b6103f760048036038101906103f29190612830565b610ab5565b005b610401610b94565b60405161040e919061238f565b60405180910390f35b610431600480360381019061042c91906127ac565b610c26565b005b61044d60048036038101906104489190612911565b610c3c565b005b610469600480360381019061046491906123e7565b610c59565b604051610476919061238f565b60405180910390f35b61049960048036038101906104949190612994565b610c6b565b6040516104a691906124eb565b60405180910390f35b6104c960048036038101906104c49190612994565b610d42565b005b6104e560048036038101906104e091906129f0565b610dcc565b6040516104f291906122e4565b60405180910390f35b61051560048036038101906105109190612753565b610e60565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058a575061058982610ee6565b5b9050919050565b6060600080546105a090612a5f565b80601f01602080910402602001604051908101604052809291908181526020018280546105cc90612a5f565b80156106195780601f106105ee57610100808354040283529160200191610619565b820191906000526020600020905b8154815290600101906020018083116105fc57829003601f168201915b5050505050905090565b600061062e82610f47565b5061063882610fcf565b9050919050565b610651828261064c61100c565b611014565b5050565b6000600854905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106d15760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016106c89190612455565b60405180910390fd5b60006106e583836106e061100c565b61102e565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461075b578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161075293929190612a90565b60405180910390fd5b50505050565b60008060006127106bffffffffffffffffffffffff16600c60149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16856107ab9190612af6565b6107b59190612b67565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168192509250509250929050565b6107ef611248565b6107f982826112cf565b5050565b610805611248565b61080d61132b565b565b61082a83838360405180602001604052806000815250610c3c565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461088957600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760149054906101000a900460ff16905090565b60006108ef82610f47565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109695760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016109609190612455565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109b8611248565b6109c2600061138e565b565b6109cc611248565b6109d4611454565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a5a57600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610abd611248565b6127106bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590612be4565b60405180910390fd5b80600c60146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060018054610ba390612a5f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcf90612a5f565b8015610c1c5780601f10610bf157610100808354040283529160200191610c1c565b820191906000526020600020905b815481529060010190602001808311610bff57829003601f168201915b5050505050905090565b610c38610c3161100c565b83836114b7565b5050565b610c4784848461065f565b610c53848484846114cf565b50505050565b6060610c6482611686565b9050919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cc357600080fd5b600854600b5411610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090612c50565b60405180910390fd5b600060086000815480929190610d1e90612c70565b919050559050610d2e8482611799565b610d3881846112cf565b8091505092915050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d9857600080fd5b600060086000815480929190610dad90612c70565b919050559050610dbd8382611892565b610dc781836112cf565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e68611248565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eda5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610ed19190612455565b60405180910390fd5b610ee38161138e565b50565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f405750610f3f826118b0565b5b9050919050565b600080610f5383611992565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fc657826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610fbd91906124eb565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b61101c6119cf565b6110298383836001611a10565b505050565b60008061103a84611992565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461107c5761107b818486611bd5565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461110d576110be600085600080611a10565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611190576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b61125061100c565b73ffffffffffffffffffffffffffffffffffffffff1661126e6109d6565b73ffffffffffffffffffffffffffffffffffffffff16146112cd5761129161100c565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016112c49190612455565b60405180910390fd5b565b806006600084815260200190815260200160002090816112ef9190612e64565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161131f91906124eb565b60405180910390a15050565b611333611c99565b6000600760146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61137761100c565b6040516113849190612455565b60405180910390a1565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61145c6119cf565b6001600760146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114a061100c565b6040516114ad9190612455565b60405180910390a1565b6114bf6119cf565b6114ca838383611cd9565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611680578273ffffffffffffffffffffffffffffffffffffffff1663150b7a0261151361100c565b8685856040518563ffffffff1660e01b81526004016115359493929190612f8b565b6020604051808303816000875af192505050801561157157506040513d601f19601f8201168201806040525081019061156e9190612fec565b60015b6115f5573d80600081146115a1576040519150601f19603f3d011682016040523d82523d6000602084013e6115a6565b606091505b5060008151036115ed57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016115e49190612455565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461167e57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016116759190612455565b60405180910390fd5b505b50505050565b606061169182610f47565b5060006006600084815260200190815260200160002080546116b290612a5f565b80601f01602080910402602001604051908101604052809291908181526020018280546116de90612a5f565b801561172b5780601f106117005761010080835404028352916020019161172b565b820191906000526020600020905b81548152906001019060200180831161170e57829003601f168201915b50505050509050600061173c611e48565b90506000815103611751578192505050611794565b60008251111561178657808260405160200161176e929190613055565b60405160208183030381529060405292505050611794565b61178f84611e5f565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361180b5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016118029190612455565b60405180910390fd5b60006118198383600061102e565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461188d5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016118849190612455565b60405180910390fd5b505050565b6118ac828260405180602001604052806000815250611ec8565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061197b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061198b575061198a82611ee4565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6119d76108cd565b15611a0e576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b8080611a495750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611b7d576000611a5984610f47565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ac457508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611ad75750611ad58184610dcc565b155b15611b1957826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611b109190612455565b60405180910390fd5b8115611b7b57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611be0838383611f4e565b611c9457600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c5557806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611c4c91906124eb565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611c8b929190612599565b60405180910390fd5b505050565b611ca16108cd565b611cd7576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d4a57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611d419190612455565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e3b91906122e4565b60405180910390a3505050565b606060405180602001604052806000815250905090565b6060611e6a82610f47565b506000611e75611e48565b90506000815111611e955760405180602001604052806000815250611ec0565b80611e9f8461200f565b604051602001611eb0929190613055565b6040516020818303038152906040525b915050919050565b611ed28383611799565b611edf60008484846114cf565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200657508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fc75750611fc68484610dcc565b5b8061200557508273ffffffffffffffffffffffffffffffffffffffff16611fed83610fcf565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b60606000600161201e846120dd565b01905060008167ffffffffffffffff81111561203d5761203c6125cc565b5b6040519080825280601f01601f19166020018201604052801561206f5781602001600182028036833780820191505090505b509050600082602001820190505b6001156120d2578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120c6576120c5612b38565b5b0494506000850361207d575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061213b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161213157612130612b38565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612178576d04ee2d6d415b85acef8100000000838161216e5761216d612b38565b5b0492506020810190505b662386f26fc1000083106121a757662386f26fc10000838161219d5761219c612b38565b5b0492506010810190505b6305f5e10083106121d0576305f5e10083816121c6576121c5612b38565b5b0492506008810190505b61271083106121f55761271083816121eb576121ea612b38565b5b0492506004810190505b60648310612218576064838161220e5761220d612b38565b5b0492506002810190505b600a8310612227576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61227981612244565b811461228457600080fd5b50565b60008135905061229681612270565b92915050565b6000602082840312156122b2576122b161223a565b5b60006122c084828501612287565b91505092915050565b60008115159050919050565b6122de816122c9565b82525050565b60006020820190506122f960008301846122d5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561233957808201518184015260208101905061231e565b60008484015250505050565b6000601f19601f8301169050919050565b6000612361826122ff565b61236b818561230a565b935061237b81856020860161231b565b61238481612345565b840191505092915050565b600060208201905081810360008301526123a98184612356565b905092915050565b6000819050919050565b6123c4816123b1565b81146123cf57600080fd5b50565b6000813590506123e1816123bb565b92915050565b6000602082840312156123fd576123fc61223a565b5b600061240b848285016123d2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061243f82612414565b9050919050565b61244f81612434565b82525050565b600060208201905061246a6000830184612446565b92915050565b61247981612434565b811461248457600080fd5b50565b60008135905061249681612470565b92915050565b600080604083850312156124b3576124b261223a565b5b60006124c185828601612487565b92505060206124d2858286016123d2565b9150509250929050565b6124e5816123b1565b82525050565b600060208201905061250060008301846124dc565b92915050565b60008060006060848603121561251f5761251e61223a565b5b600061252d86828701612487565b935050602061253e86828701612487565b925050604061254f868287016123d2565b9150509250925092565b600080604083850312156125705761256f61223a565b5b600061257e858286016123d2565b925050602061258f858286016123d2565b9150509250929050565b60006040820190506125ae6000830185612446565b6125bb60208301846124dc565b9392505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61260482612345565b810181811067ffffffffffffffff82111715612623576126226125cc565b5b80604052505050565b6000612636612230565b905061264282826125fb565b919050565b600067ffffffffffffffff821115612662576126616125cc565b5b61266b82612345565b9050602081019050919050565b82818337600083830152505050565b600061269a61269584612647565b61262c565b9050828152602081018484840111156126b6576126b56125c7565b5b6126c1848285612678565b509392505050565b600082601f8301126126de576126dd6125c2565b5b81356126ee848260208601612687565b91505092915050565b6000806040838503121561270e5761270d61223a565b5b600061271c858286016123d2565b925050602083013567ffffffffffffffff81111561273d5761273c61223f565b5b612749858286016126c9565b9150509250929050565b6000602082840312156127695761276861223a565b5b600061277784828501612487565b91505092915050565b612789816122c9565b811461279457600080fd5b50565b6000813590506127a681612780565b92915050565b600080604083850312156127c3576127c261223a565b5b60006127d185828601612487565b92505060206127e285828601612797565b9150509250929050565b60006bffffffffffffffffffffffff82169050919050565b61280d816127ec565b811461281857600080fd5b50565b60008135905061282a81612804565b92915050565b600080604083850312156128475761284661223a565b5b600061285585828601612487565b92505060206128668582860161281b565b9150509250929050565b600067ffffffffffffffff82111561288b5761288a6125cc565b5b61289482612345565b9050602081019050919050565b60006128b46128af84612870565b61262c565b9050828152602081018484840111156128d0576128cf6125c7565b5b6128db848285612678565b509392505050565b600082601f8301126128f8576128f76125c2565b5b81356129088482602086016128a1565b91505092915050565b6000806000806080858703121561292b5761292a61223a565b5b600061293987828801612487565b945050602061294a87828801612487565b935050604061295b878288016123d2565b925050606085013567ffffffffffffffff81111561297c5761297b61223f565b5b612988878288016128e3565b91505092959194509250565b600080604083850312156129ab576129aa61223a565b5b60006129b985828601612487565b925050602083013567ffffffffffffffff8111156129da576129d961223f565b5b6129e6858286016126c9565b9150509250929050565b60008060408385031215612a0757612a0661223a565b5b6000612a1585828601612487565b9250506020612a2685828601612487565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a7757607f821691505b602082108103612a8a57612a89612a30565b5b50919050565b6000606082019050612aa56000830186612446565b612ab260208301856124dc565b612abf6040830184612446565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b01826123b1565b9150612b0c836123b1565b9250828202612b1a816123b1565b91508282048414831517612b3157612b30612ac7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b72826123b1565b9150612b7d836123b1565b925082612b8d57612b8c612b38565b5b828204905092915050565b7f526f79616c74792070657263656e7461676520746f6f20686967680000000000600082015250565b6000612bce601b8361230a565b9150612bd982612b98565b602082019050919050565b60006020820190508181036000830152612bfd81612bc1565b9050919050565b7f416c6c20746f6b656e206d696e74656400000000000000000000000000000000600082015250565b6000612c3a60108361230a565b9150612c4582612c04565b602082019050919050565b60006020820190508181036000830152612c6981612c2d565b9050919050565b6000612c7b826123b1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612cad57612cac612ac7565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612d1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612cdd565b612d248683612cdd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612d61612d5c612d57846123b1565b612d3c565b6123b1565b9050919050565b6000819050919050565b612d7b83612d46565b612d8f612d8782612d68565b848454612cea565b825550505050565b600090565b612da4612d97565b612daf818484612d72565b505050565b5b81811015612dd357612dc8600082612d9c565b600181019050612db5565b5050565b601f821115612e1857612de981612cb8565b612df284612ccd565b81016020851015612e01578190505b612e15612e0d85612ccd565b830182612db4565b50505b505050565b600082821c905092915050565b6000612e3b60001984600802612e1d565b1980831691505092915050565b6000612e548383612e2a565b9150826002028217905092915050565b612e6d826122ff565b67ffffffffffffffff811115612e8657612e856125cc565b5b612e908254612a5f565b612e9b828285612dd7565b600060209050601f831160018114612ece5760008415612ebc578287015190505b612ec68582612e48565b865550612f2e565b601f198416612edc86612cb8565b60005b82811015612f0457848901518255600182019150602085019450602081019050612edf565b86831015612f215784890151612f1d601f891682612e2a565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b600082825260208201905092915050565b6000612f5d82612f36565b612f678185612f41565b9350612f7781856020860161231b565b612f8081612345565b840191505092915050565b6000608082019050612fa06000830187612446565b612fad6020830186612446565b612fba60408301856124dc565b8181036060830152612fcc8184612f52565b905095945050505050565b600081519050612fe681612270565b92915050565b6000602082840312156130025761300161223a565b5b600061301084828501612fd7565b91505092915050565b600081905092915050565b600061302f826122ff565b6130398185613019565b935061304981856020860161231b565b80840191505092915050565b60006130618285613024565b915061306d8284613024565b9150819050939250505056fea26469706673582212203f3537691fe6f624d258daa09f8b8e124207ee703684874cac6b4dd342b5672964736f6c634300081800330000000000000000000000006acee9f4d9cfd2307b1897ffcc62eedbf6d0ddf4
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063a22cb46511610097578063d0def52111610071578063d0def5211461047f578063d204c45e146104af578063e985e9c5146104cb578063f2fde38b146104fb576101a9565b8063a22cb46514610417578063b88d4fde14610433578063c87b56dd1461044f576101a9565b80638da5cb5b116100d35780638da5cb5b146103a35780638e6fcd32146103c15780638f2fc60b146103dd57806395d89b41146103f9576101a9565b806370a082311461035f578063715018a61461038f5780638456cb5914610399576101a9565b80632a55205a1161016657806342842e0e1161014057806342842e0e146102d9578063524cad98146102f55780635c975abb146103115780636352211e1461032f576101a9565b80632a55205a1461028257806334d1c641146102b35780633f4ba83a146102cf576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806318160ddd1461024857806323b872dd14610266575b600080fd5b6101c860048036038101906101c3919061229c565b610517565b6040516101d591906122e4565b60405180910390f35b6101e6610591565b6040516101f3919061238f565b60405180910390f35b610216600480360381019061021191906123e7565b610623565b6040516102239190612455565b60405180910390f35b6102466004803603810190610241919061249c565b61063f565b005b610250610655565b60405161025d91906124eb565b60405180910390f35b610280600480360381019061027b9190612506565b61065f565b005b61029c60048036038101906102979190612559565b610761565b6040516102aa929190612599565b60405180910390f35b6102cd60048036038101906102c891906126f7565b6107e7565b005b6102d76107fd565b005b6102f360048036038101906102ee9190612506565b61080f565b005b61030f600480360381019061030a9190612753565b61082f565b005b6103196108cd565b60405161032691906122e4565b60405180910390f35b610349600480360381019061034491906123e7565b6108e4565b6040516103569190612455565b60405180910390f35b61037960048036038101906103749190612753565b6108f6565b60405161038691906124eb565b60405180910390f35b6103976109b0565b005b6103a16109c4565b005b6103ab6109d6565b6040516103b89190612455565b60405180910390f35b6103db60048036038101906103d691906127ac565b610a00565b005b6103f760048036038101906103f29190612830565b610ab5565b005b610401610b94565b60405161040e919061238f565b60405180910390f35b610431600480360381019061042c91906127ac565b610c26565b005b61044d60048036038101906104489190612911565b610c3c565b005b610469600480360381019061046491906123e7565b610c59565b604051610476919061238f565b60405180910390f35b61049960048036038101906104949190612994565b610c6b565b6040516104a691906124eb565b60405180910390f35b6104c960048036038101906104c49190612994565b610d42565b005b6104e560048036038101906104e091906129f0565b610dcc565b6040516104f291906122e4565b60405180910390f35b61051560048036038101906105109190612753565b610e60565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061058a575061058982610ee6565b5b9050919050565b6060600080546105a090612a5f565b80601f01602080910402602001604051908101604052809291908181526020018280546105cc90612a5f565b80156106195780601f106105ee57610100808354040283529160200191610619565b820191906000526020600020905b8154815290600101906020018083116105fc57829003601f168201915b5050505050905090565b600061062e82610f47565b5061063882610fcf565b9050919050565b610651828261064c61100c565b611014565b5050565b6000600854905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106d15760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016106c89190612455565b60405180910390fd5b60006106e583836106e061100c565b61102e565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461075b578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161075293929190612a90565b60405180910390fd5b50505050565b60008060006127106bffffffffffffffffffffffff16600c60149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16856107ab9190612af6565b6107b59190612b67565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168192509250509250929050565b6107ef611248565b6107f982826112cf565b5050565b610805611248565b61080d61132b565b565b61082a83838360405180602001604052806000815250610c3c565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461088957600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760149054906101000a900460ff16905090565b60006108ef82610f47565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109695760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016109609190612455565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109b8611248565b6109c2600061138e565b565b6109cc611248565b6109d4611454565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a5a57600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610abd611248565b6127106bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1590612be4565b60405180910390fd5b80600c60146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b606060018054610ba390612a5f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcf90612a5f565b8015610c1c5780601f10610bf157610100808354040283529160200191610c1c565b820191906000526020600020905b815481529060010190602001808311610bff57829003601f168201915b5050505050905090565b610c38610c3161100c565b83836114b7565b5050565b610c4784848461065f565b610c53848484846114cf565b50505050565b6060610c6482611686565b9050919050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cc357600080fd5b600854600b5411610d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0090612c50565b60405180910390fd5b600060086000815480929190610d1e90612c70565b919050559050610d2e8482611799565b610d3881846112cf565b8091505092915050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d9857600080fd5b600060086000815480929190610dad90612c70565b919050559050610dbd8382611892565b610dc781836112cf565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e68611248565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eda5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610ed19190612455565b60405180910390fd5b610ee38161138e565b50565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f405750610f3f826118b0565b5b9050919050565b600080610f5383611992565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fc657826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610fbd91906124eb565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b61101c6119cf565b6110298383836001611a10565b505050565b60008061103a84611992565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461107c5761107b818486611bd5565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461110d576110be600085600080611a10565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611190576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b61125061100c565b73ffffffffffffffffffffffffffffffffffffffff1661126e6109d6565b73ffffffffffffffffffffffffffffffffffffffff16146112cd5761129161100c565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016112c49190612455565b60405180910390fd5b565b806006600084815260200190815260200160002090816112ef9190612e64565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce78260405161131f91906124eb565b60405180910390a15050565b611333611c99565b6000600760146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61137761100c565b6040516113849190612455565b60405180910390a1565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61145c6119cf565b6001600760146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114a061100c565b6040516114ad9190612455565b60405180910390a1565b6114bf6119cf565b6114ca838383611cd9565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611680578273ffffffffffffffffffffffffffffffffffffffff1663150b7a0261151361100c565b8685856040518563ffffffff1660e01b81526004016115359493929190612f8b565b6020604051808303816000875af192505050801561157157506040513d601f19601f8201168201806040525081019061156e9190612fec565b60015b6115f5573d80600081146115a1576040519150601f19603f3d011682016040523d82523d6000602084013e6115a6565b606091505b5060008151036115ed57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016115e49190612455565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461167e57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016116759190612455565b60405180910390fd5b505b50505050565b606061169182610f47565b5060006006600084815260200190815260200160002080546116b290612a5f565b80601f01602080910402602001604051908101604052809291908181526020018280546116de90612a5f565b801561172b5780601f106117005761010080835404028352916020019161172b565b820191906000526020600020905b81548152906001019060200180831161170e57829003601f168201915b50505050509050600061173c611e48565b90506000815103611751578192505050611794565b60008251111561178657808260405160200161176e929190613055565b60405160208183030381529060405292505050611794565b61178f84611e5f565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361180b5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016118029190612455565b60405180910390fd5b60006118198383600061102e565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461188d5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016118849190612455565b60405180910390fd5b505050565b6118ac828260405180602001604052806000815250611ec8565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061197b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061198b575061198a82611ee4565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6119d76108cd565b15611a0e576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b8080611a495750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611b7d576000611a5984610f47565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ac457508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611ad75750611ad58184610dcc565b155b15611b1957826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611b109190612455565b60405180910390fd5b8115611b7b57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611be0838383611f4e565b611c9457600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c5557806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611c4c91906124eb565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611c8b929190612599565b60405180910390fd5b505050565b611ca16108cd565b611cd7576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d4a57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611d419190612455565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e3b91906122e4565b60405180910390a3505050565b606060405180602001604052806000815250905090565b6060611e6a82610f47565b506000611e75611e48565b90506000815111611e955760405180602001604052806000815250611ec0565b80611e9f8461200f565b604051602001611eb0929190613055565b6040516020818303038152906040525b915050919050565b611ed28383611799565b611edf60008484846114cf565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200657508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fc75750611fc68484610dcc565b5b8061200557508273ffffffffffffffffffffffffffffffffffffffff16611fed83610fcf565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b60606000600161201e846120dd565b01905060008167ffffffffffffffff81111561203d5761203c6125cc565b5b6040519080825280601f01601f19166020018201604052801561206f5781602001600182028036833780820191505090505b509050600082602001820190505b6001156120d2578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120c6576120c5612b38565b5b0494506000850361207d575b819350505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061213b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161213157612130612b38565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612178576d04ee2d6d415b85acef8100000000838161216e5761216d612b38565b5b0492506020810190505b662386f26fc1000083106121a757662386f26fc10000838161219d5761219c612b38565b5b0492506010810190505b6305f5e10083106121d0576305f5e10083816121c6576121c5612b38565b5b0492506008810190505b61271083106121f55761271083816121eb576121ea612b38565b5b0492506004810190505b60648310612218576064838161220e5761220d612b38565b5b0492506002810190505b600a8310612227576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61227981612244565b811461228457600080fd5b50565b60008135905061229681612270565b92915050565b6000602082840312156122b2576122b161223a565b5b60006122c084828501612287565b91505092915050565b60008115159050919050565b6122de816122c9565b82525050565b60006020820190506122f960008301846122d5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561233957808201518184015260208101905061231e565b60008484015250505050565b6000601f19601f8301169050919050565b6000612361826122ff565b61236b818561230a565b935061237b81856020860161231b565b61238481612345565b840191505092915050565b600060208201905081810360008301526123a98184612356565b905092915050565b6000819050919050565b6123c4816123b1565b81146123cf57600080fd5b50565b6000813590506123e1816123bb565b92915050565b6000602082840312156123fd576123fc61223a565b5b600061240b848285016123d2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061243f82612414565b9050919050565b61244f81612434565b82525050565b600060208201905061246a6000830184612446565b92915050565b61247981612434565b811461248457600080fd5b50565b60008135905061249681612470565b92915050565b600080604083850312156124b3576124b261223a565b5b60006124c185828601612487565b92505060206124d2858286016123d2565b9150509250929050565b6124e5816123b1565b82525050565b600060208201905061250060008301846124dc565b92915050565b60008060006060848603121561251f5761251e61223a565b5b600061252d86828701612487565b935050602061253e86828701612487565b925050604061254f868287016123d2565b9150509250925092565b600080604083850312156125705761256f61223a565b5b600061257e858286016123d2565b925050602061258f858286016123d2565b9150509250929050565b60006040820190506125ae6000830185612446565b6125bb60208301846124dc565b9392505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61260482612345565b810181811067ffffffffffffffff82111715612623576126226125cc565b5b80604052505050565b6000612636612230565b905061264282826125fb565b919050565b600067ffffffffffffffff821115612662576126616125cc565b5b61266b82612345565b9050602081019050919050565b82818337600083830152505050565b600061269a61269584612647565b61262c565b9050828152602081018484840111156126b6576126b56125c7565b5b6126c1848285612678565b509392505050565b600082601f8301126126de576126dd6125c2565b5b81356126ee848260208601612687565b91505092915050565b6000806040838503121561270e5761270d61223a565b5b600061271c858286016123d2565b925050602083013567ffffffffffffffff81111561273d5761273c61223f565b5b612749858286016126c9565b9150509250929050565b6000602082840312156127695761276861223a565b5b600061277784828501612487565b91505092915050565b612789816122c9565b811461279457600080fd5b50565b6000813590506127a681612780565b92915050565b600080604083850312156127c3576127c261223a565b5b60006127d185828601612487565b92505060206127e285828601612797565b9150509250929050565b60006bffffffffffffffffffffffff82169050919050565b61280d816127ec565b811461281857600080fd5b50565b60008135905061282a81612804565b92915050565b600080604083850312156128475761284661223a565b5b600061285585828601612487565b92505060206128668582860161281b565b9150509250929050565b600067ffffffffffffffff82111561288b5761288a6125cc565b5b61289482612345565b9050602081019050919050565b60006128b46128af84612870565b61262c565b9050828152602081018484840111156128d0576128cf6125c7565b5b6128db848285612678565b509392505050565b600082601f8301126128f8576128f76125c2565b5b81356129088482602086016128a1565b91505092915050565b6000806000806080858703121561292b5761292a61223a565b5b600061293987828801612487565b945050602061294a87828801612487565b935050604061295b878288016123d2565b925050606085013567ffffffffffffffff81111561297c5761297b61223f565b5b612988878288016128e3565b91505092959194509250565b600080604083850312156129ab576129aa61223a565b5b60006129b985828601612487565b925050602083013567ffffffffffffffff8111156129da576129d961223f565b5b6129e6858286016126c9565b9150509250929050565b60008060408385031215612a0757612a0661223a565b5b6000612a1585828601612487565b9250506020612a2685828601612487565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a7757607f821691505b602082108103612a8a57612a89612a30565b5b50919050565b6000606082019050612aa56000830186612446565b612ab260208301856124dc565b612abf6040830184612446565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b01826123b1565b9150612b0c836123b1565b9250828202612b1a816123b1565b91508282048414831517612b3157612b30612ac7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b72826123b1565b9150612b7d836123b1565b925082612b8d57612b8c612b38565b5b828204905092915050565b7f526f79616c74792070657263656e7461676520746f6f20686967680000000000600082015250565b6000612bce601b8361230a565b9150612bd982612b98565b602082019050919050565b60006020820190508181036000830152612bfd81612bc1565b9050919050565b7f416c6c20746f6b656e206d696e74656400000000000000000000000000000000600082015250565b6000612c3a60108361230a565b9150612c4582612c04565b602082019050919050565b60006020820190508181036000830152612c6981612c2d565b9050919050565b6000612c7b826123b1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612cad57612cac612ac7565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612d1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612cdd565b612d248683612cdd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612d61612d5c612d57846123b1565b612d3c565b6123b1565b9050919050565b6000819050919050565b612d7b83612d46565b612d8f612d8782612d68565b848454612cea565b825550505050565b600090565b612da4612d97565b612daf818484612d72565b505050565b5b81811015612dd357612dc8600082612d9c565b600181019050612db5565b5050565b601f821115612e1857612de981612cb8565b612df284612ccd565b81016020851015612e01578190505b612e15612e0d85612ccd565b830182612db4565b50505b505050565b600082821c905092915050565b6000612e3b60001984600802612e1d565b1980831691505092915050565b6000612e548383612e2a565b9150826002028217905092915050565b612e6d826122ff565b67ffffffffffffffff811115612e8657612e856125cc565b5b612e908254612a5f565b612e9b828285612dd7565b600060209050601f831160018114612ece5760008415612ebc578287015190505b612ec68582612e48565b865550612f2e565b601f198416612edc86612cb8565b60005b82811015612f0457848901518255600182019150602085019450602081019050612edf565b86831015612f215784890151612f1d601f891682612e2a565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b600082825260208201905092915050565b6000612f5d82612f36565b612f678185612f41565b9350612f7781856020860161231b565b612f8081612345565b840191505092915050565b6000608082019050612fa06000830187612446565b612fad6020830186612446565b612fba60408301856124dc565b8181036060830152612fcc8184612f52565b905095945050505050565b600081519050612fe681612270565b92915050565b6000602082840312156130025761300161223a565b5b600061301084828501612fd7565b91505092915050565b600081905092915050565b600061302f826122ff565b6130398185613019565b935061304981856020860161231b565b80840191505092915050565b60006130618285613024565b915061306d8284613024565b9150819050939250505056fea26469706673582212203f3537691fe6f624d258daa09f8b8e124207ee703684874cac6b4dd342b5672964736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006acee9f4d9cfd2307b1897ffcc62eedbf6d0ddf4
-----Decoded View---------------
Arg [0] : initialOwner (address): 0x6acee9f4D9cfd2307b1897ffcc62eEDbf6D0DDf4
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006acee9f4d9cfd2307b1897ffcc62eedbf6d0ddf4
Deployed Bytecode Sourcemap
55218:3645:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58012:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31149:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32321:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32140:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57907:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32990:588;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58589:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;57488:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57063:65;;;:::i;:::-;;33649:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56862:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52685:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30962:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30687:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18258:103;;;:::i;:::-;;56994:61;;;:::i;:::-;;17583:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56715:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58276:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31309:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32551:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33854:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57693:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56199:308;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55981:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32768:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18516:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58012:250;58144:4;58188:26;58173:41;;;:11;:41;;;;:81;;;;58218:36;58242:11;58218:23;:36::i;:::-;58173:81;58166:88;;58012: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;57907:91::-;57951:7;57978:12;;57971:19;;57907: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;58589:265::-;58678:7;58687;58717:21;55684:5;58741:47;;58754:15;;;;;;;;;;;58742:27;;:9;:27;;;;:::i;:::-;58741:47;;;;:::i;:::-;58717:71;;58807:13;;;;;;;;;;;58822;58799:37;;;;;58589:265;;;;;:::o;57488:119::-;17469:13;:11;:13::i;:::-;57573:26:::1;57586:7;57595:3;57573:12;:26::i;:::-;57488:119:::0;;:::o;57063:65::-;17469:13;:11;:13::i;:::-;57110:10:::1;:8;:10::i;:::-;57063:65::o:0;33649:134::-;33736:39;33753:4;33759:2;33763:7;33736:39;;;;;;;;;;;;:16;:39::i;:::-;33649:134;;;:::o;56862:110::-;56675:11;;;;;;;;;;;56661:25;;:10;:25;;;56653:34;;;;;;56952:12:::1;56938:11;;:26;;;;;;;;;;;;;;;;;;56862:110:::0;:::o;52685:86::-;52732:4;52756:7;;;;;;;;;;;52749:14;;52685:86;:::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;56994:61::-;17469:13;:11;:13::i;:::-;57039:8:::1;:6;:8::i;:::-;56994:61::o:0;17583:87::-;17629:7;17656:6;;;;;;;;;;;17649:13;;17583:87;:::o;56715:139::-;56675:11;;;;;;;;;;;56661:25;;:10;:25;;;56653:34;;;;;;56838:8:::1;56804:19;:33;56824:12;56804:33;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;56715:139:::0;;:::o;58276:261::-;17469:13;:11;:13::i;:::-;55684:5:::1;58379:36;;:17;:36;;;;58371:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;58476:17;58458:15;;:35;;;;;;;;;;;;;;;;;;58520:9;58504:13;;:25;;;;;;;;;;;;;;;;;;58276:261:::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;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;57693:206::-;57820:13;57868:23;57883:7;57868:14;:23::i;:::-;57861:30;;57693:206;;;:::o;56199:308::-;56279:7;56562:19;:31;56582:10;56562:31;;;;;;;;;;;;;;;;;;;;;;;;;56554:40;;;;;;56322:12:::1;;56307;;:27;56299:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;56366:15;56384:12;;:14;;;;;;;;;:::i;:::-;;;;;56366:32;;56409:18;56415:2;56419:7;56409:5;:18::i;:::-;56438:26;56451:7;56460:3;56438:12;:26::i;:::-;56492:7;56485:14;;;56199:308:::0;;;;:::o;55981:210::-;56562:19;:31;56582:10;56562:31;;;;;;;;;;;;;;;;;;;;;;;;;56554:40;;;;;;56067:15:::1;56085:12;;:14;;;;;;;;;:::i;:::-;;;;;56067:32;;56110:22;56120:2;56124:7;56110:9;:22::i;:::-;56143:26;56156:7;56165:3;56143:12;:26::i;:::-;56056:135;55981:210:::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;57136:151::-;52266:19;:17;:19::i;:::-;57240:39:::1;57255:2;57259:7;57268:4;57274;57240:14;:39::i;:::-;57136:151:::0;;;:::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;53634:120::-;52543:16;:14;:16::i;:::-;53703:5:::1;53693:7;;:15;;;;;;;;;;;;;;;;;;53724:22;53733:12;:10;:12::i;:::-;53724:22;;;;;;:::i;:::-;;;;;;;;53634:120::o:0;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;53357:118::-;52266:19;:17;:19::i;:::-;53427:4:::1;53417:7;;:14;;;;;;;;;;;;;;;;;;53447:20;53454:12;:10;:12::i;:::-;53447:20;;;;;;:::i;:::-;;;;;;;;53357:118::o:0;57295:179::-;52266:19;:17;:19::i;:::-;57415:51:::1;57440:5;57447:8;57457;57415:24;:51::i;:::-;57295:179:::0;;;:::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;52850:132::-;52916:8;:6;:8::i;:::-;52912:63;;;52948:15;;;;;;;;;;;;;;52912:63;52850:132::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;53065:130::-;53129:8;:6;:8::i;:::-;53124:64;;53161:15;;;;;;;;;;;;;;53124:64;53065:130::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;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:116::-;9861:21;9876:5;9861:21;:::i;:::-;9854:5;9851:32;9841:60;;9897:1;9894;9887:12;9841:60;9791:116;:::o;9913:133::-;9956:5;9994:6;9981:20;9972:29;;10010:30;10034:5;10010:30;:::i;:::-;9913:133;;;;:::o;10052:468::-;10117:6;10125;10174:2;10162:9;10153:7;10149:23;10145:32;10142:119;;;10180:79;;:::i;:::-;10142:119;10300:1;10325:53;10370:7;10361:6;10350:9;10346:22;10325:53;:::i;:::-;10315:63;;10271:117;10427:2;10453:50;10495:7;10486:6;10475:9;10471:22;10453:50;:::i;:::-;10443:60;;10398:115;10052:468;;;;;:::o;10526:109::-;10562:7;10602:26;10595:5;10591:38;10580:49;;10526:109;;;:::o;10641:120::-;10713:23;10730:5;10713:23;:::i;:::-;10706:5;10703:34;10693:62;;10751:1;10748;10741:12;10693:62;10641:120;:::o;10767:137::-;10812:5;10850:6;10837:20;10828:29;;10866:32;10892:5;10866:32;:::i;:::-;10767:137;;;;:::o;10910:472::-;10977:6;10985;11034:2;11022:9;11013:7;11009:23;11005:32;11002:119;;;11040:79;;:::i;:::-;11002:119;11160:1;11185:53;11230:7;11221:6;11210:9;11206:22;11185:53;:::i;:::-;11175:63;;11131:117;11287:2;11313:52;11357:7;11348:6;11337:9;11333:22;11313:52;:::i;:::-;11303:62;;11258:117;10910:472;;;;;:::o;11388:307::-;11449:4;11539:18;11531:6;11528:30;11525:56;;;11561:18;;:::i;:::-;11525:56;11599:29;11621:6;11599:29;:::i;:::-;11591:37;;11683:4;11677;11673:15;11665:23;;11388:307;;;:::o;11701:423::-;11778:5;11803:65;11819:48;11860:6;11819:48;:::i;:::-;11803:65;:::i;:::-;11794:74;;11891:6;11884:5;11877:21;11929:4;11922:5;11918:16;11967:3;11958:6;11953:3;11949:16;11946:25;11943:112;;;11974:79;;:::i;:::-;11943:112;12064:54;12111:6;12106:3;12101;12064:54;:::i;:::-;11784:340;11701:423;;;;;:::o;12143:338::-;12198:5;12247:3;12240:4;12232:6;12228:17;12224:27;12214:122;;12255:79;;:::i;:::-;12214:122;12372:6;12359:20;12397:78;12471:3;12463:6;12456:4;12448:6;12444:17;12397:78;:::i;:::-;12388:87;;12204:277;12143:338;;;;:::o;12487:943::-;12582:6;12590;12598;12606;12655:3;12643:9;12634:7;12630:23;12626:33;12623:120;;;12662:79;;:::i;:::-;12623:120;12782:1;12807:53;12852:7;12843:6;12832:9;12828:22;12807:53;:::i;:::-;12797:63;;12753:117;12909:2;12935:53;12980:7;12971:6;12960:9;12956:22;12935:53;:::i;:::-;12925:63;;12880:118;13037:2;13063:53;13108:7;13099:6;13088:9;13084:22;13063:53;:::i;:::-;13053:63;;13008:118;13193:2;13182:9;13178:18;13165:32;13224:18;13216:6;13213:30;13210:117;;;13246:79;;:::i;:::-;13210:117;13351:62;13405:7;13396:6;13385:9;13381:22;13351:62;:::i;:::-;13341:72;;13136:287;12487:943;;;;;;;:::o;13436:654::-;13514:6;13522;13571:2;13559:9;13550:7;13546:23;13542:32;13539:119;;;13577:79;;:::i;:::-;13539:119;13697:1;13722:53;13767:7;13758:6;13747:9;13743:22;13722:53;:::i;:::-;13712:63;;13668:117;13852:2;13841:9;13837:18;13824:32;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;;13795:288;13436:654;;;;;:::o;14096:474::-;14164:6;14172;14221:2;14209:9;14200:7;14196:23;14192:32;14189:119;;;14227:79;;:::i;:::-;14189:119;14347:1;14372:53;14417:7;14408:6;14397:9;14393:22;14372:53;:::i;:::-;14362:63;;14318:117;14474:2;14500:53;14545:7;14536:6;14525:9;14521:22;14500:53;:::i;:::-;14490:63;;14445:118;14096:474;;;;;:::o;14576:180::-;14624:77;14621:1;14614:88;14721:4;14718:1;14711:15;14745:4;14742:1;14735:15;14762:320;14806:6;14843:1;14837:4;14833:12;14823:22;;14890:1;14884:4;14880:12;14911:18;14901:81;;14967:4;14959:6;14955:17;14945:27;;14901:81;15029:2;15021:6;15018:14;14998:18;14995:38;14992:84;;15048:18;;:::i;:::-;14992:84;14813:269;14762:320;;;:::o;15088:442::-;15237:4;15275:2;15264:9;15260:18;15252:26;;15288:71;15356:1;15345:9;15341:17;15332:6;15288:71;:::i;:::-;15369:72;15437:2;15426:9;15422:18;15413:6;15369:72;:::i;:::-;15451;15519:2;15508:9;15504:18;15495:6;15451:72;:::i;:::-;15088:442;;;;;;:::o;15536:180::-;15584:77;15581:1;15574:88;15681:4;15678:1;15671:15;15705:4;15702:1;15695:15;15722:410;15762:7;15785:20;15803:1;15785:20;:::i;:::-;15780:25;;15819:20;15837:1;15819:20;:::i;:::-;15814:25;;15874:1;15871;15867:9;15896:30;15914:11;15896:30;:::i;:::-;15885:41;;16075:1;16066:7;16062:15;16059:1;16056:22;16036:1;16029:9;16009:83;15986:139;;16105:18;;:::i;:::-;15986:139;15770:362;15722:410;;;;:::o;16138:180::-;16186:77;16183:1;16176:88;16283:4;16280:1;16273:15;16307:4;16304:1;16297:15;16324:185;16364:1;16381:20;16399:1;16381:20;:::i;:::-;16376:25;;16415:20;16433:1;16415:20;:::i;:::-;16410:25;;16454:1;16444:35;;16459:18;;:::i;:::-;16444:35;16501:1;16498;16494:9;16489:14;;16324:185;;;;:::o;16515:177::-;16655:29;16651:1;16643:6;16639:14;16632:53;16515:177;:::o;16698:366::-;16840:3;16861:67;16925:2;16920:3;16861:67;:::i;:::-;16854:74;;16937:93;17026:3;16937:93;:::i;:::-;17055:2;17050:3;17046:12;17039:19;;16698:366;;;:::o;17070:419::-;17236:4;17274:2;17263:9;17259:18;17251:26;;17323:9;17317:4;17313:20;17309:1;17298:9;17294:17;17287:47;17351:131;17477:4;17351:131;:::i;:::-;17343:139;;17070:419;;;:::o;17495:166::-;17635:18;17631:1;17623:6;17619:14;17612:42;17495:166;:::o;17667:366::-;17809:3;17830:67;17894:2;17889:3;17830:67;:::i;:::-;17823:74;;17906:93;17995:3;17906:93;:::i;:::-;18024:2;18019:3;18015:12;18008:19;;17667:366;;;:::o;18039:419::-;18205:4;18243:2;18232:9;18228:18;18220:26;;18292:9;18286:4;18282:20;18278:1;18267:9;18263:17;18256:47;18320:131;18446:4;18320:131;:::i;:::-;18312:139;;18039:419;;;:::o;18464:233::-;18503:3;18526:24;18544:5;18526:24;:::i;:::-;18517:33;;18572:66;18565:5;18562:77;18559:103;;18642:18;;:::i;:::-;18559:103;18689:1;18682:5;18678:13;18671:20;;18464:233;;;:::o;18703:141::-;18752:4;18775:3;18767:11;;18798:3;18795:1;18788:14;18832:4;18829:1;18819:18;18811:26;;18703:141;;;:::o;18850:93::-;18887:6;18934:2;18929;18922:5;18918:14;18914:23;18904:33;;18850:93;;;:::o;18949:107::-;18993:8;19043:5;19037:4;19033:16;19012:37;;18949:107;;;;:::o;19062:393::-;19131:6;19181:1;19169:10;19165:18;19204:97;19234:66;19223:9;19204:97;:::i;:::-;19322:39;19352:8;19341:9;19322:39;:::i;:::-;19310:51;;19394:4;19390:9;19383:5;19379:21;19370:30;;19443:4;19433:8;19429:19;19422:5;19419:30;19409:40;;19138:317;;19062:393;;;;;:::o;19461:60::-;19489:3;19510:5;19503:12;;19461:60;;;:::o;19527:142::-;19577:9;19610:53;19628:34;19637:24;19655:5;19637:24;:::i;:::-;19628:34;:::i;:::-;19610:53;:::i;:::-;19597:66;;19527:142;;;:::o;19675:75::-;19718:3;19739:5;19732:12;;19675:75;;;:::o;19756:269::-;19866:39;19897:7;19866:39;:::i;:::-;19927:91;19976:41;20000:16;19976:41;:::i;:::-;19968:6;19961:4;19955:11;19927:91;:::i;:::-;19921:4;19914:105;19832:193;19756:269;;;:::o;20031:73::-;20076:3;20031:73;:::o;20110:189::-;20187:32;;:::i;:::-;20228:65;20286:6;20278;20272:4;20228:65;:::i;:::-;20163:136;20110:189;;:::o;20305:186::-;20365:120;20382:3;20375:5;20372:14;20365:120;;;20436:39;20473:1;20466:5;20436:39;:::i;:::-;20409:1;20402:5;20398:13;20389:22;;20365:120;;;20305:186;;:::o;20497:543::-;20598:2;20593:3;20590:11;20587:446;;;20632:38;20664:5;20632:38;:::i;:::-;20716:29;20734:10;20716:29;:::i;:::-;20706:8;20702:44;20899:2;20887:10;20884:18;20881:49;;;20920:8;20905:23;;20881:49;20943:80;20999:22;21017:3;20999:22;:::i;:::-;20989:8;20985:37;20972:11;20943:80;:::i;:::-;20602:431;;20587:446;20497:543;;;:::o;21046:117::-;21100:8;21150:5;21144:4;21140:16;21119:37;;21046:117;;;;:::o;21169:169::-;21213:6;21246:51;21294:1;21290:6;21282:5;21279:1;21275:13;21246:51;:::i;:::-;21242:56;21327:4;21321;21317:15;21307:25;;21220:118;21169:169;;;;:::o;21343:295::-;21419:4;21565:29;21590:3;21584:4;21565:29;:::i;:::-;21557:37;;21627:3;21624:1;21620:11;21614:4;21611:21;21603:29;;21343:295;;;;:::o;21643:1395::-;21760:37;21793:3;21760:37;:::i;:::-;21862:18;21854:6;21851:30;21848:56;;;21884:18;;:::i;:::-;21848:56;21928:38;21960:4;21954:11;21928:38;:::i;:::-;22013:67;22073:6;22065;22059:4;22013:67;:::i;:::-;22107:1;22131:4;22118:17;;22163:2;22155:6;22152:14;22180:1;22175:618;;;;22837:1;22854:6;22851:77;;;22903:9;22898:3;22894:19;22888:26;22879:35;;22851:77;22954:67;23014:6;23007:5;22954:67;:::i;:::-;22948:4;22941:81;22810:222;22145:887;;22175:618;22227:4;22223:9;22215:6;22211:22;22261:37;22293:4;22261:37;:::i;:::-;22320:1;22334:208;22348:7;22345:1;22342:14;22334:208;;;22427:9;22422:3;22418:19;22412:26;22404:6;22397:42;22478:1;22470:6;22466:14;22456:24;;22525:2;22514:9;22510:18;22497:31;;22371:4;22368:1;22364:12;22359:17;;22334:208;;;22570:6;22561:7;22558:19;22555:179;;;22628:9;22623:3;22619:19;22613:26;22671:48;22713:4;22705:6;22701:17;22690:9;22671:48;:::i;:::-;22663:6;22656:64;22578:156;22555:179;22780:1;22776;22768:6;22764:14;22760:22;22754:4;22747:36;22182:611;;;22145:887;;21735:1303;;;21643:1395;;:::o;23044:98::-;23095:6;23129:5;23123:12;23113:22;;23044:98;;;:::o;23148:168::-;23231:11;23265:6;23260:3;23253:19;23305:4;23300:3;23296:14;23281:29;;23148:168;;;;:::o;23322:373::-;23408:3;23436:38;23468:5;23436:38;:::i;:::-;23490:70;23553:6;23548:3;23490:70;:::i;:::-;23483:77;;23569:65;23627:6;23622:3;23615:4;23608:5;23604:16;23569:65;:::i;:::-;23659:29;23681:6;23659:29;:::i;:::-;23654:3;23650:39;23643:46;;23412:283;23322:373;;;;:::o;23701:640::-;23896:4;23934:3;23923:9;23919:19;23911:27;;23948:71;24016:1;24005:9;24001:17;23992:6;23948:71;:::i;:::-;24029:72;24097:2;24086:9;24082:18;24073:6;24029:72;:::i;:::-;24111;24179:2;24168:9;24164:18;24155:6;24111:72;:::i;:::-;24230:9;24224:4;24220:20;24215:2;24204:9;24200:18;24193:48;24258:76;24329:4;24320:6;24258:76;:::i;:::-;24250:84;;23701:640;;;;;;;:::o;24347:141::-;24403:5;24434:6;24428:13;24419:22;;24450:32;24476:5;24450:32;:::i;:::-;24347:141;;;;:::o;24494:349::-;24563:6;24612:2;24600:9;24591:7;24587:23;24583:32;24580:119;;;24618:79;;:::i;:::-;24580:119;24738:1;24763:63;24818:7;24809:6;24798:9;24794:22;24763:63;:::i;:::-;24753:73;;24709:127;24494:349;;;;:::o;24849:148::-;24951:11;24988:3;24973:18;;24849:148;;;;:::o;25003:390::-;25109:3;25137:39;25170:5;25137:39;:::i;:::-;25192:89;25274:6;25269:3;25192:89;:::i;:::-;25185:96;;25290:65;25348:6;25343:3;25336:4;25329:5;25325:16;25290:65;:::i;:::-;25380:6;25375:3;25371:16;25364:23;;25113:280;25003:390;;;;:::o;25399:435::-;25579:3;25601:95;25692:3;25683:6;25601:95;:::i;:::-;25594:102;;25713:95;25804:3;25795:6;25713:95;:::i;:::-;25706:102;;25825:3;25818:10;;25399:435;;;;;:::o
Swarm Source
ipfs://3f3537691fe6f624d258daa09f8b8e124207ee703684874cac6b4dd342b56729
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.