ERC-721
Overview
Max Total Supply
113 AiCloneX
Holders
40
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 AiCloneXLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AiCloneX
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-02 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/LowGas.sol pragma solidity >=0.7.0 <0.9.0; contract AiCloneX is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public cost = 0 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmountPerTx = 3; uint256 public WLmaxLimitPerWallet = 20; mapping(address => uint256) public WLwalletMints; bool public paused = true; bool public revealed = false; bool public dynamicCost = true; bool public dynamicMintAmount = true; constructor() ERC721("Ai CloneX", "AiCloneX") { setHiddenMetadataUri("ipfs://QmYKZ6ZopnqCE9AKiGoKoAqsPwQApfENV5tpqQQxmZi6Qf/hidden.json"); } function changeMaxMintAmountPerTx(uint256 _supply) public returns (uint256 _maxMintAmountPerTx){ if (dynamicMintAmount == false) { return maxMintAmountPerTx; } if(_supply <= 1000) { maxMintAmountPerTx = 3; return maxMintAmountPerTx; } if(_supply <= maxSupply) { maxMintAmountPerTx = 20; return maxMintAmountPerTx; } } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= changeMaxMintAmountPerTx(totalSupply()), "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); require(WLwalletMints[msg.sender] + _mintAmount <= WLmaxLimitPerWallet, "Max mint per WL wallet exceeded!" ); WLwalletMints[msg.sender] += _mintAmount; _; } function totalSupply() public view returns (uint256) { return supply.current(); } function changeCost(uint256 _supply) internal returns(uint256 _cost) { if(_supply <= 1000) { cost = 0; return cost; } if(_supply <= 2000) { cost = 1000000000000000; return cost; } if(_supply <= maxSupply) { cost = 5000000000000000; return cost; } } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "The contract is paused!"); if (dynamicCost == true){ require(msg.value >= changeCost(totalSupply())* _mintAmount, "Insufficient funds!"); }else { require(msg.value >= cost * _mintAmount, "Insufficient funds!"); } _mintLoop(msg.sender, _mintAmount); changeCost(totalSupply()); changeMaxMintAmountPerTx(totalSupply()); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setWLmaxLimitPerWallet(uint256 _WLmaxLimitPerWallet) public onlyOwner { WLmaxLimitPerWallet = _WLmaxLimitPerWallet; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function setDynamicMintAmount(bool _state) public onlyOwner { dynamicMintAmount = _state; } function setDynamicCost(bool _state) public onlyOwner { changeCost(totalSupply()); dynamicCost = _state; } function withdraw() public onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"WLmaxLimitPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"WLwalletMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"changeMaxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicCost","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicMintAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setDynamicCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setDynamicMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_WLmaxLimitPerWallet","type":"uint256"}],"name":"setWLmaxLimitPerWallet","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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b9160089162000209565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a9160099162000209565b506000600b55612710600c556003600d556014600e556010805463ffffffff191663010100011790553480156200008057600080fd5b506040805180820182526009815268082d24086d8dedccab60bb1b602080830191825283518085019094526008845267082d286d8dedccab60c31b908401528151919291620000d29160009162000209565b508051620000e890600190602084019062000209565b50505062000105620000ff6200012f60201b60201c565b62000133565b62000129604051806080016040528060418152602001620027d56041913962000185565b620002eb565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200018f620001a8565b8051620001a490600a90602084019062000209565b5050565b6006546001600160a01b03163314620002075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b8280546200021790620002af565b90600052602060002090601f0160209004810192826200023b576000855562000286565b82601f106200025657805160ff191683800117855562000286565b8280016001018555821562000286579182015b828111156200028657825182559160200191906001019062000269565b506200029492915062000298565b5090565b5b8082111562000294576000815560010162000299565b600181811c90821680620002c457607f821691505b602082108103620002e557634e487b7160e01b600052602260045260246000fd5b50919050565b6124da80620002fb6000396000f3fe6080604052600436106102675760003560e01c806362b99ad411610144578063a5bc5c3f116100b6578063d5abeb011161007a578063d5abeb0114610705578063e0a808531461071b578063e25aac4a1461073b578063e985e9c51461075b578063efbd73f4146107a4578063f2fde38b146107c457600080fd5b8063a5bc5c3f14610665578063b071401b14610685578063b88d4fde146106a5578063be745f77146106c5578063c87b56dd146106e557600080fd5b80638da5cb5b116101085780638da5cb5b146105d457806394354fd0146105f257806395d89b4114610608578063a0712d681461061d578063a22cb46514610630578063a45ba8e71461065057600080fd5b806362b99ad41461054a5780636352211e1461055f57806370a082311461057f578063715018a61461059f5780637ec4a659146105b457600080fd5b806328fa79a0116101dd5780634985304e116101a15780634985304e146104a65780634fdd43cb146104bc57806351830227146104dc578063541c6a47146104fb5780635503a0e81461051b5780635c975abb1461053057600080fd5b806328fa79a0146104035780633ccfd60b1461042457806342842e0e14610439578063438b63001461045957806344a0d68a1461048657600080fd5b8063095ea7b31161022f578063095ea7b31461035857806313faede61461037857806316ba10e01461038e57806316c38b3c146103ae57806318160ddd146103ce57806323b872dd146103e357600080fd5b806301ffc9a71461026c57806305e74568146102a157806306fdde03146102dc57806307f3ef71146102fe578063081812fc14610320575b600080fd5b34801561027857600080fd5b5061028c610287366004611e63565b6107e4565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102ce6102bc366004611e97565b600f6020526000908152604090205481565b604051908152602001610298565b3480156102e857600080fd5b506102f1610836565b6040516102989190611f0a565b34801561030a57600080fd5b5061031e610319366004611f1d565b6108c8565b005b34801561032c57600080fd5b5061034061033b366004611f1d565b6108d5565b6040516001600160a01b039091168152602001610298565b34801561036457600080fd5b5061031e610373366004611f36565b6108fc565b34801561038457600080fd5b506102ce600b5481565b34801561039a57600080fd5b5061031e6103a9366004611fec565b610a16565b3480156103ba57600080fd5b5061031e6103c9366004612045565b610a35565b3480156103da57600080fd5b506102ce610a50565b3480156103ef57600080fd5b5061031e6103fe366004612060565b610a60565b34801561040f57600080fd5b5060105461028c906301000000900460ff1681565b34801561043057600080fd5b5061031e610a91565b34801561044557600080fd5b5061031e610454366004612060565b610b0d565b34801561046557600080fd5b50610479610474366004611e97565b610b28565b604051610298919061209c565b34801561049257600080fd5b5061031e6104a1366004611f1d565b610c08565b3480156104b257600080fd5b506102ce600e5481565b3480156104c857600080fd5b5061031e6104d7366004611fec565b610c15565b3480156104e857600080fd5b5060105461028c90610100900460ff1681565b34801561050757600080fd5b5061031e610516366004612045565b610c30565b34801561052757600080fd5b506102f1610c65565b34801561053c57600080fd5b5060105461028c9060ff1681565b34801561055657600080fd5b506102f1610cf3565b34801561056b57600080fd5b5061034061057a366004611f1d565b610d00565b34801561058b57600080fd5b506102ce61059a366004611e97565b610d60565b3480156105ab57600080fd5b5061031e610de6565b3480156105c057600080fd5b5061031e6105cf366004611fec565b610dfa565b3480156105e057600080fd5b506006546001600160a01b0316610340565b3480156105fe57600080fd5b506102ce600d5481565b34801561061457600080fd5b506102f1610e15565b61031e61062b366004611f1d565b610e24565b34801561063c57600080fd5b5061031e61064b3660046120e0565b6110aa565b34801561065c57600080fd5b506102f16110b5565b34801561067157600080fd5b5061031e610680366004612045565b6110c2565b34801561069157600080fd5b5061031e6106a0366004611f1d565b6110e8565b3480156106b157600080fd5b5061031e6106c0366004612113565b6110f5565b3480156106d157600080fd5b5060105461028c9062010000900460ff1681565b3480156106f157600080fd5b506102f1610700366004611f1d565b61112d565b34801561071157600080fd5b506102ce600c5481565b34801561072757600080fd5b5061031e610736366004612045565b6112b1565b34801561074757600080fd5b506102ce610756366004611f1d565b6112d3565b34801561076757600080fd5b5061028c61077636600461218f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107b057600080fd5b5061031e6107bf3660046121b9565b611322565b3480156107d057600080fd5b5061031e6107df366004611e97565b61147f565b60006001600160e01b031982166380ac58cd60e01b148061081557506001600160e01b03198216635b5e139f60e01b145b8061083057506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008054610845906121dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610871906121dc565b80156108be5780601f10610893576101008083540402835291602001916108be565b820191906000526020600020905b8154815290600101906020018083116108a157829003601f168201915b5050505050905090565b6108d06114f5565b600e55565b60006108e08261154f565b506000908152600460205260409020546001600160a01b031690565b600061090782610d00565b9050806001600160a01b0316836001600160a01b0316036109795760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061099557506109958133610776565b610a075760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610970565b610a1183836115ae565b505050565b610a1e6114f5565b8051610a31906009906020840190611db4565b5050565b610a3d6114f5565b6010805460ff1916911515919091179055565b6000610a5b60075490565b905090565b610a6a338261161c565b610a865760405162461bcd60e51b815260040161097090612216565b610a1183838361169b565b610a996114f5565b6000610aad6006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610af7576040519150601f19603f3d011682016040523d82523d6000602084013e610afc565b606091505b5050905080610b0a57600080fd5b50565b610a11838383604051806020016040528060008152506110f5565b60606000610b3583610d60565b905060008167ffffffffffffffff811115610b5257610b52611f60565b604051908082528060200260200182016040528015610b7b578160200160208202803683370190505b509050600160005b8381108015610b945750600c548211155b15610bfe576000610ba483610d00565b9050866001600160a01b0316816001600160a01b031603610beb5782848381518110610bd257610bd2612264565b602090810291909101015281610be781612290565b9250505b82610bf581612290565b93505050610b83565b5090949350505050565b610c106114f5565b600b55565b610c1d6114f5565b8051610a3190600a906020840190611db4565b610c386114f5565b610c48610c43610a50565b611837565b5060108054911515620100000262ff000019909216919091179055565b60098054610c72906121dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e906121dc565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b505050505081565b60088054610c72906121dc565b6000818152600260205260408120546001600160a01b0316806108305760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610970565b60006001600160a01b038216610dca5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610970565b506001600160a01b031660009081526003602052604090205490565b610dee6114f5565b610df86000611884565b565b610e026114f5565b8051610a31906008906020840190611db4565b606060018054610845906121dc565b80600081118015610e3f5750610e3b610756610a50565b8111155b610e825760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610970565b600c5481610e8f60075490565b610e9991906122a9565b1115610ede5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610970565b600e54336000908152600f6020526040902054610efc9083906122a9565b1115610f4a5760405162461bcd60e51b815260206004820181905260248201527f4d6178206d696e742070657220574c2077616c6c6574206578636565646564216044820152606401610970565b336000908152600f602052604081208054839290610f699084906122a9565b909155505060105460ff1615610fc15760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610970565b60105462010000900460ff1615156001036110365781610fe2610c43610a50565b610fec91906122c1565b3410156110315760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610970565b611089565b81600b5461104491906122c1565b3410156110895760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610970565b61109333836118d6565b61109e610c43610a50565b50610a11610756610a50565b610a31338383611913565b600a8054610c72906121dc565b6110ca6114f5565b6010805491151563010000000263ff00000019909216919091179055565b6110f06114f5565b600d55565b6110ff338361161c565b61111b5760405162461bcd60e51b815260040161097090612216565b611127848484846119e1565b50505050565b6000818152600260205260409020546060906001600160a01b03166111ac5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610970565b601054610100900460ff16151560000361125257600a80546111cd906121dc565b80601f01602080910402602001604051908101604052809291908181526020018280546111f9906121dc565b80156112465780601f1061121b57610100808354040283529160200191611246565b820191906000526020600020905b81548152906001019060200180831161122957829003601f168201915b50505050509050919050565b600061125c611a14565b9050600081511161127c57604051806020016040528060008152506112aa565b8061128684611a23565b600960405160200161129a939291906122e0565b6040516020818303038152906040525b9392505050565b6112b96114f5565b601080549115156101000261ff0019909216919091179055565b6010546000906301000000900460ff16151581036112f3575050600d5490565b6103e882116113085750506003600d81905590565b600c54821161131d5750506014600d81905590565b919050565b8160008111801561133d5750611339610756610a50565b8111155b6113805760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610970565b600c548161138d60075490565b61139791906122a9565b11156113dc5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610970565b600e54336000908152600f60205260409020546113fa9083906122a9565b11156114485760405162461bcd60e51b815260206004820181905260248201527f4d6178206d696e742070657220574c2077616c6c6574206578636565646564216044820152606401610970565b336000908152600f6020526040812080548392906114679084906122a9565b9091555061147590506114f5565b610a1182846118d6565b6114876114f5565b6001600160a01b0381166114ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610970565b610b0a81611884565b6006546001600160a01b03163314610df85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610970565b6000818152600260205260409020546001600160a01b0316610b0a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610970565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115e382610d00565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061162883610d00565b9050806001600160a01b0316846001600160a01b0316148061166f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806116935750836001600160a01b0316611688846108d5565b6001600160a01b0316145b949350505050565b826001600160a01b03166116ae82610d00565b6001600160a01b0316146117125760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610970565b6001600160a01b0382166117745760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610970565b61177f6000826115ae565b6001600160a01b03831660009081526003602052604081208054600192906117a89084906123a3565b90915550506001600160a01b03821660009081526003602052604081208054600192906117d69084906122a9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006103e8821161184e5750506000600b81905590565b6107d0821161186957505066038d7ea4c68000600b81905590565b600c54821161131d5750506611c37937e08000600b81905590565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b81811015610a11576118ef600780546001019055565b611901836118fc60075490565b611b24565b8061190b81612290565b9150506118d9565b816001600160a01b0316836001600160a01b0316036119745760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610970565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6119ec84848461169b565b6119f884848484611b3e565b6111275760405162461bcd60e51b8152600401610970906123ba565b606060088054610845906121dc565b606081600003611a4a5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a745780611a5e81612290565b9150611a6d9050600a83612422565b9150611a4e565b60008167ffffffffffffffff811115611a8f57611a8f611f60565b6040519080825280601f01601f191660200182016040528015611ab9576020820181803683370190505b5090505b841561169357611ace6001836123a3565b9150611adb600a86612436565b611ae69060306122a9565b60f81b818381518110611afb57611afb612264565b60200101906001600160f81b031916908160001a905350611b1d600a86612422565b9450611abd565b610a31828260405180602001604052806000815250611c3f565b60006001600160a01b0384163b15611c3457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b8290339089908890889060040161244a565b6020604051808303816000875af1925050508015611bbd575060408051601f3d908101601f19168201909252611bba91810190612487565b60015b611c1a573d808015611beb576040519150601f19603f3d011682016040523d82523d6000602084013e611bf0565b606091505b508051600003611c125760405162461bcd60e51b8152600401610970906123ba565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611693565b506001949350505050565b611c498383611c72565b611c566000848484611b3e565b610a115760405162461bcd60e51b8152600401610970906123ba565b6001600160a01b038216611cc85760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610970565b6000818152600260205260409020546001600160a01b031615611d2d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610970565b6001600160a01b0382166000908152600360205260408120805460019290611d569084906122a9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611dc0906121dc565b90600052602060002090601f016020900481019282611de25760008555611e28565b82601f10611dfb57805160ff1916838001178555611e28565b82800160010185558215611e28579182015b82811115611e28578251825591602001919060010190611e0d565b50611e34929150611e38565b5090565b5b80821115611e345760008155600101611e39565b6001600160e01b031981168114610b0a57600080fd5b600060208284031215611e7557600080fd5b81356112aa81611e4d565b80356001600160a01b038116811461131d57600080fd5b600060208284031215611ea957600080fd5b6112aa82611e80565b60005b83811015611ecd578181015183820152602001611eb5565b838111156111275750506000910152565b60008151808452611ef6816020860160208601611eb2565b601f01601f19169290920160200192915050565b6020815260006112aa6020830184611ede565b600060208284031215611f2f57600080fd5b5035919050565b60008060408385031215611f4957600080fd5b611f5283611e80565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611f9157611f91611f60565b604051601f8501601f19908116603f01168101908282118183101715611fb957611fb9611f60565b81604052809350858152868686011115611fd257600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611ffe57600080fd5b813567ffffffffffffffff81111561201557600080fd5b8201601f8101841361202657600080fd5b61169384823560208401611f76565b8035801515811461131d57600080fd5b60006020828403121561205757600080fd5b6112aa82612035565b60008060006060848603121561207557600080fd5b61207e84611e80565b925061208c60208501611e80565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b818110156120d4578351835292840192918401916001016120b8565b50909695505050505050565b600080604083850312156120f357600080fd5b6120fc83611e80565b915061210a60208401612035565b90509250929050565b6000806000806080858703121561212957600080fd5b61213285611e80565b935061214060208601611e80565b925060408501359150606085013567ffffffffffffffff81111561216357600080fd5b8501601f8101871361217457600080fd5b61218387823560208401611f76565b91505092959194509250565b600080604083850312156121a257600080fd5b6121ab83611e80565b915061210a60208401611e80565b600080604083850312156121cc57600080fd5b8235915061210a60208401611e80565b600181811c908216806121f057607f821691505b60208210810361221057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016122a2576122a261227a565b5060010190565b600082198211156122bc576122bc61227a565b500190565b60008160001904831182151516156122db576122db61227a565b500290565b6000845160206122f38285838a01611eb2565b8551918401916123068184848a01611eb2565b8554920191600090600181811c908083168061232357607f831692505b858310810361234057634e487b7160e01b85526022600452602485fd5b808015612354576001811461236557612392565b60ff19851688528388019550612392565b60008b81526020902060005b8581101561238a5781548a820152908401908801612371565b505083880195505b50939b9a5050505050505050505050565b6000828210156123b5576123b561227a565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826124315761243161240c565b500490565b6000826124455761244561240c565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061247d90830184611ede565b9695505050505050565b60006020828403121561249957600080fd5b81516112aa81611e4d56fea26469706673582212205582cd49151acb79865124105e196b2721dec5a7a95da0a939896b4793cb1d3164736f6c634300080e0033697066733a2f2f516d594b5a365a6f706e71434539414b69476f4b6f417173507751417066454e56357470715151786d5a693651662f68696464656e2e6a736f6e
Deployed Bytecode
0x6080604052600436106102675760003560e01c806362b99ad411610144578063a5bc5c3f116100b6578063d5abeb011161007a578063d5abeb0114610705578063e0a808531461071b578063e25aac4a1461073b578063e985e9c51461075b578063efbd73f4146107a4578063f2fde38b146107c457600080fd5b8063a5bc5c3f14610665578063b071401b14610685578063b88d4fde146106a5578063be745f77146106c5578063c87b56dd146106e557600080fd5b80638da5cb5b116101085780638da5cb5b146105d457806394354fd0146105f257806395d89b4114610608578063a0712d681461061d578063a22cb46514610630578063a45ba8e71461065057600080fd5b806362b99ad41461054a5780636352211e1461055f57806370a082311461057f578063715018a61461059f5780637ec4a659146105b457600080fd5b806328fa79a0116101dd5780634985304e116101a15780634985304e146104a65780634fdd43cb146104bc57806351830227146104dc578063541c6a47146104fb5780635503a0e81461051b5780635c975abb1461053057600080fd5b806328fa79a0146104035780633ccfd60b1461042457806342842e0e14610439578063438b63001461045957806344a0d68a1461048657600080fd5b8063095ea7b31161022f578063095ea7b31461035857806313faede61461037857806316ba10e01461038e57806316c38b3c146103ae57806318160ddd146103ce57806323b872dd146103e357600080fd5b806301ffc9a71461026c57806305e74568146102a157806306fdde03146102dc57806307f3ef71146102fe578063081812fc14610320575b600080fd5b34801561027857600080fd5b5061028c610287366004611e63565b6107e4565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102ce6102bc366004611e97565b600f6020526000908152604090205481565b604051908152602001610298565b3480156102e857600080fd5b506102f1610836565b6040516102989190611f0a565b34801561030a57600080fd5b5061031e610319366004611f1d565b6108c8565b005b34801561032c57600080fd5b5061034061033b366004611f1d565b6108d5565b6040516001600160a01b039091168152602001610298565b34801561036457600080fd5b5061031e610373366004611f36565b6108fc565b34801561038457600080fd5b506102ce600b5481565b34801561039a57600080fd5b5061031e6103a9366004611fec565b610a16565b3480156103ba57600080fd5b5061031e6103c9366004612045565b610a35565b3480156103da57600080fd5b506102ce610a50565b3480156103ef57600080fd5b5061031e6103fe366004612060565b610a60565b34801561040f57600080fd5b5060105461028c906301000000900460ff1681565b34801561043057600080fd5b5061031e610a91565b34801561044557600080fd5b5061031e610454366004612060565b610b0d565b34801561046557600080fd5b50610479610474366004611e97565b610b28565b604051610298919061209c565b34801561049257600080fd5b5061031e6104a1366004611f1d565b610c08565b3480156104b257600080fd5b506102ce600e5481565b3480156104c857600080fd5b5061031e6104d7366004611fec565b610c15565b3480156104e857600080fd5b5060105461028c90610100900460ff1681565b34801561050757600080fd5b5061031e610516366004612045565b610c30565b34801561052757600080fd5b506102f1610c65565b34801561053c57600080fd5b5060105461028c9060ff1681565b34801561055657600080fd5b506102f1610cf3565b34801561056b57600080fd5b5061034061057a366004611f1d565b610d00565b34801561058b57600080fd5b506102ce61059a366004611e97565b610d60565b3480156105ab57600080fd5b5061031e610de6565b3480156105c057600080fd5b5061031e6105cf366004611fec565b610dfa565b3480156105e057600080fd5b506006546001600160a01b0316610340565b3480156105fe57600080fd5b506102ce600d5481565b34801561061457600080fd5b506102f1610e15565b61031e61062b366004611f1d565b610e24565b34801561063c57600080fd5b5061031e61064b3660046120e0565b6110aa565b34801561065c57600080fd5b506102f16110b5565b34801561067157600080fd5b5061031e610680366004612045565b6110c2565b34801561069157600080fd5b5061031e6106a0366004611f1d565b6110e8565b3480156106b157600080fd5b5061031e6106c0366004612113565b6110f5565b3480156106d157600080fd5b5060105461028c9062010000900460ff1681565b3480156106f157600080fd5b506102f1610700366004611f1d565b61112d565b34801561071157600080fd5b506102ce600c5481565b34801561072757600080fd5b5061031e610736366004612045565b6112b1565b34801561074757600080fd5b506102ce610756366004611f1d565b6112d3565b34801561076757600080fd5b5061028c61077636600461218f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107b057600080fd5b5061031e6107bf3660046121b9565b611322565b3480156107d057600080fd5b5061031e6107df366004611e97565b61147f565b60006001600160e01b031982166380ac58cd60e01b148061081557506001600160e01b03198216635b5e139f60e01b145b8061083057506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060008054610845906121dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610871906121dc565b80156108be5780601f10610893576101008083540402835291602001916108be565b820191906000526020600020905b8154815290600101906020018083116108a157829003601f168201915b5050505050905090565b6108d06114f5565b600e55565b60006108e08261154f565b506000908152600460205260409020546001600160a01b031690565b600061090782610d00565b9050806001600160a01b0316836001600160a01b0316036109795760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061099557506109958133610776565b610a075760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c00006064820152608401610970565b610a1183836115ae565b505050565b610a1e6114f5565b8051610a31906009906020840190611db4565b5050565b610a3d6114f5565b6010805460ff1916911515919091179055565b6000610a5b60075490565b905090565b610a6a338261161c565b610a865760405162461bcd60e51b815260040161097090612216565b610a1183838361169b565b610a996114f5565b6000610aad6006546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610af7576040519150601f19603f3d011682016040523d82523d6000602084013e610afc565b606091505b5050905080610b0a57600080fd5b50565b610a11838383604051806020016040528060008152506110f5565b60606000610b3583610d60565b905060008167ffffffffffffffff811115610b5257610b52611f60565b604051908082528060200260200182016040528015610b7b578160200160208202803683370190505b509050600160005b8381108015610b945750600c548211155b15610bfe576000610ba483610d00565b9050866001600160a01b0316816001600160a01b031603610beb5782848381518110610bd257610bd2612264565b602090810291909101015281610be781612290565b9250505b82610bf581612290565b93505050610b83565b5090949350505050565b610c106114f5565b600b55565b610c1d6114f5565b8051610a3190600a906020840190611db4565b610c386114f5565b610c48610c43610a50565b611837565b5060108054911515620100000262ff000019909216919091179055565b60098054610c72906121dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e906121dc565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b505050505081565b60088054610c72906121dc565b6000818152600260205260408120546001600160a01b0316806108305760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610970565b60006001600160a01b038216610dca5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610970565b506001600160a01b031660009081526003602052604090205490565b610dee6114f5565b610df86000611884565b565b610e026114f5565b8051610a31906008906020840190611db4565b606060018054610845906121dc565b80600081118015610e3f5750610e3b610756610a50565b8111155b610e825760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610970565b600c5481610e8f60075490565b610e9991906122a9565b1115610ede5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610970565b600e54336000908152600f6020526040902054610efc9083906122a9565b1115610f4a5760405162461bcd60e51b815260206004820181905260248201527f4d6178206d696e742070657220574c2077616c6c6574206578636565646564216044820152606401610970565b336000908152600f602052604081208054839290610f699084906122a9565b909155505060105460ff1615610fc15760405162461bcd60e51b815260206004820152601760248201527f54686520636f6e747261637420697320706175736564210000000000000000006044820152606401610970565b60105462010000900460ff1615156001036110365781610fe2610c43610a50565b610fec91906122c1565b3410156110315760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610970565b611089565b81600b5461104491906122c1565b3410156110895760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610970565b61109333836118d6565b61109e610c43610a50565b50610a11610756610a50565b610a31338383611913565b600a8054610c72906121dc565b6110ca6114f5565b6010805491151563010000000263ff00000019909216919091179055565b6110f06114f5565b600d55565b6110ff338361161c565b61111b5760405162461bcd60e51b815260040161097090612216565b611127848484846119e1565b50505050565b6000818152600260205260409020546060906001600160a01b03166111ac5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610970565b601054610100900460ff16151560000361125257600a80546111cd906121dc565b80601f01602080910402602001604051908101604052809291908181526020018280546111f9906121dc565b80156112465780601f1061121b57610100808354040283529160200191611246565b820191906000526020600020905b81548152906001019060200180831161122957829003601f168201915b50505050509050919050565b600061125c611a14565b9050600081511161127c57604051806020016040528060008152506112aa565b8061128684611a23565b600960405160200161129a939291906122e0565b6040516020818303038152906040525b9392505050565b6112b96114f5565b601080549115156101000261ff0019909216919091179055565b6010546000906301000000900460ff16151581036112f3575050600d5490565b6103e882116113085750506003600d81905590565b600c54821161131d5750506014600d81905590565b919050565b8160008111801561133d5750611339610756610a50565b8111155b6113805760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610970565b600c548161138d60075490565b61139791906122a9565b11156113dc5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610970565b600e54336000908152600f60205260409020546113fa9083906122a9565b11156114485760405162461bcd60e51b815260206004820181905260248201527f4d6178206d696e742070657220574c2077616c6c6574206578636565646564216044820152606401610970565b336000908152600f6020526040812080548392906114679084906122a9565b9091555061147590506114f5565b610a1182846118d6565b6114876114f5565b6001600160a01b0381166114ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610970565b610b0a81611884565b6006546001600160a01b03163314610df85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610970565b6000818152600260205260409020546001600160a01b0316610b0a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610970565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115e382610d00565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061162883610d00565b9050806001600160a01b0316846001600160a01b0316148061166f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806116935750836001600160a01b0316611688846108d5565b6001600160a01b0316145b949350505050565b826001600160a01b03166116ae82610d00565b6001600160a01b0316146117125760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610970565b6001600160a01b0382166117745760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610970565b61177f6000826115ae565b6001600160a01b03831660009081526003602052604081208054600192906117a89084906123a3565b90915550506001600160a01b03821660009081526003602052604081208054600192906117d69084906122a9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006103e8821161184e5750506000600b81905590565b6107d0821161186957505066038d7ea4c68000600b81905590565b600c54821161131d5750506611c37937e08000600b81905590565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60005b81811015610a11576118ef600780546001019055565b611901836118fc60075490565b611b24565b8061190b81612290565b9150506118d9565b816001600160a01b0316836001600160a01b0316036119745760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610970565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6119ec84848461169b565b6119f884848484611b3e565b6111275760405162461bcd60e51b8152600401610970906123ba565b606060088054610845906121dc565b606081600003611a4a5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a745780611a5e81612290565b9150611a6d9050600a83612422565b9150611a4e565b60008167ffffffffffffffff811115611a8f57611a8f611f60565b6040519080825280601f01601f191660200182016040528015611ab9576020820181803683370190505b5090505b841561169357611ace6001836123a3565b9150611adb600a86612436565b611ae69060306122a9565b60f81b818381518110611afb57611afb612264565b60200101906001600160f81b031916908160001a905350611b1d600a86612422565b9450611abd565b610a31828260405180602001604052806000815250611c3f565b60006001600160a01b0384163b15611c3457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b8290339089908890889060040161244a565b6020604051808303816000875af1925050508015611bbd575060408051601f3d908101601f19168201909252611bba91810190612487565b60015b611c1a573d808015611beb576040519150601f19603f3d011682016040523d82523d6000602084013e611bf0565b606091505b508051600003611c125760405162461bcd60e51b8152600401610970906123ba565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611693565b506001949350505050565b611c498383611c72565b611c566000848484611b3e565b610a115760405162461bcd60e51b8152600401610970906123ba565b6001600160a01b038216611cc85760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610970565b6000818152600260205260409020546001600160a01b031615611d2d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610970565b6001600160a01b0382166000908152600360205260408120805460019290611d569084906122a9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611dc0906121dc565b90600052602060002090601f016020900481019282611de25760008555611e28565b82601f10611dfb57805160ff1916838001178555611e28565b82800160010185558215611e28579182015b82811115611e28578251825591602001919060010190611e0d565b50611e34929150611e38565b5090565b5b80821115611e345760008155600101611e39565b6001600160e01b031981168114610b0a57600080fd5b600060208284031215611e7557600080fd5b81356112aa81611e4d565b80356001600160a01b038116811461131d57600080fd5b600060208284031215611ea957600080fd5b6112aa82611e80565b60005b83811015611ecd578181015183820152602001611eb5565b838111156111275750506000910152565b60008151808452611ef6816020860160208601611eb2565b601f01601f19169290920160200192915050565b6020815260006112aa6020830184611ede565b600060208284031215611f2f57600080fd5b5035919050565b60008060408385031215611f4957600080fd5b611f5283611e80565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611f9157611f91611f60565b604051601f8501601f19908116603f01168101908282118183101715611fb957611fb9611f60565b81604052809350858152868686011115611fd257600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611ffe57600080fd5b813567ffffffffffffffff81111561201557600080fd5b8201601f8101841361202657600080fd5b61169384823560208401611f76565b8035801515811461131d57600080fd5b60006020828403121561205757600080fd5b6112aa82612035565b60008060006060848603121561207557600080fd5b61207e84611e80565b925061208c60208501611e80565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b818110156120d4578351835292840192918401916001016120b8565b50909695505050505050565b600080604083850312156120f357600080fd5b6120fc83611e80565b915061210a60208401612035565b90509250929050565b6000806000806080858703121561212957600080fd5b61213285611e80565b935061214060208601611e80565b925060408501359150606085013567ffffffffffffffff81111561216357600080fd5b8501601f8101871361217457600080fd5b61218387823560208401611f76565b91505092959194509250565b600080604083850312156121a257600080fd5b6121ab83611e80565b915061210a60208401611e80565b600080604083850312156121cc57600080fd5b8235915061210a60208401611e80565b600181811c908216806121f057607f821691505b60208210810361221057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016122a2576122a261227a565b5060010190565b600082198211156122bc576122bc61227a565b500190565b60008160001904831182151516156122db576122db61227a565b500290565b6000845160206122f38285838a01611eb2565b8551918401916123068184848a01611eb2565b8554920191600090600181811c908083168061232357607f831692505b858310810361234057634e487b7160e01b85526022600452602485fd5b808015612354576001811461236557612392565b60ff19851688528388019550612392565b60008b81526020902060005b8581101561238a5781548a820152908401908801612371565b505083880195505b50939b9a5050505050505050505050565b6000828210156123b5576123b561227a565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826124315761243161240c565b500490565b6000826124455761244561240c565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061247d90830184611ede565b9695505050505050565b60006020828403121561249957600080fd5b81516112aa81611e4d56fea26469706673582212205582cd49151acb79865124105e196b2721dec5a7a95da0a939896b4793cb1d3164736f6c634300080e0033
Deployed Bytecode Sourcemap
39497:5431:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26237:305;;;;;;;;;;-1:-1:-1;26237:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;26237:305:0;;;;;;;;39917:48;;;;;;;;;;-1:-1:-1;39917:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1107:25:1;;;1095:2;1080:18;39917:48:0;961:177:1;27164:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;43667:134::-;;;;;;;;;;-1:-1:-1;43667:134:0;;;;;:::i;:::-;;:::i;:::-;;28677:171;;;;;;;;;;-1:-1:-1;28677:171:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2243:32:1;;;2225:51;;2213:2;2198:18;28677:171:0;2079:203:1;28194:417:0;;;;;;;;;;-1:-1:-1;28194:417:0;;;;;:::i;:::-;;:::i;39760:29::-;;;;;;;;;;;;;;;;44051:100;;;;;;;;;;-1:-1:-1;44051:100:0;;;;;:::i;:::-;;:::i;44157:77::-;;;;;;;;;;-1:-1:-1;44157:77:0;;;;;:::i;:::-;;:::i;41122:89::-;;;;;;;;;;;;;:::i;29377:336::-;;;;;;;;;;-1:-1:-1;29377:336:0;;;;;:::i;:::-;;:::i;40070:36::-;;;;;;;;;;-1:-1:-1;40070:36:0;;;;;;;;;;;44468:137;;;;;;;;;;;;;:::i;29784:185::-;;;;;;;;;;-1:-1:-1;29784:185:0;;;;;:::i;:::-;;:::i;42221:635::-;;;;;;;;;;-1:-1:-1;42221:635:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;43449:74::-;;;;;;;;;;-1:-1:-1;43449:74:0;;;;;:::i;:::-;;:::i;39873:39::-;;;;;;;;;;;;;;;;43807:132;;;;;;;;;;-1:-1:-1;43807:132:0;;;;;:::i;:::-;;:::i;40002:28::-;;;;;;;;;;-1:-1:-1;40002:28:0;;;;;;;;;;;44345:119;;;;;;;;;;-1:-1:-1;44345:119:0;;;;;:::i;:::-;;:::i;39682:33::-;;;;;;;;;;;;;:::i;39972:25::-;;;;;;;;;;-1:-1:-1;39972:25:0;;;;;;;;39649:28;;;;;;;;;;;;;:::i;26875:222::-;;;;;;;;;;-1:-1:-1;26875:222:0;;;;;:::i;:::-;;:::i;26606:207::-;;;;;;;;;;-1:-1:-1;26606:207:0;;;;;:::i;:::-;;:::i;6773:103::-;;;;;;;;;;;;;:::i;43945:100::-;;;;;;;;;;-1:-1:-1;43945:100:0;;;;;:::i;:::-;;:::i;6125:87::-;;;;;;;;;;-1:-1:-1;6198:6:0;;-1:-1:-1;;;;;6198:6:0;6125:87;;39831:37;;;;;;;;;;;;;;;;27333:104;;;;;;;;;;;;;:::i;41582:470::-;;;;;;:::i;:::-;;:::i;28920:155::-;;;;;;;;;;-1:-1:-1;28920:155:0;;;;;:::i;:::-;;:::i;39720:31::-;;;;;;;;;;;;;:::i;44240:99::-;;;;;;;;;;-1:-1:-1;44240:99:0;;;;;:::i;:::-;;:::i;43533:130::-;;;;;;;;;;-1:-1:-1;43533:130:0;;;;;:::i;:::-;;:::i;30040:323::-;;;;;;;;;;-1:-1:-1;30040:323:0;;;;;:::i;:::-;;:::i;40035:30::-;;;;;;;;;;-1:-1:-1;40035:30:0;;;;;;;;;;;42862:494;;;;;;;;;;-1:-1:-1;42862:494:0;;;;;:::i;:::-;;:::i;39794:32::-;;;;;;;;;;;;;;;;43362:81;;;;;;;;;;-1:-1:-1;43362:81:0;;;;;:::i;:::-;;:::i;40269:417::-;;;;;;;;;;-1:-1:-1;40269:417:0;;;;;:::i;:::-;;:::i;29146:164::-;;;;;;;;;;-1:-1:-1;29146:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;29267:25:0;;;29243:4;29267:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29146:164;42060:155;;;;;;;;;;-1:-1:-1;42060:155:0;;;;;:::i;:::-;;:::i;7031:201::-;;;;;;;;;;-1:-1:-1;7031:201:0;;;;;:::i;:::-;;:::i;26237:305::-;26339:4;-1:-1:-1;;;;;;26376:40:0;;-1:-1:-1;;;26376:40:0;;:105;;-1:-1:-1;;;;;;;26433:48:0;;-1:-1:-1;;;26433:48:0;26376:105;:158;;;-1:-1:-1;;;;;;;;;;19088:40:0;;;26498:36;26356:178;26237:305;-1:-1:-1;;26237:305:0:o;27164:100::-;27218:13;27251:5;27244:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27164:100;:::o;43667:134::-;6011:13;:11;:13::i;:::-;43753:19:::1;:42:::0;43667:134::o;28677:171::-;28753:7;28773:23;28788:7;28773:14;:23::i;:::-;-1:-1:-1;28816:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28816:24:0;;28677:171::o;28194:417::-;28275:13;28291:23;28306:7;28291:14;:23::i;:::-;28275:39;;28339:5;-1:-1:-1;;;;;28333:11:0;:2;-1:-1:-1;;;;;28333:11:0;;28325:57;;;;-1:-1:-1;;;28325:57:0;;7133:2:1;28325:57:0;;;7115:21:1;7172:2;7152:18;;;7145:30;7211:34;7191:18;;;7184:62;-1:-1:-1;;;7262:18:1;;;7255:31;7303:19;;28325:57:0;;;;;;;;;4756:10;-1:-1:-1;;;;;28417:21:0;;;;:62;;-1:-1:-1;28442:37:0;28459:5;4756:10;29146:164;:::i;28442:37::-;28395:174;;;;-1:-1:-1;;;28395:174:0;;7535:2:1;28395:174:0;;;7517:21:1;7574:2;7554:18;;;7547:30;7613:34;7593:18;;;7586:62;7684:32;7664:18;;;7657:60;7734:19;;28395:174:0;7333:426:1;28395:174:0;28582:21;28591:2;28595:7;28582:8;:21::i;:::-;28264:347;28194:417;;:::o;44051:100::-;6011:13;:11;:13::i;:::-;44123:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;44051:100:::0;:::o;44157:77::-;6011:13;:11;:13::i;:::-;44213:6:::1;:15:::0;;-1:-1:-1;;44213:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44157:77::o;41122:89::-;41166:7;41189:16;:6;999:14;;907:114;41189:16;41182:23;;41122:89;:::o;29377:336::-;29572:41;4756:10;29605:7;29572:18;:41::i;:::-;29564:100;;;;-1:-1:-1;;;29564:100:0;;;;;;;:::i;:::-;29677:28;29687:4;29693:2;29697:7;29677:9;:28::i;44468:137::-;6011:13;:11;:13::i;:::-;44513:7:::1;44534;6198:6:::0;;-1:-1:-1;;;;;6198:6:0;;6125:87;44534:7:::1;-1:-1:-1::0;;;;;44526:21:0::1;44555;44526:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44512:69;;;44596:2;44588:11;;;::::0;::::1;;44505:100;44468:137::o:0;29784:185::-;29922:39;29939:4;29945:2;29949:7;29922:39;;;;;;;;;;;;:16;:39::i;42221:635::-;42296:16;42324:23;42350:17;42360:6;42350:9;:17::i;:::-;42324:43;;42374:30;42421:15;42407:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42407:30:0;-1:-1:-1;42374:63:0;-1:-1:-1;42469:1:0;42444:22;42513:309;42538:15;42520;:33;:64;;;;;42575:9;;42557:14;:27;;42520:64;42513:309;;;42595:25;42623:23;42631:14;42623:7;:23::i;:::-;42595:51;;42682:6;-1:-1:-1;;;;;42661:27:0;:17;-1:-1:-1;;;;;42661:27:0;;42657:131;;42734:14;42701:13;42715:15;42701:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;42761:17;;;;:::i;:::-;;;;42657:131;42798:16;;;;:::i;:::-;;;;42586:236;42513:309;;;-1:-1:-1;42837:13:0;;42221:635;-1:-1:-1;;;;42221:635:0:o;43449:74::-;6011:13;:11;:13::i;:::-;43505:4:::1;:12:::0;43449:74::o;43807:132::-;6011:13;:11;:13::i;:::-;43895:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;44345:119::-:0;6011:13;:11;:13::i;:::-;44406:25:::1;44417:13;:11;:13::i;:::-;44406:10;:25::i;:::-;-1:-1:-1::0;44438:11:0::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;44438:20:0;;::::1;::::0;;;::::1;::::0;;44345:119::o;39682:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39649:28::-;;;;;;;:::i;26875:222::-;26947:7;26983:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26983:16:0;;27010:56;;;;-1:-1:-1;;;27010:56:0;;8995:2:1;27010:56:0;;;8977:21:1;9034:2;9014:18;;;9007:30;-1:-1:-1;;;9053:18:1;;;9046:54;9117:18;;27010:56:0;8793:348:1;26606:207:0;26678:7;-1:-1:-1;;;;;26706:19:0;;26698:73;;;;-1:-1:-1;;;26698:73:0;;9348:2:1;26698:73:0;;;9330:21:1;9387:2;9367:18;;;9360:30;9426:34;9406:18;;;9399:62;-1:-1:-1;;;9477:18:1;;;9470:39;9526:19;;26698:73:0;9146:405:1;26698:73:0;-1:-1:-1;;;;;;26789:16:0;;;;;:9;:16;;;;;;;26606:207::o;6773:103::-;6011:13;:11;:13::i;:::-;6838:30:::1;6865:1;6838:18;:30::i;:::-;6773:103::o:0;43945:100::-;6011:13;:11;:13::i;:::-;44017:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;27333:104::-:0;27389:13;27422:7;27415:14;;;;;:::i;41582:470::-;41647:11;40772:1;40758:11;:15;:73;;;;;40792:39;40817:13;:11;:13::i;40792:39::-;40777:11;:54;;40758:73;40750:106;;;;-1:-1:-1;;;40750:106:0;;9758:2:1;40750:106:0;;;9740:21:1;9797:2;9777:18;;;9770:30;-1:-1:-1;;;9816:18:1;;;9809:50;9876:18;;40750:106:0;9556:344:1;40750:106:0;40905:9;;40890:11;40871:16;:6;999:14;;907:114;40871:16;:30;;;;:::i;:::-;:43;;40863:76;;;;-1:-1:-1;;;40863:76:0;;10240:2:1;40863:76:0;;;10222:21:1;10279:2;10259:18;;;10252:30;-1:-1:-1;;;10298:18:1;;;10291:50;10358:18;;40863:76:0;10038:344:1;40863:76:0;40997:19;;40968:10;40954:25;;;;:13;:25;;;;;;:39;;40982:11;;40954:39;:::i;:::-;:62;;40946:108;;;;-1:-1:-1;;;40946:108:0;;10589:2:1;40946:108:0;;;10571:21:1;;;10608:18;;;10601:30;10667:34;10647:18;;;10640:62;10719:18;;40946:108:0;10387:356:1;40946:108:0;41075:10;41061:25;;;;:13;:25;;;;;:40;;41090:11;;41061:25;:40;;41090:11;;41061:40;:::i;:::-;;;;-1:-1:-1;;41676:6:0::1;::::0;::::1;;41675:7;41667:43;;;::::0;-1:-1:-1;;;41667:43:0;;10950:2:1;41667:43:0::1;::::0;::::1;10932:21:1::0;10989:2;10969:18;;;10962:30;11028:25;11008:18;;;11001:53;11071:18;;41667:43:0::1;10748:347:1::0;41667:43:0::1;41721:11;::::0;;;::::1;;;:19;;41736:4;41721:19:::0;41717:211:::1;;41798:11;41771:25;41782:13;:11;:13::i;41771:25::-;:38;;;;:::i;:::-;41758:9;:51;;41750:83;;;::::0;-1:-1:-1;;;41750:83:0;;11475:2:1;41750:83:0::1;::::0;::::1;11457:21:1::0;11514:2;11494:18;;;11487:30;-1:-1:-1;;;11533:18:1;;;11526:49;11592:18;;41750:83:0::1;11273:343:1::0;41750:83:0::1;41717:211;;;41885:11;41878:4;;:18;;;;:::i;:::-;41865:9;:31;;41857:63;;;::::0;-1:-1:-1;;;41857:63:0;;11475:2:1;41857:63:0::1;::::0;::::1;11457:21:1::0;11514:2;11494:18;;;11487:30;-1:-1:-1;;;11533:18:1;;;11526:49;11592:18;;41857:63:0::1;11273:343:1::0;41857:63:0::1;41934:34;41944:10;41956:11;41934:9;:34::i;:::-;41975:25;41986:13;:11;:13::i;41975:25::-;;42007:39;42032:13;:11;:13::i;28920:155::-:0;29015:52;4756:10;29048:8;29058;29015:18;:52::i;39720:31::-;;;;;;;:::i;44240:99::-;6011:13;:11;:13::i;:::-;44307:17:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;44307:26:0;;::::1;::::0;;;::::1;::::0;;44240:99::o;43533:130::-;6011:13;:11;:13::i;:::-;43617:18:::1;:40:::0;43533:130::o;30040:323::-;30214:41;4756:10;30247:7;30214:18;:41::i;:::-;30206:100;;;;-1:-1:-1;;;30206:100:0;;;;;;;:::i;:::-;30317:38;30331:4;30337:2;30341:7;30350:4;30317:13;:38::i;:::-;30040:323;;;;:::o;42862:494::-;31935:4;31959:16;;;:7;:16;;;;;;42961:13;;-1:-1:-1;;;;;31959:16:0;42986:98;;;;-1:-1:-1;;;42986:98:0;;11823:2:1;42986:98:0;;;11805:21:1;11862:2;11842:18;;;11835:30;11901:34;11881:18;;;11874:62;-1:-1:-1;;;11952:18:1;;;11945:45;12007:19;;42986:98:0;11621:411:1;42986:98:0;43097:8;;;;;;;:17;;43109:5;43097:17;43093:64;;43132:17;43125:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42862:494;;;:::o;43093:64::-;43165:28;43196:10;:8;:10::i;:::-;43165:41;;43251:1;43226:14;43220:28;:32;:130;;;;;;;;;;;;;;;;;43288:14;43304:19;:8;:17;:19::i;:::-;43325:9;43271:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43220:130;43213:137;42862:494;-1:-1:-1;;;42862:494:0:o;43362:81::-;6011:13;:11;:13::i;:::-;43420:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;43420:17:0;;::::1;::::0;;;::::1;::::0;;43362:81::o;40269:417::-;40377:17;;40336:27;;40377:17;;;;;:26;;;;40373:80;;-1:-1:-1;;40425:18:0;;;40269:417::o;40373:80::-;40475:4;40464:7;:15;40461:103;;-1:-1:-1;;40515:1:0;40494:18;:22;;;40515:1;40269:417::o;40461:103::-;40586:9;;40575:7;:20;40572:109;;-1:-1:-1;;40631:2:0;40610:18;:23;;;40631:2;40269:417::o;40572:109::-;40269:417;;;:::o;42060:155::-;42146:11;40772:1;40758:11;:15;:73;;;;;40792:39;40817:13;:11;:13::i;40792:39::-;40777:11;:54;;40758:73;40750:106;;;;-1:-1:-1;;;40750:106:0;;9758:2:1;40750:106:0;;;9740:21:1;9797:2;9777:18;;;9770:30;-1:-1:-1;;;9816:18:1;;;9809:50;9876:18;;40750:106:0;9556:344:1;40750:106:0;40905:9;;40890:11;40871:16;:6;999:14;;907:114;40871:16;:30;;;;:::i;:::-;:43;;40863:76;;;;-1:-1:-1;;;40863:76:0;;10240:2:1;40863:76:0;;;10222:21:1;10279:2;10259:18;;;10252:30;-1:-1:-1;;;10298:18:1;;;10291:50;10358:18;;40863:76:0;10038:344:1;40863:76:0;40997:19;;40968:10;40954:25;;;;:13;:25;;;;;;:39;;40982:11;;40954:39;:::i;:::-;:62;;40946:108;;;;-1:-1:-1;;;40946:108:0;;10589:2:1;40946:108:0;;;10571:21:1;;;10608:18;;;10601:30;10667:34;10647:18;;;10640:62;10719:18;;40946:108:0;10387:356:1;40946:108:0;41075:10;41061:25;;;;:13;:25;;;;;:40;;41090:11;;41061:25;:40;;41090:11;;41061:40;:::i;:::-;;;;-1:-1:-1;6011:13:0::1;::::0;-1:-1:-1;6011:11:0::1;:13::i;:::-;42176:33:::2;42186:9;42197:11;42176:9;:33::i;7031:201::-:0;6011:13;:11;:13::i;:::-;-1:-1:-1;;;;;7120:22:0;::::1;7112:73;;;::::0;-1:-1:-1;;;7112:73:0;;13897:2:1;7112:73:0::1;::::0;::::1;13879:21:1::0;13936:2;13916:18;;;13909:30;13975:34;13955:18;;;13948:62;-1:-1:-1;;;14026:18:1;;;14019:36;14072:19;;7112:73:0::1;13695:402:1::0;7112:73:0::1;7196:28;7215:8;7196:18;:28::i;6290:132::-:0;6198:6;;-1:-1:-1;;;;;6198:6:0;4756:10;6354:23;6346:68;;;;-1:-1:-1;;;6346:68:0;;14304:2:1;6346:68:0;;;14286:21:1;;;14323:18;;;14316:30;14382:34;14362:18;;;14355:62;14434:18;;6346:68:0;14102:356:1;36652:135:0;31935:4;31959:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31959:16:0;36726:53;;;;-1:-1:-1;;;36726:53:0;;8995:2:1;36726:53:0;;;8977:21:1;9034:2;9014:18;;;9007:30;-1:-1:-1;;;9053:18:1;;;9046:54;9117:18;;36726:53:0;8793:348:1;35931:174:0;36006:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36006:29:0;-1:-1:-1;;;;;36006:29:0;;;;;;;;:24;;36060:23;36006:24;36060:14;:23::i;:::-;-1:-1:-1;;;;;36051:46:0;;;;;;;;;;;35931:174;;:::o;32164:264::-;32257:4;32274:13;32290:23;32305:7;32290:14;:23::i;:::-;32274:39;;32343:5;-1:-1:-1;;;;;32332:16:0;:7;-1:-1:-1;;;;;32332:16:0;;:52;;;-1:-1:-1;;;;;;29267:25:0;;;29243:4;29267:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;32352:32;32332:87;;;;32412:7;-1:-1:-1;;;;;32388:31:0;:20;32400:7;32388:11;:20::i;:::-;-1:-1:-1;;;;;32388:31:0;;32332:87;32324:96;32164:264;-1:-1:-1;;;;32164:264:0:o;35187:625::-;35346:4;-1:-1:-1;;;;;35319:31:0;:23;35334:7;35319:14;:23::i;:::-;-1:-1:-1;;;;;35319:31:0;;35311:81;;;;-1:-1:-1;;;35311:81:0;;14665:2:1;35311:81:0;;;14647:21:1;14704:2;14684:18;;;14677:30;14743:34;14723:18;;;14716:62;-1:-1:-1;;;14794:18:1;;;14787:35;14839:19;;35311:81:0;14463:401:1;35311:81:0;-1:-1:-1;;;;;35411:16:0;;35403:65;;;;-1:-1:-1;;;35403:65:0;;15071:2:1;35403:65:0;;;15053:21:1;15110:2;15090:18;;;15083:30;15149:34;15129:18;;;15122:62;-1:-1:-1;;;15200:18:1;;;15193:34;15244:19;;35403:65:0;14869:400:1;35403:65:0;35585:29;35602:1;35606:7;35585:8;:29::i;:::-;-1:-1:-1;;;;;35627:15:0;;;;;;:9;:15;;;;;:20;;35646:1;;35627:15;:20;;35646:1;;35627:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35658:13:0;;;;;;:9;:13;;;;;:18;;35675:1;;35658:13;:18;;35675:1;;35658:18;:::i;:::-;;;;-1:-1:-1;;35687:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35687:21:0;-1:-1:-1;;;;;35687:21:0;;;;;;;;;35726:27;;35687:16;;35726:27;;;;;;;28264:347;28194:417;;:::o;41217:359::-;41271:13;41309:4;41298:7;:15;41295:75;;-1:-1:-1;;41335:1:0;41328:4;:8;;;41335:1;41217:359::o;41295:75::-;41392:4;41381:7;:15;41378:90;;-1:-1:-1;;41418:16:0;41411:4;:23;;;41418:16;41217:359::o;41378:90::-;41490:9;;41479:7;:20;41476:95;;-1:-1:-1;;41521:16:0;41514:4;:23;;;41521:16;41217:359::o;7392:191::-;7485:6;;;-1:-1:-1;;;;;7502:17:0;;;-1:-1:-1;;;;;;7502:17:0;;;;;;;7535:40;;7485:6;;;7502:17;7485:6;;7535:40;;7466:16;;7535:40;7455:128;7392:191;:::o;44611:204::-;44691:9;44686:124;44710:11;44706:1;:15;44686:124;;;44737:18;:6;1118:19;;1136:1;1118:19;;;1029:127;44737:18;44764:38;44774:9;44785:16;:6;999:14;;907:114;44785:16;44764:9;:38::i;:::-;44723:3;;;;:::i;:::-;;;;44686:124;;36248:315;36403:8;-1:-1:-1;;;;;36394:17:0;:5;-1:-1:-1;;;;;36394:17:0;;36386:55;;;;-1:-1:-1;;;36386:55:0;;15606:2:1;36386:55:0;;;15588:21:1;15645:2;15625:18;;;15618:30;15684:27;15664:18;;;15657:55;15729:18;;36386:55:0;15404:349:1;36386:55:0;-1:-1:-1;;;;;36452:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36452:46:0;;;;;;;;;;36514:41;;540::1;;;36514::0;;513:18:1;36514:41:0;;;;;;;36248:315;;;:::o;31244:313::-;31400:28;31410:4;31416:2;31420:7;31400:9;:28::i;:::-;31447:47;31470:4;31476:2;31480:7;31489:4;31447:22;:47::i;:::-;31439:110;;;;-1:-1:-1;;;31439:110:0;;;;;;;:::i;44821:104::-;44881:13;44910:9;44903:16;;;;;:::i;1930:723::-;1986:13;2207:5;2216:1;2207:10;2203:53;;-1:-1:-1;;2234:10:0;;;;;;;;;;;;-1:-1:-1;;;2234:10:0;;;;;1930:723::o;2203:53::-;2281:5;2266:12;2322:78;2329:9;;2322:78;;2355:8;;;;:::i;:::-;;-1:-1:-1;2378:10:0;;-1:-1:-1;2386:2:0;2378:10;;:::i;:::-;;;2322:78;;;2410:19;2442:6;2432:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2432:17:0;;2410:39;;2460:154;2467:10;;2460:154;;2494:11;2504:1;2494:11;;:::i;:::-;;-1:-1:-1;2563:10:0;2571:2;2563:5;:10;:::i;:::-;2550:24;;:2;:24;:::i;:::-;2537:39;;2520:6;2527;2520:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2520:56:0;;;;;;;;-1:-1:-1;2591:11:0;2600:2;2591:11;;:::i;:::-;;;2460:154;;32770:110;32846:26;32856:2;32860:7;32846:26;;;;;;;;;;;;:9;:26::i;37351:853::-;37505:4;-1:-1:-1;;;;;37526:13:0;;9118:19;:23;37522:675;;37562:71;;-1:-1:-1;;;37562:71:0;;-1:-1:-1;;;;;37562:36:0;;;;;:71;;4756:10;;37613:4;;37619:7;;37628:4;;37562:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37562:71:0;;;;;;;;-1:-1:-1;;37562:71:0;;;;;;;;;;;;:::i;:::-;;;37558:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37803:6;:13;37820:1;37803:18;37799:328;;37846:60;;-1:-1:-1;;;37846:60:0;;;;;;;:::i;37799:328::-;38077:6;38071:13;38062:6;38058:2;38054:15;38047:38;37558:584;-1:-1:-1;;;;;;37684:51:0;-1:-1:-1;;;37684:51:0;;-1:-1:-1;37677:58:0;;37522:675;-1:-1:-1;38181:4:0;37351:853;;;;;;:::o;33107:319::-;33236:18;33242:2;33246:7;33236:5;:18::i;:::-;33287:53;33318:1;33322:2;33326:7;33335:4;33287:22;:53::i;:::-;33265:153;;;;-1:-1:-1;;;33265:153:0;;;;;;;:::i;33762:439::-;-1:-1:-1;;;;;33842:16:0;;33834:61;;;;-1:-1:-1;;;33834:61:0;;17501:2:1;33834:61:0;;;17483:21:1;;;17520:18;;;17513:30;17579:34;17559:18;;;17552:62;17631:18;;33834:61:0;17299:356:1;33834:61:0;31935:4;31959:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31959:16:0;:30;33906:58;;;;-1:-1:-1;;;33906:58:0;;17862:2:1;33906:58:0;;;17844:21:1;17901:2;17881:18;;;17874:30;17940;17920:18;;;17913:58;17988:18;;33906:58:0;17660:352:1;33906:58:0;-1:-1:-1;;;;;34035:13:0;;;;;;:9;:13;;;;;:18;;34052:1;;34035:13;:18;;34052:1;;34035:18;:::i;:::-;;;;-1:-1:-1;;34064:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34064:21:0;-1:-1:-1;;;;;34064:21:0;;;;;;;;34103:33;;34064:16;;;34103:33;;34064:16;;34103:33;44123:22:::1;44051:100:::0;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:173::-;660:20;;-1:-1:-1;;;;;709:31:1;;699:42;;689:70;;755:1;752;745:12;770:186;829:6;882:2;870:9;861:7;857:23;853:32;850:52;;;898:1;895;888:12;850:52;921:29;940:9;921:29;:::i;1143:258::-;1215:1;1225:113;1239:6;1236:1;1233:13;1225:113;;;1315:11;;;1309:18;1296:11;;;1289:39;1261:2;1254:10;1225:113;;;1356:6;1353:1;1350:13;1347:48;;;-1:-1:-1;;1391:1:1;1373:16;;1366:27;1143:258::o;1406:::-;1448:3;1486:5;1480:12;1513:6;1508:3;1501:19;1529:63;1585:6;1578:4;1573:3;1569:14;1562:4;1555:5;1551:16;1529:63;:::i;:::-;1646:2;1625:15;-1:-1:-1;;1621:29:1;1612:39;;;;1653:4;1608:50;;1406:258;-1:-1:-1;;1406:258:1:o;1669:220::-;1818:2;1807:9;1800:21;1781:4;1838:45;1879:2;1868:9;1864:18;1856:6;1838:45;:::i;1894:180::-;1953:6;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;-1:-1:-1;2045:23:1;;1894:180;-1:-1:-1;1894:180:1:o;2287:254::-;2355:6;2363;2416:2;2404:9;2395:7;2391:23;2387:32;2384:52;;;2432:1;2429;2422:12;2384:52;2455:29;2474:9;2455:29;:::i;:::-;2445:39;2531:2;2516:18;;;;2503:32;;-1:-1:-1;;;2287:254:1:o;2546:127::-;2607:10;2602:3;2598:20;2595:1;2588:31;2638:4;2635:1;2628:15;2662:4;2659:1;2652:15;2678:632;2743:5;2773:18;2814:2;2806:6;2803:14;2800:40;;;2820:18;;:::i;:::-;2895:2;2889:9;2863:2;2949:15;;-1:-1:-1;;2945:24:1;;;2971:2;2941:33;2937:42;2925:55;;;2995:18;;;3015:22;;;2992:46;2989:72;;;3041:18;;:::i;:::-;3081:10;3077:2;3070:22;3110:6;3101:15;;3140:6;3132;3125:22;3180:3;3171:6;3166:3;3162:16;3159:25;3156:45;;;3197:1;3194;3187:12;3156:45;3247:6;3242:3;3235:4;3227:6;3223:17;3210:44;3302:1;3295:4;3286:6;3278;3274:19;3270:30;3263:41;;;;2678:632;;;;;:::o;3315:451::-;3384:6;3437:2;3425:9;3416:7;3412:23;3408:32;3405:52;;;3453:1;3450;3443:12;3405:52;3493:9;3480:23;3526:18;3518:6;3515:30;3512:50;;;3558:1;3555;3548:12;3512:50;3581:22;;3634:4;3626:13;;3622:27;-1:-1:-1;3612:55:1;;3663:1;3660;3653:12;3612:55;3686:74;3752:7;3747:2;3734:16;3729:2;3725;3721:11;3686:74;:::i;3771:160::-;3836:20;;3892:13;;3885:21;3875:32;;3865:60;;3921:1;3918;3911:12;3936:180;3992:6;4045:2;4033:9;4024:7;4020:23;4016:32;4013:52;;;4061:1;4058;4051:12;4013:52;4084:26;4100:9;4084:26;:::i;4121:328::-;4198:6;4206;4214;4267:2;4255:9;4246:7;4242:23;4238:32;4235:52;;;4283:1;4280;4273:12;4235:52;4306:29;4325:9;4306:29;:::i;:::-;4296:39;;4354:38;4388:2;4377:9;4373:18;4354:38;:::i;:::-;4344:48;;4439:2;4428:9;4424:18;4411:32;4401:42;;4121:328;;;;;:::o;4454:632::-;4625:2;4677:21;;;4747:13;;4650:18;;;4769:22;;;4596:4;;4625:2;4848:15;;;;4822:2;4807:18;;;4596:4;4891:169;4905:6;4902:1;4899:13;4891:169;;;4966:13;;4954:26;;5035:15;;;;5000:12;;;;4927:1;4920:9;4891:169;;;-1:-1:-1;5077:3:1;;4454:632;-1:-1:-1;;;;;;4454:632:1:o;5091:254::-;5156:6;5164;5217:2;5205:9;5196:7;5192:23;5188:32;5185:52;;;5233:1;5230;5223:12;5185:52;5256:29;5275:9;5256:29;:::i;:::-;5246:39;;5304:35;5335:2;5324:9;5320:18;5304:35;:::i;:::-;5294:45;;5091:254;;;;;:::o;5350:667::-;5445:6;5453;5461;5469;5522:3;5510:9;5501:7;5497:23;5493:33;5490:53;;;5539:1;5536;5529:12;5490:53;5562:29;5581:9;5562:29;:::i;:::-;5552:39;;5610:38;5644:2;5633:9;5629:18;5610:38;:::i;:::-;5600:48;;5695:2;5684:9;5680:18;5667:32;5657:42;;5750:2;5739:9;5735:18;5722:32;5777:18;5769:6;5766:30;5763:50;;;5809:1;5806;5799:12;5763:50;5832:22;;5885:4;5877:13;;5873:27;-1:-1:-1;5863:55:1;;5914:1;5911;5904:12;5863:55;5937:74;6003:7;5998:2;5985:16;5980:2;5976;5972:11;5937:74;:::i;:::-;5927:84;;;5350:667;;;;;;;:::o;6022:260::-;6090:6;6098;6151:2;6139:9;6130:7;6126:23;6122:32;6119:52;;;6167:1;6164;6157:12;6119:52;6190:29;6209:9;6190:29;:::i;:::-;6180:39;;6238:38;6272:2;6261:9;6257:18;6238:38;:::i;6287:254::-;6355:6;6363;6416:2;6404:9;6395:7;6391:23;6387:32;6384:52;;;6432:1;6429;6422:12;6384:52;6468:9;6455:23;6445:33;;6497:38;6531:2;6520:9;6516:18;6497:38;:::i;6546:380::-;6625:1;6621:12;;;;6668;;;6689:61;;6743:4;6735:6;6731:17;6721:27;;6689:61;6796:2;6788:6;6785:14;6765:18;6762:38;6759:161;;6842:10;6837:3;6833:20;6830:1;6823:31;6877:4;6874:1;6867:15;6905:4;6902:1;6895:15;6759:161;;6546:380;;;:::o;7764:410::-;7966:2;7948:21;;;8005:2;7985:18;;;7978:30;8044:34;8039:2;8024:18;;8017:62;-1:-1:-1;;;8110:2:1;8095:18;;8088:44;8164:3;8149:19;;7764:410::o;8389:127::-;8450:10;8445:3;8441:20;8438:1;8431:31;8481:4;8478:1;8471:15;8505:4;8502:1;8495:15;8521:127;8582:10;8577:3;8573:20;8570:1;8563:31;8613:4;8610:1;8603:15;8637:4;8634:1;8627:15;8653:135;8692:3;8713:17;;;8710:43;;8733:18;;:::i;:::-;-1:-1:-1;8780:1:1;8769:13;;8653:135::o;9905:128::-;9945:3;9976:1;9972:6;9969:1;9966:13;9963:39;;;9982:18;;:::i;:::-;-1:-1:-1;10018:9:1;;9905:128::o;11100:168::-;11140:7;11206:1;11202;11198:6;11194:14;11191:1;11188:21;11183:1;11176:9;11169:17;11165:45;11162:71;;;11213:18;;:::i;:::-;-1:-1:-1;11253:9:1;;11100:168::o;12163:1527::-;12387:3;12425:6;12419:13;12451:4;12464:51;12508:6;12503:3;12498:2;12490:6;12486:15;12464:51;:::i;:::-;12578:13;;12537:16;;;;12600:55;12578:13;12537:16;12622:15;;;12600:55;:::i;:::-;12744:13;;12677:20;;;12717:1;;12804;12826:18;;;;12879;;;;12906:93;;12984:4;12974:8;12970:19;12958:31;;12906:93;13047:2;13037:8;13034:16;13014:18;13011:40;13008:167;;-1:-1:-1;;;13074:33:1;;13130:4;13127:1;13120:15;13160:4;13081:3;13148:17;13008:167;13191:18;13218:110;;;;13342:1;13337:328;;;;13184:481;;13218:110;-1:-1:-1;;13253:24:1;;13239:39;;13298:20;;;;-1:-1:-1;13218:110:1;;13337:328;12110:1;12103:14;;;12147:4;12134:18;;13432:1;13446:169;13460:8;13457:1;13454:15;13446:169;;;13542:14;;13527:13;;;13520:37;13585:16;;;;13477:10;;13446:169;;;13450:3;;13646:8;13639:5;13635:20;13628:27;;13184:481;-1:-1:-1;13681:3:1;;12163:1527;-1:-1:-1;;;;;;;;;;;12163:1527:1:o;15274:125::-;15314:4;15342:1;15339;15336:8;15333:34;;;15347:18;;:::i;:::-;-1:-1:-1;15384:9:1;;15274:125::o;15758:414::-;15960:2;15942:21;;;15999:2;15979:18;;;15972:30;16038:34;16033:2;16018:18;;16011:62;-1:-1:-1;;;16104:2:1;16089:18;;16082:48;16162:3;16147:19;;15758:414::o;16177:127::-;16238:10;16233:3;16229:20;16226:1;16219:31;16269:4;16266:1;16259:15;16293:4;16290:1;16283:15;16309:120;16349:1;16375;16365:35;;16380:18;;:::i;:::-;-1:-1:-1;16414:9:1;;16309:120::o;16434:112::-;16466:1;16492;16482:35;;16497:18;;:::i;:::-;-1:-1:-1;16531:9:1;;16434:112::o;16551:489::-;-1:-1:-1;;;;;16820:15:1;;;16802:34;;16872:15;;16867:2;16852:18;;16845:43;16919:2;16904:18;;16897:34;;;16967:3;16962:2;16947:18;;16940:31;;;16745:4;;16988:46;;17014:19;;17006:6;16988:46;:::i;:::-;16980:54;16551:489;-1:-1:-1;;;;;;16551:489:1:o;17045:249::-;17114:6;17167:2;17155:9;17146:7;17142:23;17138:32;17135:52;;;17183:1;17180;17173:12;17135:52;17215:9;17209:16;17234:30;17258:5;17234:30;:::i
Swarm Source
ipfs://5582cd49151acb79865124105e196b2721dec5a7a95da0a939896b4793cb1d31
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.