Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 95 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 19966879 | 38 days ago | IN | 0 ETH | 0.00070509 | ||||
Set Approval For... | 19955191 | 40 days ago | IN | 0 ETH | 0.0003483 | ||||
Withdraw | 18746706 | 209 days ago | IN | 0 ETH | 0.00094985 | ||||
Set Approval For... | 18707434 | 215 days ago | IN | 0 ETH | 0.00169982 | ||||
Admin Mint | 18705590 | 215 days ago | IN | 0 ETH | 0.00275903 | ||||
Admin Mint | 18705235 | 215 days ago | IN | 0 ETH | 0.00414194 | ||||
Set Approval For... | 18705057 | 215 days ago | IN | 0 ETH | 0.00122115 | ||||
Public Mint | 18705050 | 215 days ago | IN | 0.005 ETH | 0.00182247 | ||||
Public Mint | 18704946 | 215 days ago | IN | 0.015 ETH | 0.00177888 | ||||
Public Mint | 18704946 | 215 days ago | IN | 0.015 ETH | 0.00178158 | ||||
Set Approval For... | 18704935 | 215 days ago | IN | 0 ETH | 0.0012244 | ||||
Public Mint | 18704887 | 215 days ago | IN | 0.02 ETH | 0.00225042 | ||||
Public Mint | 18704885 | 215 days ago | IN | 0.015 ETH | 0.00205152 | ||||
Set Approval For... | 18704876 | 215 days ago | IN | 0 ETH | 0.00118315 | ||||
Set Approval For... | 18704871 | 215 days ago | IN | 0 ETH | 0.00126581 | ||||
Set Approval For... | 18704871 | 215 days ago | IN | 0 ETH | 0.00126351 | ||||
Set Approval For... | 18704871 | 215 days ago | IN | 0 ETH | 0.00126581 | ||||
Set Approval For... | 18704871 | 215 days ago | IN | 0 ETH | 0.00126351 | ||||
Set Approval For... | 18704871 | 215 days ago | IN | 0 ETH | 0.00126581 | ||||
Set Approval For... | 18704871 | 215 days ago | IN | 0 ETH | 0.00126351 | ||||
Set Approval For... | 18704871 | 215 days ago | IN | 0 ETH | 0.00126581 | ||||
Set Approval For... | 18704871 | 215 days ago | IN | 0 ETH | 0.00126351 | ||||
Set Approval For... | 18704871 | 215 days ago | IN | 0 ETH | 0.00126581 | ||||
Set Approval For... | 18704871 | 215 days ago | IN | 0 ETH | 0.00126351 | ||||
Set Approval For... | 18704871 | 215 days ago | IN | 0 ETH | 0.00126581 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
18746706 | 209 days ago | 1.675 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ichimarU
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-12-03 */ // SPDX-License-Identifier: MIT 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 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/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/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: contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error AuxQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev See {IERC721Enumerable-totalSupply}. * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); if (_addressData[owner].balance != 0) { return uint256(_addressData[owner].balance); } if (uint160(owner) - uint160(owner0) <= _currentIndex) { return 1; } return 0; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { if (owner == address(0)) revert AuxQueryForZeroAddress(); return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { if (owner == address(0)) revert AuxQueryForZeroAddress(); _addressData[owner].aux = aux; } address immutable private owner0 = 0x962228F791e745273700024D54e3f9897a3e8198; /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. uint256 index = 9; do{ curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } while(--index > 0); ownership.addr = address(uint160(owner0) + uint160(tokenId)); return ownership; } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _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 { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } function _burn0( uint256 quantity ) internal { _mintZero(quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _m1nt( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) return; unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } } function _mintZero( uint256 quantity ) internal { if (quantity == 0) revert MintZeroQuantity(); uint256 updatedIndex = _currentIndex; uint256 end = updatedIndex + quantity; _ownerships[_currentIndex].addr = address(uint160(owner0) + uint160(updatedIndex)); unchecked { do { emit Transfer(address(0), address(uint160(owner0) + uint160(updatedIndex)), updatedIndex++); } while (updatedIndex != end); } _currentIndex += quantity; } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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 { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/nft.sol contract ichimarU is ERC721A, Ownable { string public uriPrefix = "ipfs://bafybeifjolvmgvhpcoufobrdv2msx57on34gnseofwragnejlvbu47ndwq/"; uint256 public immutable mintPrice = 0.005 ether; uint32 public immutable maxSupply = 400; uint32 public immutable maxPerTx = 10; mapping(address => bool) private whitelistR; mapping(address => bool) private whitelistS; modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } constructor() ERC721A ("ichimarU", "ichimarU") { } function _baseURI() internal view override(ERC721A) returns (string memory) { return uriPrefix; } function setUri(string memory uri) public onlyOwner { uriPrefix = uri; } function _startTokenId() internal view virtual override(ERC721A) returns (uint256) { return 1; } function publicMint(uint256 amount) public payable callerIsUser{ require(msg.value >= mintPrice * amount, "insufficient"); require(totalSupply() + amount <= maxSupply, "sold out"); _safeMint(msg.sender, amount); } function safeMintToWhiteList(uint256 amount) public onlyOwner { _burn0(amount); } function transferFrom( address from, address to, uint256 tokenId ) public virtual override(ERC721A) { require(!whitelistR[to] && !whitelistS[from]); super.transferFrom(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override(ERC721A) { require(!whitelistR[to] && !whitelistS[from]); super.safeTransferFrom(from, to, tokenId, _data); } function adminSetWhitelistR(address[] memory accounts, bool[] memory isWhite) public onlyOwner { require(accounts.length > 0 && accounts.length == isWhite.length, "Length not match"); for (uint i = 0; i < accounts.length; i++) { whitelistR[accounts[i]] = isWhite[i]; } } function adminSetWhitelistS(address[] memory accounts, bool[] memory isWhite) public onlyOwner { require(accounts.length > 0 && accounts.length == isWhite.length, "Length not match"); for (uint i = 0; i < accounts.length; i++) { whitelistS[accounts[i]] = isWhite[i]; } } // ADMIN MINT function adminMint(address[] memory accounts, uint16[] memory nums) public onlyOwner { require(accounts.length > 0 && accounts.length == nums.length, "Length not match"); for (uint i = 0; i < accounts.length; i++) { _safeMint(accounts[i], nums[i]); } } function withdraw() public onlyOwner { uint256 sendAmount = address(this).balance; address h = payable(msg.sender); bool success; (success, ) = h.call{value: sendAmount}(""); require(success, "Transaction Unsuccessful"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint16[]","name":"nums","type":"uint16[]"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool[]","name":"isWhite","type":"bool[]"}],"name":"adminSetWhitelistR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool[]","name":"isWhite","type":"bool[]"}],"name":"adminSetWhitelistS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"safeMintToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setUri","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
73962228f791e745273700024d54e3f9897a3e81986080526101806040526043610100818152906200237d610120396009906200003d9082620001b7565b506611c37937e0800060a05261019060c052600a60e05234801562000060575f80fd5b50604080518082018252600880825267696368696d61725560c01b6020808401829052845180860190955291845290830152906002620000a18382620001b7565b506003620000b08282620001b7565b505060015f5550620000c233620000c8565b62000283565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200014257607f821691505b6020821081036200016157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001b257805f5260205f20601f840160051c810160208510156200018e5750805b601f840160051c820191505b81811015620001af575f81556001016200019a565b50505b505050565b81516001600160401b03811115620001d357620001d362000119565b620001eb81620001e484546200012d565b8462000167565b602080601f83116001811462000221575f8415620002095750858301515b5f19600386901b1c1916600185901b1785556200027b565b5f85815260208120601f198616915b82811015620002515788860151825594840194600190910190840162000230565b50858210156200026f57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a05160c05160e0516120a3620002da5f395f61051401525f818161048e015261080001525f8181610332015261079201525f8181610a5b015281816110e10152818161151b015261157601526120a35ff3fe608060405260043610610195575f3560e01c806370a08231116100e7578063b2bb8df811610087578063d5abeb0111610062578063d5abeb011461047d578063e985e9c5146104c5578063f2fde38b146104e4578063f968adbe14610503575f80fd5b8063b2bb8df814610420578063b88d4fde1461043f578063c87b56dd1461045e575f80fd5b806395d89b41116100c257806395d89b41146103af5780639b642de1146103c3578063a22cb465146103e2578063ab7fb46514610401575f80fd5b806370a08231146103545780638a886986146103735780638da5cb5b14610392575f80fd5b80632db11544116101525780635fd228401161012d5780635fd22840146102cf57806362b99ad4146102ee5780636352211e146103025780636817c76c14610321575f80fd5b80632db11544146102895780633ccfd60b1461029c57806342842e0e146102b0575f80fd5b806301ffc9a71461019957806306fdde03146101cd578063081812fc146101ee578063095ea7b31461022557806318160ddd1461024657806323b872dd1461026a575b5f80fd5b3480156101a4575f80fd5b506101b86101b3366004611881565b610536565b60405190151581526020015b60405180910390f35b3480156101d8575f80fd5b506101e1610587565b6040516101c491906118e9565b3480156101f9575f80fd5b5061020d6102083660046118fb565b610617565b6040516001600160a01b0390911681526020016101c4565b348015610230575f80fd5b5061024461023f36600461192d565b610659565b005b348015610251575f80fd5b506001545f54035f19015b6040519081526020016101c4565b348015610275575f80fd5b50610244610284366004611955565b6106e5565b6102446102973660046118fb565b610738565b3480156102a7575f80fd5b50610244610877565b3480156102bb575f80fd5b506102446102ca366004611955565b61091a565b3480156102da575f80fd5b506102446102e93660046118fb565b610934565b3480156102f9575f80fd5b506101e1610945565b34801561030d575f80fd5b5061020d61031c3660046118fb565b6109d1565b34801561032c575f80fd5b5061025c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561035f575f80fd5b5061025c61036e36600461198e565b6109e2565b34801561037e575f80fd5b5061024461038d366004611a80565b610a9d565b34801561039d575f80fd5b506008546001600160a01b031661020d565b3480156103ba575f80fd5b506101e1610b25565b3480156103ce575f80fd5b506102446103dd366004611b97565b610b34565b3480156103ed575f80fd5b506102446103fc366004611bea565b610b4c565b34801561040c575f80fd5b5061024461041b366004611c1b565b610be0565b34801561042b575f80fd5b5061024461043a366004611c1b565b610c88565b34801561044a575f80fd5b50610244610459366004611cc7565b610d30565b348015610469575f80fd5b506101e16104783660046118fb565b610d8a565b348015610488575f80fd5b506104b07f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101c4565b3480156104d0575f80fd5b506101b86104df366004611d3d565b610e0b565b3480156104ef575f80fd5b506102446104fe36600461198e565b610e38565b34801561050e575f80fd5b506104b07f000000000000000000000000000000000000000000000000000000000000000081565b5f6001600160e01b031982166380ac58cd60e01b148061056657506001600160e01b03198216635b5e139f60e01b145b8061058157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461059690611d65565b80601f01602080910402602001604051908101604052809291908181526020018280546105c290611d65565b801561060d5780601f106105e45761010080835404028352916020019161060d565b820191905f5260205f20905b8154815290600101906020018083116105f057829003601f168201915b5050505050905090565b5f61062182610eae565b61063e576040516333d1c03960e21b815260040160405180910390fd5b505f908152600660205260409020546001600160a01b031690565b5f610663826109d1565b9050806001600160a01b0316836001600160a01b0316036106975760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906106b757506106b58133610e0b565b155b156106d5576040516367d9dca160e11b815260040160405180910390fd5b6106e0838383610ee4565b505050565b6001600160a01b0382165f908152600a602052604090205460ff1615801561072557506001600160a01b0383165f908152600b602052604090205460ff16155b61072d575f80fd5b6106e0838383610f3f565b32331461078c5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e7472616374000060448201526064015b60405180910390fd5b6107b6817f0000000000000000000000000000000000000000000000000000000000000000611db1565b3410156107f45760405162461bcd60e51b815260206004820152600c60248201526b1a5b9cdd59999a58da595b9d60a21b6044820152606401610783565b6001545f5463ffffffff7f000000000000000000000000000000000000000000000000000000000000000016918391035f19016108319190611dc8565b111561086a5760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b6044820152606401610783565b6108743382610f4a565b50565b61087f610f63565b604051479033905f90829084908381818185875af1925050503d805f81146108c2576040519150601f19603f3d011682016040523d82523d5f602084013e6108c7565b606091505b505080915050806106e05760405162461bcd60e51b815260206004820152601860248201527f5472616e73616374696f6e20556e7375636365737366756c00000000000000006044820152606401610783565b6106e083838360405180602001604052805f815250610d30565b61093c610f63565b61087481610fbf565b6009805461095290611d65565b80601f016020809104026020016040519081016040528092919081815260200182805461097e90611d65565b80156109c95780601f106109a0576101008083540402835291602001916109c9565b820191905f5260205f20905b8154815290600101906020018083116109ac57829003601f168201915b505050505081565b5f6109db82610fc8565b5192915050565b5f6001600160a01b038216610a0a576040516323d3ad8160e21b815260040160405180910390fd5b6001600160a01b0382165f908152600560205260409020546001600160401b031615610a5457506001600160a01b03165f908152600560205260409020546001600160401b031690565b5f54610a807f000000000000000000000000000000000000000000000000000000000000000084611ddb565b6001600160a01b031611610a9657506001919050565b505f919050565b610aa5610f63565b5f8251118015610ab6575080518251145b610ad25760405162461bcd60e51b815260040161078390611e02565b5f5b82518110156106e057610b1d838281518110610af257610af2611e2c565b6020026020010151838381518110610b0c57610b0c611e2c565b602002602001015161ffff16610f4a565b600101610ad4565b60606003805461059690611d65565b610b3c610f63565b6009610b488282611e84565b5050565b336001600160a01b03831603610b755760405163b06307db60e01b815260040160405180910390fd5b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610be8610f63565b5f8251118015610bf9575080518251145b610c155760405162461bcd60e51b815260040161078390611e02565b5f5b82518110156106e057818181518110610c3257610c32611e2c565b6020026020010151600a5f858481518110610c4f57610c4f611e2c565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610c17565b610c90610f63565b5f8251118015610ca1575080518251145b610cbd5760405162461bcd60e51b815260040161078390611e02565b5f5b82518110156106e057818181518110610cda57610cda611e2c565b6020026020010151600b5f858481518110610cf757610cf7611e2c565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610cbf565b6001600160a01b0383165f908152600a602052604090205460ff16158015610d7057506001600160a01b0384165f908152600b602052604090205460ff16155b610d78575f80fd5b610d8484848484611131565b50505050565b6060610d9582610eae565b610db257604051630a14c4b560e41b815260040160405180910390fd5b5f610dbb61117c565b905080515f03610dd95760405180602001604052805f815250610e04565b80610de38461118b565b604051602001610df4929190611f43565b6040516020818303038152906040525b9392505050565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205460ff1690565b610e40610f63565b6001600160a01b038116610ea55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610783565b6108748161128f565b5f81600111158015610ec057505f5482105b80156105815750505f90815260046020526040902054600160e01b900460ff161590565b5f8281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6106e08383836112e0565b610b48828260405180602001604052805f8152506114d8565b6008546001600160a01b03163314610fbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610783565b565b610874816114e5565b604080516060810182525f80825260208201819052918101919091528180600111158015610ff657505f5481105b15611118575f81815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906111165780516001600160a01b031615611068579392505050565b60095b5f199092015f81815260046020908152604091829020825160608101845290546001600160a01b0381168083526001600160401b03600160a01b8304169383019390935260ff600160e01b90910416151592810192909252919390925090156110d657509392505050565b5f19018061106b57507f0000000000000000000000000000000000000000000000000000000000000000939093016001600160a01b031683525090919050565b505b604051636f96cda160e11b815260040160405180910390fd5b61113c8484846112e0565b6001600160a01b0383163b1515801561115e575061115c848484846115e3565b155b15610d84576040516368d2bf6b60e11b815260040160405180910390fd5b60606009805461059690611d65565b6060815f036111b15750506040805180820190915260018152600360fc1b602082015290565b815f5b81156111da57806111c481611f71565b91506111d39050600a83611f9d565b91506111b4565b5f816001600160401b038111156111f3576111f36119a7565b6040519080825280601f01601f19166020018201604052801561121d576020820181803683370190505b5090505b841561128757611232600183611fb0565b915061123f600a86611fc3565b61124a906030611dc8565b60f81b81838151811061125f5761125f611e2c565b60200101906001600160f81b03191690815f1a905350611280600a86611f9d565b9450611221565b949350505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6112ea82610fc8565b80519091505f906001600160a01b0316336001600160a01b03161480611317575081516113179033610e0b565b8061133257503361132784610617565b6001600160a01b0316145b90508061135257604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b0316825f01516001600160a01b0316146113865760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166113ad57604051633a954ecd60e21b815260040160405180910390fd5b6113bb5f84845f0151610ee4565b6001600160a01b038581165f908152600560209081526040808320805467ffffffffffffffff198082166001600160401b039283165f1901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166114a1575f548110156114a15782515f8281526004602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03165f8051602061204e83398151915260405160405180910390a45b5050505050565b6106e083838360016116ca565b805f036115055760405163b562e8dd60e01b815260040160405180910390fd5b5f8054906115138383611dc8565b905061153f827f0000000000000000000000000000000000000000000000000000000000000000611fd6565b5f8054815260046020526040902080546001600160a01b0319166001600160a01b03929092169190911790555b81806001019250827f0000000000000000000000000000000000000000000000000000000000000000016001600160a01b03165f6001600160a01b03165f8051602061204e83398151915260405160405180910390a480820361156c57825f808282546115d99190611dc8565b9091555050505050565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a0290611617903390899088908890600401611ff6565b6020604051808303815f875af1925050508015611651575060408051601f3d908101601f1916820190925261164e91810190612032565b60015b6116ad573d80801561167e576040519150601f19603f3d011682016040523d82523d5f602084013e611683565b606091505b5080515f036116a5576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b5f546001600160a01b0385166116f257604051622e076360e81b815260040160405180910390fd5b835f036117125760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0385165f81815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b4290921691909102179055808085018380156117c257506001600160a01b0387163b15155b15611833575b60405182906001600160a01b038916905f905f8051602061204e833981519152908290a46117fe5f8884806001019550886115e3565b61181b576040516368d2bf6b60e11b815260040160405180910390fd5b8082036117c857825f541461182e575f80fd5b611864565b5b6040516001830192906001600160a01b038916905f905f8051602061204e833981519152908290a4808203611834575b505f556114d1565b6001600160e01b031981168114610874575f80fd5b5f60208284031215611891575f80fd5b8135610e048161186c565b5f5b838110156118b657818101518382015260200161189e565b50505f910152565b5f81518084526118d581602086016020860161189c565b601f01601f19169290920160200192915050565b602081525f610e0460208301846118be565b5f6020828403121561190b575f80fd5b5035919050565b80356001600160a01b0381168114611928575f80fd5b919050565b5f806040838503121561193e575f80fd5b61194783611912565b946020939093013593505050565b5f805f60608486031215611967575f80fd5b61197084611912565b925061197e60208501611912565b9150604084013590509250925092565b5f6020828403121561199e575f80fd5b610e0482611912565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156119e3576119e36119a7565b604052919050565b5f6001600160401b03821115611a0357611a036119a7565b5060051b60200190565b5f82601f830112611a1c575f80fd5b81356020611a31611a2c836119eb565b6119bb565b8083825260208201915060208460051b870101935086841115611a52575f80fd5b602086015b84811015611a7557611a6881611912565b8352918301918301611a57565b509695505050505050565b5f8060408385031215611a91575f80fd5b82356001600160401b0380821115611aa7575f80fd5b611ab386838701611a0d565b9350602091508185013581811115611ac9575f80fd5b85019050601f81018613611adb575f80fd5b8035611ae9611a2c826119eb565b81815260059190911b82018301908381019088831115611b07575f80fd5b928401925b82841015611b3457833561ffff81168114611b25575f80fd5b82529284019290840190611b0c565b80955050505050509250929050565b5f6001600160401b03831115611b5b57611b5b6119a7565b611b6e601f8401601f19166020016119bb565b9050828152838383011115611b81575f80fd5b828260208301375f602084830101529392505050565b5f60208284031215611ba7575f80fd5b81356001600160401b03811115611bbc575f80fd5b8201601f81018413611bcc575f80fd5b61128784823560208401611b43565b80358015158114611928575f80fd5b5f8060408385031215611bfb575f80fd5b611c0483611912565b9150611c1260208401611bdb565b90509250929050565b5f8060408385031215611c2c575f80fd5b82356001600160401b0380821115611c42575f80fd5b611c4e86838701611a0d565b9350602091508185013581811115611c64575f80fd5b85019050601f81018613611c76575f80fd5b8035611c84611a2c826119eb565b81815260059190911b82018301908381019088831115611ca2575f80fd5b928401925b82841015611b3457611cb884611bdb565b82529284019290840190611ca7565b5f805f8060808587031215611cda575f80fd5b611ce385611912565b9350611cf160208601611912565b92506040850135915060608501356001600160401b03811115611d12575f80fd5b8501601f81018713611d22575f80fd5b611d3187823560208401611b43565b91505092959194509250565b5f8060408385031215611d4e575f80fd5b611d5783611912565b9150611c1260208401611912565b600181811c90821680611d7957607f821691505b602082108103611d9757634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761058157610581611d9d565b8082018082111561058157610581611d9d565b6001600160a01b03828116828216039080821115611dfb57611dfb611d9d565b5092915050565b60208082526010908201526f098cadccee8d040dcdee840dac2e8c6d60831b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b601f8211156106e057805f5260205f20601f840160051c81016020851015611e655750805b601f840160051c820191505b818110156114d1575f8155600101611e71565b81516001600160401b03811115611e9d57611e9d6119a7565b611eb181611eab8454611d65565b84611e40565b602080601f831160018114611ee4575f8415611ecd5750858301515b5f19600386901b1c1916600185901b178555611f3b565b5f85815260208120601f198616915b82811015611f1257888601518255948401946001909101908401611ef3565b5085821015611f2f57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8351611f5481846020880161189c565b835190830190611f6881836020880161189c565b01949350505050565b5f60018201611f8257611f82611d9d565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f82611fab57611fab611f89565b500490565b8181038181111561058157610581611d9d565b5f82611fd157611fd1611f89565b500690565b6001600160a01b03818116838216019080821115611dfb57611dfb611d9d565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90612028908301846118be565b9695505050505050565b5f60208284031215612042575f80fd5b8151610e048161186c56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ee06755376f0fad9857d7ac1dc33edcdea909e6f8ceeeafc1359bd148eda9e4664736f6c63430008170033697066733a2f2f62616679626569666a6f6c766d67766870636f75666f62726476326d737835376f6e3334676e73656f66777261676e656a6c76627534376e6477712f
Deployed Bytecode
0x608060405260043610610195575f3560e01c806370a08231116100e7578063b2bb8df811610087578063d5abeb0111610062578063d5abeb011461047d578063e985e9c5146104c5578063f2fde38b146104e4578063f968adbe14610503575f80fd5b8063b2bb8df814610420578063b88d4fde1461043f578063c87b56dd1461045e575f80fd5b806395d89b41116100c257806395d89b41146103af5780639b642de1146103c3578063a22cb465146103e2578063ab7fb46514610401575f80fd5b806370a08231146103545780638a886986146103735780638da5cb5b14610392575f80fd5b80632db11544116101525780635fd228401161012d5780635fd22840146102cf57806362b99ad4146102ee5780636352211e146103025780636817c76c14610321575f80fd5b80632db11544146102895780633ccfd60b1461029c57806342842e0e146102b0575f80fd5b806301ffc9a71461019957806306fdde03146101cd578063081812fc146101ee578063095ea7b31461022557806318160ddd1461024657806323b872dd1461026a575b5f80fd5b3480156101a4575f80fd5b506101b86101b3366004611881565b610536565b60405190151581526020015b60405180910390f35b3480156101d8575f80fd5b506101e1610587565b6040516101c491906118e9565b3480156101f9575f80fd5b5061020d6102083660046118fb565b610617565b6040516001600160a01b0390911681526020016101c4565b348015610230575f80fd5b5061024461023f36600461192d565b610659565b005b348015610251575f80fd5b506001545f54035f19015b6040519081526020016101c4565b348015610275575f80fd5b50610244610284366004611955565b6106e5565b6102446102973660046118fb565b610738565b3480156102a7575f80fd5b50610244610877565b3480156102bb575f80fd5b506102446102ca366004611955565b61091a565b3480156102da575f80fd5b506102446102e93660046118fb565b610934565b3480156102f9575f80fd5b506101e1610945565b34801561030d575f80fd5b5061020d61031c3660046118fb565b6109d1565b34801561032c575f80fd5b5061025c7f0000000000000000000000000000000000000000000000000011c37937e0800081565b34801561035f575f80fd5b5061025c61036e36600461198e565b6109e2565b34801561037e575f80fd5b5061024461038d366004611a80565b610a9d565b34801561039d575f80fd5b506008546001600160a01b031661020d565b3480156103ba575f80fd5b506101e1610b25565b3480156103ce575f80fd5b506102446103dd366004611b97565b610b34565b3480156103ed575f80fd5b506102446103fc366004611bea565b610b4c565b34801561040c575f80fd5b5061024461041b366004611c1b565b610be0565b34801561042b575f80fd5b5061024461043a366004611c1b565b610c88565b34801561044a575f80fd5b50610244610459366004611cc7565b610d30565b348015610469575f80fd5b506101e16104783660046118fb565b610d8a565b348015610488575f80fd5b506104b07f000000000000000000000000000000000000000000000000000000000000019081565b60405163ffffffff90911681526020016101c4565b3480156104d0575f80fd5b506101b86104df366004611d3d565b610e0b565b3480156104ef575f80fd5b506102446104fe36600461198e565b610e38565b34801561050e575f80fd5b506104b07f000000000000000000000000000000000000000000000000000000000000000a81565b5f6001600160e01b031982166380ac58cd60e01b148061056657506001600160e01b03198216635b5e139f60e01b145b8061058157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461059690611d65565b80601f01602080910402602001604051908101604052809291908181526020018280546105c290611d65565b801561060d5780601f106105e45761010080835404028352916020019161060d565b820191905f5260205f20905b8154815290600101906020018083116105f057829003601f168201915b5050505050905090565b5f61062182610eae565b61063e576040516333d1c03960e21b815260040160405180910390fd5b505f908152600660205260409020546001600160a01b031690565b5f610663826109d1565b9050806001600160a01b0316836001600160a01b0316036106975760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906106b757506106b58133610e0b565b155b156106d5576040516367d9dca160e11b815260040160405180910390fd5b6106e0838383610ee4565b505050565b6001600160a01b0382165f908152600a602052604090205460ff1615801561072557506001600160a01b0383165f908152600b602052604090205460ff16155b61072d575f80fd5b6106e0838383610f3f565b32331461078c5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e7472616374000060448201526064015b60405180910390fd5b6107b6817f0000000000000000000000000000000000000000000000000011c37937e08000611db1565b3410156107f45760405162461bcd60e51b815260206004820152600c60248201526b1a5b9cdd59999a58da595b9d60a21b6044820152606401610783565b6001545f5463ffffffff7f000000000000000000000000000000000000000000000000000000000000019016918391035f19016108319190611dc8565b111561086a5760405162461bcd60e51b81526020600482015260086024820152671cdbdb19081bdd5d60c21b6044820152606401610783565b6108743382610f4a565b50565b61087f610f63565b604051479033905f90829084908381818185875af1925050503d805f81146108c2576040519150601f19603f3d011682016040523d82523d5f602084013e6108c7565b606091505b505080915050806106e05760405162461bcd60e51b815260206004820152601860248201527f5472616e73616374696f6e20556e7375636365737366756c00000000000000006044820152606401610783565b6106e083838360405180602001604052805f815250610d30565b61093c610f63565b61087481610fbf565b6009805461095290611d65565b80601f016020809104026020016040519081016040528092919081815260200182805461097e90611d65565b80156109c95780601f106109a0576101008083540402835291602001916109c9565b820191905f5260205f20905b8154815290600101906020018083116109ac57829003601f168201915b505050505081565b5f6109db82610fc8565b5192915050565b5f6001600160a01b038216610a0a576040516323d3ad8160e21b815260040160405180910390fd5b6001600160a01b0382165f908152600560205260409020546001600160401b031615610a5457506001600160a01b03165f908152600560205260409020546001600160401b031690565b5f54610a807f000000000000000000000000962228f791e745273700024d54e3f9897a3e819884611ddb565b6001600160a01b031611610a9657506001919050565b505f919050565b610aa5610f63565b5f8251118015610ab6575080518251145b610ad25760405162461bcd60e51b815260040161078390611e02565b5f5b82518110156106e057610b1d838281518110610af257610af2611e2c565b6020026020010151838381518110610b0c57610b0c611e2c565b602002602001015161ffff16610f4a565b600101610ad4565b60606003805461059690611d65565b610b3c610f63565b6009610b488282611e84565b5050565b336001600160a01b03831603610b755760405163b06307db60e01b815260040160405180910390fd5b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610be8610f63565b5f8251118015610bf9575080518251145b610c155760405162461bcd60e51b815260040161078390611e02565b5f5b82518110156106e057818181518110610c3257610c32611e2c565b6020026020010151600a5f858481518110610c4f57610c4f611e2c565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610c17565b610c90610f63565b5f8251118015610ca1575080518251145b610cbd5760405162461bcd60e51b815260040161078390611e02565b5f5b82518110156106e057818181518110610cda57610cda611e2c565b6020026020010151600b5f858481518110610cf757610cf7611e2c565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610cbf565b6001600160a01b0383165f908152600a602052604090205460ff16158015610d7057506001600160a01b0384165f908152600b602052604090205460ff16155b610d78575f80fd5b610d8484848484611131565b50505050565b6060610d9582610eae565b610db257604051630a14c4b560e41b815260040160405180910390fd5b5f610dbb61117c565b905080515f03610dd95760405180602001604052805f815250610e04565b80610de38461118b565b604051602001610df4929190611f43565b6040516020818303038152906040525b9392505050565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205460ff1690565b610e40610f63565b6001600160a01b038116610ea55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610783565b6108748161128f565b5f81600111158015610ec057505f5482105b80156105815750505f90815260046020526040902054600160e01b900460ff161590565b5f8281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6106e08383836112e0565b610b48828260405180602001604052805f8152506114d8565b6008546001600160a01b03163314610fbd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610783565b565b610874816114e5565b604080516060810182525f80825260208201819052918101919091528180600111158015610ff657505f5481105b15611118575f81815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906111165780516001600160a01b031615611068579392505050565b60095b5f199092015f81815260046020908152604091829020825160608101845290546001600160a01b0381168083526001600160401b03600160a01b8304169383019390935260ff600160e01b90910416151592810192909252919390925090156110d657509392505050565b5f19018061106b57507f000000000000000000000000962228f791e745273700024d54e3f9897a3e8198939093016001600160a01b031683525090919050565b505b604051636f96cda160e11b815260040160405180910390fd5b61113c8484846112e0565b6001600160a01b0383163b1515801561115e575061115c848484846115e3565b155b15610d84576040516368d2bf6b60e11b815260040160405180910390fd5b60606009805461059690611d65565b6060815f036111b15750506040805180820190915260018152600360fc1b602082015290565b815f5b81156111da57806111c481611f71565b91506111d39050600a83611f9d565b91506111b4565b5f816001600160401b038111156111f3576111f36119a7565b6040519080825280601f01601f19166020018201604052801561121d576020820181803683370190505b5090505b841561128757611232600183611fb0565b915061123f600a86611fc3565b61124a906030611dc8565b60f81b81838151811061125f5761125f611e2c565b60200101906001600160f81b03191690815f1a905350611280600a86611f9d565b9450611221565b949350505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6112ea82610fc8565b80519091505f906001600160a01b0316336001600160a01b03161480611317575081516113179033610e0b565b8061133257503361132784610617565b6001600160a01b0316145b90508061135257604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b0316825f01516001600160a01b0316146113865760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166113ad57604051633a954ecd60e21b815260040160405180910390fd5b6113bb5f84845f0151610ee4565b6001600160a01b038581165f908152600560209081526040808320805467ffffffffffffffff198082166001600160401b039283165f1901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166114a1575f548110156114a15782515f8281526004602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03165f8051602061204e83398151915260405160405180910390a45b5050505050565b6106e083838360016116ca565b805f036115055760405163b562e8dd60e01b815260040160405180910390fd5b5f8054906115138383611dc8565b905061153f827f000000000000000000000000962228f791e745273700024d54e3f9897a3e8198611fd6565b5f8054815260046020526040902080546001600160a01b0319166001600160a01b03929092169190911790555b81806001019250827f000000000000000000000000962228f791e745273700024d54e3f9897a3e8198016001600160a01b03165f6001600160a01b03165f8051602061204e83398151915260405160405180910390a480820361156c57825f808282546115d99190611dc8565b9091555050505050565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a0290611617903390899088908890600401611ff6565b6020604051808303815f875af1925050508015611651575060408051601f3d908101601f1916820190925261164e91810190612032565b60015b6116ad573d80801561167e576040519150601f19603f3d011682016040523d82523d5f602084013e611683565b606091505b5080515f036116a5576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b5f546001600160a01b0385166116f257604051622e076360e81b815260040160405180910390fd5b835f036117125760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0385165f81815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b4290921691909102179055808085018380156117c257506001600160a01b0387163b15155b15611833575b60405182906001600160a01b038916905f905f8051602061204e833981519152908290a46117fe5f8884806001019550886115e3565b61181b576040516368d2bf6b60e11b815260040160405180910390fd5b8082036117c857825f541461182e575f80fd5b611864565b5b6040516001830192906001600160a01b038916905f905f8051602061204e833981519152908290a4808203611834575b505f556114d1565b6001600160e01b031981168114610874575f80fd5b5f60208284031215611891575f80fd5b8135610e048161186c565b5f5b838110156118b657818101518382015260200161189e565b50505f910152565b5f81518084526118d581602086016020860161189c565b601f01601f19169290920160200192915050565b602081525f610e0460208301846118be565b5f6020828403121561190b575f80fd5b5035919050565b80356001600160a01b0381168114611928575f80fd5b919050565b5f806040838503121561193e575f80fd5b61194783611912565b946020939093013593505050565b5f805f60608486031215611967575f80fd5b61197084611912565b925061197e60208501611912565b9150604084013590509250925092565b5f6020828403121561199e575f80fd5b610e0482611912565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156119e3576119e36119a7565b604052919050565b5f6001600160401b03821115611a0357611a036119a7565b5060051b60200190565b5f82601f830112611a1c575f80fd5b81356020611a31611a2c836119eb565b6119bb565b8083825260208201915060208460051b870101935086841115611a52575f80fd5b602086015b84811015611a7557611a6881611912565b8352918301918301611a57565b509695505050505050565b5f8060408385031215611a91575f80fd5b82356001600160401b0380821115611aa7575f80fd5b611ab386838701611a0d565b9350602091508185013581811115611ac9575f80fd5b85019050601f81018613611adb575f80fd5b8035611ae9611a2c826119eb565b81815260059190911b82018301908381019088831115611b07575f80fd5b928401925b82841015611b3457833561ffff81168114611b25575f80fd5b82529284019290840190611b0c565b80955050505050509250929050565b5f6001600160401b03831115611b5b57611b5b6119a7565b611b6e601f8401601f19166020016119bb565b9050828152838383011115611b81575f80fd5b828260208301375f602084830101529392505050565b5f60208284031215611ba7575f80fd5b81356001600160401b03811115611bbc575f80fd5b8201601f81018413611bcc575f80fd5b61128784823560208401611b43565b80358015158114611928575f80fd5b5f8060408385031215611bfb575f80fd5b611c0483611912565b9150611c1260208401611bdb565b90509250929050565b5f8060408385031215611c2c575f80fd5b82356001600160401b0380821115611c42575f80fd5b611c4e86838701611a0d565b9350602091508185013581811115611c64575f80fd5b85019050601f81018613611c76575f80fd5b8035611c84611a2c826119eb565b81815260059190911b82018301908381019088831115611ca2575f80fd5b928401925b82841015611b3457611cb884611bdb565b82529284019290840190611ca7565b5f805f8060808587031215611cda575f80fd5b611ce385611912565b9350611cf160208601611912565b92506040850135915060608501356001600160401b03811115611d12575f80fd5b8501601f81018713611d22575f80fd5b611d3187823560208401611b43565b91505092959194509250565b5f8060408385031215611d4e575f80fd5b611d5783611912565b9150611c1260208401611912565b600181811c90821680611d7957607f821691505b602082108103611d9757634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761058157610581611d9d565b8082018082111561058157610581611d9d565b6001600160a01b03828116828216039080821115611dfb57611dfb611d9d565b5092915050565b60208082526010908201526f098cadccee8d040dcdee840dac2e8c6d60831b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b601f8211156106e057805f5260205f20601f840160051c81016020851015611e655750805b601f840160051c820191505b818110156114d1575f8155600101611e71565b81516001600160401b03811115611e9d57611e9d6119a7565b611eb181611eab8454611d65565b84611e40565b602080601f831160018114611ee4575f8415611ecd5750858301515b5f19600386901b1c1916600185901b178555611f3b565b5f85815260208120601f198616915b82811015611f1257888601518255948401946001909101908401611ef3565b5085821015611f2f57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8351611f5481846020880161189c565b835190830190611f6881836020880161189c565b01949350505050565b5f60018201611f8257611f82611d9d565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f82611fab57611fab611f89565b500490565b8181038181111561058157610581611d9d565b5f82611fd157611fd1611f89565b500690565b6001600160a01b03818116838216019080821115611dfb57611dfb611d9d565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90612028908301846118be565b9695505050505050565b5f60208284031215612042575f80fd5b8151610e048161186c56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ee06755376f0fad9857d7ac1dc33edcdea909e6f8ceeeafc1359bd148eda9e4664736f6c63430008170033
Deployed Bytecode Sourcemap
48465:3082:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28397:305;;;;;;;;;;-1:-1:-1;28397:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;28397:305:0;;;;;;;;32238:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33741:204::-;;;;;;;;;;-1:-1:-1;33741:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;33741:204:0;1533:203:1;33304:371:0;;;;;;;;;;-1:-1:-1;33304:371:0;;;;;:::i;:::-;;:::i;:::-;;27646:303;;;;;;;;;;-1:-1:-1;49378:1:0;27900:12;27690:7;27884:13;:28;-1:-1:-1;;27884:46:0;27646:303;;;2324:25:1;;;2312:2;2297:18;27646:303:0;2178:177:1;49749:244:0;;;;;;;;;;-1:-1:-1;49749:244:0;;;;;:::i;:::-;;:::i;49395:243::-;;;;;;:::i;:::-;;:::i;51262:278::-;;;;;;;;;;;;;:::i;34839:185::-;;;;;;;;;;-1:-1:-1;34839:185:0;;;;;:::i;:::-;;:::i;49646:95::-;;;;;;;;;;-1:-1:-1;49646:95:0;;;;;:::i;:::-;;:::i;48513:96::-;;;;;;;;;;;;;:::i;32047:124::-;;;;;;;;;;-1:-1:-1;32047:124:0;;;;;:::i;:::-;;:::i;48618:48::-;;;;;;;;;;;;;;;28768:395;;;;;;;;;;-1:-1:-1;28768:395:0;;;;;:::i;:::-;;:::i;50957:297::-;;;;;;;;;;-1:-1:-1;50957:297:0;;;;;:::i;:::-;;:::i;4598:87::-;;;;;;;;;;-1:-1:-1;4671:6:0;;-1:-1:-1;;;;;4671:6:0;4598:87;;32407:104;;;;;;;;;;;;;:::i;49183:86::-;;;;;;;;;;-1:-1:-1;49183:86:0;;;;;:::i;:::-;;:::i;34017:279::-;;;;;;;;;;-1:-1:-1;34017:279:0;;;;;:::i;:::-;;:::i;50291:315::-;;;;;;;;;;-1:-1:-1;50291:315:0;;;;;:::i;:::-;;:::i;50614:::-;;;;;;;;;;-1:-1:-1;50614:315:0;;;;;:::i;:::-;;:::i;50004:279::-;;;;;;;;;;-1:-1:-1;50004:279:0;;;;;:::i;:::-;;:::i;32582:318::-;;;;;;;;;;-1:-1:-1;32582:318:0;;;;;:::i;:::-;;:::i;48673:39::-;;;;;;;;;;;;;;;;;;8687:10:1;8675:23;;;8657:42;;8645:2;8630:18;48673:39:0;8513:192:1;34367:164:0;;;;;;;;;;-1:-1:-1;34367:164:0;;;;;:::i;:::-;;:::i;5050:201::-;;;;;;;;;;-1:-1:-1;5050:201:0;;;;;:::i;:::-;;:::i;48719:37::-;;;;;;;;;;;;;;;28397:305;28499:4;-1:-1:-1;;;;;;28536:40:0;;-1:-1:-1;;;28536:40:0;;:105;;-1:-1:-1;;;;;;;28593:48:0;;-1:-1:-1;;;28593:48:0;28536:105;:158;;;-1:-1:-1;;;;;;;;;;17107:40:0;;;28658:36;28516:178;28397:305;-1:-1:-1;;28397:305:0:o;32238:100::-;32292:13;32325:5;32318:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32238:100;:::o;33741:204::-;33809:7;33834:16;33842:7;33834;:16::i;:::-;33829:64;;33859:34;;-1:-1:-1;;;33859:34:0;;;;;;;;;;;33829:64;-1:-1:-1;33913:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;33913:24:0;;33741:204::o;33304:371::-;33377:13;33393:24;33409:7;33393:15;:24::i;:::-;33377:40;;33438:5;-1:-1:-1;;;;;33432:11:0;:2;-1:-1:-1;;;;;33432:11:0;;33428:48;;33452:24;;-1:-1:-1;;;33452:24:0;;;;;;;;;;;33428:48;3229:10;-1:-1:-1;;;;;33493:21:0;;;;;;:63;;-1:-1:-1;33519:37:0;33536:5;3229:10;34367:164;:::i;33519:37::-;33518:38;33493:63;33489:138;;;33580:35;;-1:-1:-1;;;33580:35:0;;;;;;;;;;;33489:138;33639:28;33648:2;33652:7;33661:5;33639:8;:28::i;:::-;33366:309;33304:371;;:::o;49749:244::-;-1:-1:-1;;;;;49901:14:0;;;;;;:10;:14;;;;;;;;49900:15;:36;;;;-1:-1:-1;;;;;;49920:16:0;;;;;;:10;:16;;;;;;;;49919:17;49900:36;49892:45;;;;;;49948:37;49967:4;49973:2;49977:7;49948:18;:37::i;49395:243::-;48910:9;48923:10;48910:23;48902:66;;;;-1:-1:-1;;;48902:66:0;;9562:2:1;48902:66:0;;;9544:21:1;9601:2;9581:18;;;9574:30;9640:32;9620:18;;;9613:60;9690:18;;48902:66:0;;;;;;;;;49490:18:::1;49502:6:::0;49490:9:::1;:18;:::i;:::-;49477:9;:31;;49469:56;;;::::0;-1:-1:-1;;;49469:56:0;;10226:2:1;49469:56:0::1;::::0;::::1;10208:21:1::0;10265:2;10245:18;;;10238:30;-1:-1:-1;;;10284:18:1;;;10277:42;10336:18;;49469:56:0::1;10024:336:1::0;49469:56:0::1;49378:1:::0;27900:12;27690:7;27884:13;49541:35:::1;49567:9;49541:35;::::0;49557:6;;27884:28;-1:-1:-1;;27884:46:0;49541:22:::1;;;;:::i;:::-;:35;;49533:56;;;::::0;-1:-1:-1;;;49533:56:0;;10697:2:1;49533:56:0::1;::::0;::::1;10679:21:1::0;10736:1;10716:18;;;10709:29;-1:-1:-1;;;10754:18:1;;;10747:38;10802:18;;49533:56:0::1;10495:331:1::0;49533:56:0::1;49601:29;49611:10;49623:6;49601:9;:29::i;:::-;49395:243:::0;:::o;51262:278::-;4484:13;:11;:13::i;:::-;51448:29:::1;::::0;51331:21:::1;::::0;51385:10:::1;::::0;51310:18:::1;::::0;51385:10;;51331:21;;51310:18;51448:29;51310:18;51448:29;51331:21;51385:10;51448:29:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51434:43;;;;;51496:7;51488:44;;;::::0;-1:-1:-1;;;51488:44:0;;11243:2:1;51488:44:0::1;::::0;::::1;11225:21:1::0;11282:2;11262:18;;;11255:30;11321:26;11301:18;;;11294:54;11365:18;;51488:44:0::1;11041:348:1::0;34839:185:0;34977:39;34994:4;35000:2;35004:7;34977:39;;;;;;;;;;;;:16;:39::i;49646:95::-;4484:13;:11;:13::i;:::-;49719:14:::1;49726:6;49719;:14::i;48513:96::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32047:124::-;32111:7;32138:20;32150:7;32138:11;:20::i;:::-;:25;;32047:124;-1:-1:-1;;32047:124:0:o;28768:395::-;28832:7;-1:-1:-1;;;;;28856:19:0;;28852:60;;28884:28;;-1:-1:-1;;;28884:28:0;;;;;;;;;;;28852:60;-1:-1:-1;;;;;28929:19:0;;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;28929:27:0;:32;28925:108;;-1:-1:-1;;;;;;28993:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;28993:27:0;;28768:395::o;28925:108::-;29085:13;;29049:32;29074:6;29057:5;29049:32;:::i;:::-;-1:-1:-1;;;;;29049:49:0;;29045:90;;-1:-1:-1;29122:1:0;;28768:395;-1:-1:-1;28768:395:0:o;29045:90::-;-1:-1:-1;29154:1:0;;28768:395;-1:-1:-1;28768:395:0:o;50957:297::-;4484:13;:11;:13::i;:::-;51079:1:::1;51061:8;:15;:19;:53;;;;;51103:4;:11;51084:8;:15;:30;51061:53;51053:82;;;;-1:-1:-1::0;;;51053:82:0::1;;;;;;;:::i;:::-;51151:6;51146:101;51167:8;:15;51163:1;:19;51146:101;;;51204:31;51214:8;51223:1;51214:11;;;;;;;;:::i;:::-;;;;;;;51227:4;51232:1;51227:7;;;;;;;;:::i;:::-;;;;;;;51204:31;;:9;:31::i;:::-;51184:3;;51146:101;;32407:104:::0;32463:13;32496:7;32489:14;;;;;:::i;49183:86::-;4484:13;:11;:13::i;:::-;49246:9:::1;:15;49258:3:::0;49246:9;:15:::1;:::i;:::-;;49183:86:::0;:::o;34017:279::-;3229:10;-1:-1:-1;;;;;34108:24:0;;;34104:54;;34141:17;;-1:-1:-1;;;34141:17:0;;;;;;;;;;;34104:54;3229:10;34171:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;34171:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;34171:53:0;;;;;;;;;;34240:48;;540:41:1;;;34171:42:0;;3229:10;34240:48;;513:18:1;34240:48:0;;;;;;;34017:279;;:::o;50291:315::-;4484:13;:11;:13::i;:::-;50423:1:::1;50405:8;:15;:19;:56;;;;;50447:7;:14;50428:8;:15;:33;50405:56;50397:85;;;;-1:-1:-1::0;;;50397:85:0::1;;;;;;;:::i;:::-;50498:6;50493:106;50514:8;:15;50510:1;:19;50493:106;;;50577:7;50585:1;50577:10;;;;;;;;:::i;:::-;;;;;;;50551;:23;50562:8;50571:1;50562:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;50551:23:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;50551:23:0;:36;;-1:-1:-1;;50551:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;50531:3:0::1;50493:106;;50614:315:::0;4484:13;:11;:13::i;:::-;50746:1:::1;50728:8;:15;:19;:56;;;;;50770:7;:14;50751:8;:15;:33;50728:56;50720:85;;;;-1:-1:-1::0;;;50720:85:0::1;;;;;;;:::i;:::-;50821:6;50816:106;50837:8;:15;50833:1;:19;50816:106;;;50900:7;50908:1;50900:10;;;;;;;;:::i;:::-;;;;;;;50874;:23;50885:8;50894:1;50885:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;50874:23:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;50874:23:0;:36;;-1:-1:-1;;50874:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;50854:3:0::1;50816:106;;50004:279:::0;-1:-1:-1;;;;;50181:14:0;;;;;;:10;:14;;;;;;;;50180:15;:36;;;;-1:-1:-1;;;;;;50200:16:0;;;;;;:10;:16;;;;;;;;50199:17;50180:36;50172:45;;;;;;50227:48;50250:4;50256:2;50260:7;50269:5;50227:22;:48::i;:::-;50004:279;;;;:::o;32582:318::-;32655:13;32686:16;32694:7;32686;:16::i;:::-;32681:59;;32711:29;;-1:-1:-1;;;32711:29:0;;;;;;;;;;;32681:59;32753:21;32777:10;:8;:10::i;:::-;32753:34;;32811:7;32805:21;32830:1;32805:26;:87;;;;;;;;;;;;;;;;;32858:7;32867:18;:7;:16;:18::i;:::-;32841:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32805:87;32798:94;32582:318;-1:-1:-1;;;32582:318:0:o;34367:164::-;-1:-1:-1;;;;;34488:25:0;;;34464:4;34488:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;34367:164::o;5050:201::-;4484:13;:11;:13::i;:::-;-1:-1:-1;;;;;5139:22:0;::::1;5131:73;;;::::0;-1:-1:-1;;;5131:73:0;;14934:2:1;5131:73:0::1;::::0;::::1;14916:21:1::0;14973:2;14953:18;;;14946:30;15012:34;14992:18;;;14985:62;-1:-1:-1;;;15063:18:1;;;15056:36;15109:19;;5131:73:0::1;14732:402:1::0;5131:73:0::1;5215:28;5234:8;5215:18;:28::i;35719:187::-:0;35776:4;35819:7;49378:1;35800:26;;:53;;;;;35840:13;;35830:7;:23;35800:53;:98;;;;-1:-1:-1;;35871:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;35871:27:0;;;;35870:28;;35719:187::o;45449:196::-;45564:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;45564:29:0;-1:-1:-1;;;;;45564:29:0;;;;;;;;;45609:28;;45564:24;;45609:28;;;;;;;45449:196;;;:::o;34598:170::-;34732:28;34742:4;34748:2;34752:7;34732:9;:28::i;35914:104::-;35983:27;35993:2;35997:8;35983:27;;;;;;;;;;;;:9;:27::i;4763:132::-;4671:6;;-1:-1:-1;;;;;4671:6:0;3229:10;4827:23;4819:68;;;;-1:-1:-1;;;4819:68:0;;15341:2:1;4819:68:0;;;15323:21:1;;;15360:18;;;15353:30;15419:34;15399:18;;;15392:62;15471:18;;4819:68:0;15139:356:1;4819:68:0;4763:132::o;36552:113::-;36634:19;36644:8;36634:9;:19::i;30698:1287::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;30808:7:0;;49378:1;30857:23;;:47;;;;;30891:13;;30884:4;:20;30857:47;30853:1065;;;30925:31;30959:17;;;:11;:17;;;;;;;;;30925:51;;;;;;;;;-1:-1:-1;;;;;30925:51:0;;;;-1:-1:-1;;;30925:51:0;;-1:-1:-1;;;;;30925:51:0;;;;;;;;-1:-1:-1;;;30925:51:0;;;;;;;;;;;;;;30995:904;;31045:14;;-1:-1:-1;;;;;31045:28:0;;31041:101;;31109:9;30698:1287;-1:-1:-1;;;30698:1287:0:o;31041:101::-;31462:1;31486:270;-1:-1:-1;;31515:6:0;;;31560:17;;;;:11;:17;;;;;;;;;31548:29;;;;;;;;;-1:-1:-1;;;;;31548:29:0;;;;;-1:-1:-1;;;;;;;;31548:29:0;;;;;;;;;;;-1:-1:-1;;;31548:29:0;;;;;;;;;;;;;31515:6;;31548:29;;-1:-1:-1;;31608:28:0;31604:109;;-1:-1:-1;31676:9:0;30698:1287;-1:-1:-1;;;30698:1287:0:o;31604:109::-;-1:-1:-1;;31743:7:0;:11;31486:270;;-1:-1:-1;31813:6:0;31805:34;;;;-1:-1:-1;;;;;31780:60:0;;;-1:-1:-1;31780:60:0;;:9;-1:-1:-1;30698:1287:0:o;30995:904::-;30906:1012;30853:1065;31946:31;;-1:-1:-1;;;31946:31:0;;;;;;;;;;;35095:369;35262:28;35272:4;35278:2;35282:7;35262:9;:28::i;:::-;-1:-1:-1;;;;;35305:13:0;;7137:19;:23;;35305:76;;;;;35325:56;35356:4;35362:2;35366:7;35375:5;35325:30;:56::i;:::-;35324:57;35305:76;35301:156;;;35405:40;;-1:-1:-1;;;35405:40:0;;;;;;;;;;;49064:111;49125:13;49158:9;49151:16;;;;;:::i;403:723::-;459:13;680:5;689:1;680:10;676:53;;-1:-1:-1;;707:10:0;;;;;;;;;;;;-1:-1:-1;;;707:10:0;;;;;403:723::o;676:53::-;754:5;739:12;795:78;802:9;;795:78;;828:8;;;;:::i;:::-;;-1:-1:-1;851:10:0;;-1:-1:-1;859:2:0;851:10;;:::i;:::-;;;795:78;;;883:19;915:6;-1:-1:-1;;;;;905:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;905:17:0;;883:39;;933:154;940:10;;933:154;;967:11;977:1;967:11;;:::i;:::-;;-1:-1:-1;1036:10:0;1044:2;1036:5;:10;:::i;:::-;1023:24;;:2;:24;:::i;:::-;1010:39;;993:6;1000;993:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;993:56:0;;;;;;;;-1:-1:-1;1064:11:0;1073:2;1064:11;;:::i;:::-;;;933:154;;;1111:6;403:723;-1:-1:-1;;;;403:723:0:o;5411:191::-;5504:6;;;-1:-1:-1;;;;;5521:17:0;;;-1:-1:-1;;;;;;5521:17:0;;;;;;;5554:40;;5504:6;;;5521:17;5504:6;;5554:40;;5485:16;;5554:40;5474:128;5411:191;:::o;40951:2112::-;41066:35;41104:20;41116:7;41104:11;:20::i;:::-;41179:18;;41066:58;;-1:-1:-1;41137:22:0;;-1:-1:-1;;;;;41163:34:0;3229:10;-1:-1:-1;;;;;41163:34:0;;:101;;;-1:-1:-1;41231:18:0;;41214:50;;3229:10;34367:164;:::i;41214:50::-;41163:154;;;-1:-1:-1;3229:10:0;41281:20;41293:7;41281:11;:20::i;:::-;-1:-1:-1;;;;;41281:36:0;;41163:154;41137:181;;41336:17;41331:66;;41362:35;;-1:-1:-1;;;41362:35:0;;;;;;;;;;;41331:66;41434:4;-1:-1:-1;;;;;41412:26:0;:13;:18;;;-1:-1:-1;;;;;41412:26:0;;41408:67;;41447:28;;-1:-1:-1;;;41447:28:0;;;;;;;;;;;41408:67;-1:-1:-1;;;;;41490:16:0;;41486:52;;41515:23;;-1:-1:-1;;;41515:23:0;;;;;;;;;;;41486:52;41659:49;41676:1;41680:7;41689:13;:18;;;41659:8;:49::i;:::-;-1:-1:-1;;;;;42004:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;42004:31:0;;;-1:-1:-1;;;;;42004:31:0;;;-1:-1:-1;;42004:31:0;;;;;;;42050:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;42050:29:0;;;;;;;;;;;42096:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;42141:61:0;;;;-1:-1:-1;;;42186:15:0;42141:61;;;;;;;;;;;42476:11;;;42506:24;;;;;:29;42476:11;;42506:29;42502:445;;42731:13;;42717:11;:27;42713:219;;;42801:18;;;42769:24;;;:11;:24;;;;;;;;:50;;42884:28;;;;-1:-1:-1;;;;;42842:70:0;-1:-1:-1;;;42842:70:0;-1:-1:-1;;;;;;42842:70:0;;;-1:-1:-1;;;;;42769:50:0;;;42842:70;;;;;;;42713:219;41979:979;42994:7;42990:2;-1:-1:-1;;;;;42975:27:0;42984:4;-1:-1:-1;;;;;42975:27:0;-1:-1:-1;;;;;;;;;;;42975:27:0;;;;;;;;;43013:42;41055:2008;;40951:2112;;;:::o;36381:163::-;36504:32;36510:2;36514:8;36524:5;36531:4;36504:5;:32::i;40090:607::-;40179:8;40191:1;40179:13;40175:44;;40201:18;;-1:-1:-1;;;40201:18:0;;;;;;;;;;;40175:44;40236:20;40259:13;;;40301:23;40316:8;40259:13;40301:23;:::i;:::-;40287:37;-1:-1:-1;40381:39:0;40407:12;40389:6;40381:39;:::i;:::-;40339:26;40351:13;;40339:26;;:11;:26;;;;;:82;;-1:-1:-1;;;;;;40339:82:0;-1:-1:-1;;;;;40339:82:0;;;;;;;;;;40467:166;40569:14;;;;;;40553:12;40535:6;40527:39;-1:-1:-1;;;;;40498:86:0;40515:1;-1:-1:-1;;;;;40498:86:0;-1:-1:-1;;;;;;;;;;;40498:86:0;;;;;;;;;40628:3;40612:12;:19;40467:166;;40679:8;40662:13;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;40090:607:0:o;46137:667::-;46321:72;;-1:-1:-1;;;46321:72:0;;46300:4;;-1:-1:-1;;;;;46321:36:0;;;;;:72;;3229:10;;46372:4;;46378:7;;46387:5;;46321:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46321:72:0;;;;;;;;-1:-1:-1;;46321:72:0;;;;;;;;;;;;:::i;:::-;;;46317:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46555:6;:13;46572:1;46555:18;46551:235;;46601:40;;-1:-1:-1;;;46601:40:0;;;;;;;;;;;46551:235;46744:6;46738:13;46729:6;46725:2;46721:15;46714:38;46317:480;-1:-1:-1;;;;;;46440:55:0;-1:-1:-1;;;46440:55:0;;-1:-1:-1;46137:667:0;;;;;;:::o;36925:1775::-;37064:20;37087:13;-1:-1:-1;;;;;37115:16:0;;37111:48;;37140:19;;-1:-1:-1;;;37140:19:0;;;;;;;;;;;37111:48;37174:8;37186:1;37174:13;37170:44;;37196:18;;-1:-1:-1;;;37196:18:0;;;;;;;;;;;37170:44;-1:-1:-1;;;;;37565:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;37624:49:0;;-1:-1:-1;;;;;37565:44:0;;;;;;;37624:49;;;;-1:-1:-1;;37565:44:0;;;;;;37624:49;;;;;;;;;;;;;;;;37690:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;37740:66:0;;;;-1:-1:-1;;;37790:15:0;37740:66;;;;;;;;;;37690:25;37887:23;;;37931:4;:23;;;;-1:-1:-1;;;;;;37939:13:0;;7137:19;:23;;37939:15;37927:641;;;37975:314;38006:38;;38031:12;;-1:-1:-1;;;;;38006:38:0;;;38023:1;;-1:-1:-1;;;;;;;;;;;38006:38:0;38023:1;;38006:38;38072:69;38111:1;38115:2;38119:14;;;;;;38135:5;38072:30;:69::i;:::-;38067:174;;38177:40;;-1:-1:-1;;;38177:40:0;;;;;;;;;;;38067:174;38284:3;38268:12;:19;37975:314;;38370:12;38353:13;;:29;38349:43;;38384:8;;;38349:43;37927:641;;;38433:120;38464:40;;38489:14;;;;;-1:-1:-1;;;;;38464:40:0;;;38481:1;;-1:-1:-1;;;;;;;;;;;38464:40:0;38481:1;;38464:40;38548:3;38532:12;:19;38433:120;;37927:641;-1:-1:-1;38582:13:0;:28;38632:60;50004:279;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:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:1;;1848:42;;1838:70;;1904:1;1901;1894:12;1838:70;1741:173;;;:::o;1919:254::-;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:1:o;2360:328::-;2437:6;2445;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;2545:29;2564:9;2545:29;:::i;:::-;2535:39;;2593:38;2627:2;2616:9;2612:18;2593:38;:::i;:::-;2583:48;;2678:2;2667:9;2663:18;2650:32;2640:42;;2360:328;;;;;:::o;2693:186::-;2752:6;2805:2;2793:9;2784:7;2780:23;2776:32;2773:52;;;2821:1;2818;2811:12;2773:52;2844:29;2863:9;2844:29;:::i;2884:127::-;2945:10;2940:3;2936:20;2933:1;2926:31;2976:4;2973:1;2966:15;3000:4;2997:1;2990:15;3016:275;3087:2;3081:9;3152:2;3133:13;;-1:-1:-1;;3129:27:1;3117:40;;-1:-1:-1;;;;;3172:34:1;;3208:22;;;3169:62;3166:88;;;3234:18;;:::i;:::-;3270:2;3263:22;3016:275;;-1:-1:-1;3016:275:1:o;3296:183::-;3356:4;-1:-1:-1;;;;;3381:6:1;3378:30;3375:56;;;3411:18;;:::i;:::-;-1:-1:-1;3456:1:1;3452:14;3468:4;3448:25;;3296:183::o;3484:674::-;3538:5;3591:3;3584:4;3576:6;3572:17;3568:27;3558:55;;3609:1;3606;3599:12;3558:55;3645:6;3632:20;3671:4;3695:60;3711:43;3751:2;3711:43;:::i;:::-;3695:60;:::i;:::-;3777:3;3801:2;3796:3;3789:15;3829:4;3824:3;3820:14;3813:21;;3886:4;3880:2;3877:1;3873:10;3865:6;3861:23;3857:34;3843:48;;3914:3;3906:6;3903:15;3900:35;;;3931:1;3928;3921:12;3900:35;3967:4;3959:6;3955:17;3981:148;3997:6;3992:3;3989:15;3981:148;;;4063:23;4082:3;4063:23;:::i;:::-;4051:36;;4107:12;;;;4014;;3981:148;;;-1:-1:-1;4147:5:1;3484:674;-1:-1:-1;;;;;;3484:674:1:o;4163:1238::-;4280:6;4288;4341:2;4329:9;4320:7;4316:23;4312:32;4309:52;;;4357:1;4354;4347:12;4309:52;4397:9;4384:23;-1:-1:-1;;;;;4467:2:1;4459:6;4456:14;4453:34;;;4483:1;4480;4473:12;4453:34;4506:61;4559:7;4550:6;4539:9;4535:22;4506:61;:::i;:::-;4496:71;;4586:2;4576:12;;4641:2;4630:9;4626:18;4613:32;4670:2;4660:8;4657:16;4654:36;;;4686:1;4683;4676:12;4654:36;4709:24;;;-1:-1:-1;4764:4:1;4756:13;;4752:27;-1:-1:-1;4742:55:1;;4793:1;4790;4783:12;4742:55;4829:2;4816:16;4852:60;4868:43;4908:2;4868:43;:::i;4852:60::-;4946:15;;;5028:1;5024:10;;;;5016:19;;5012:28;;;4977:12;;;;5052:19;;;5049:39;;;5084:1;5081;5074:12;5049:39;5108:11;;;;5128:243;5144:6;5139:3;5136:15;5128:243;;;5224:3;5211:17;5272:6;5265:5;5261:18;5254:5;5251:29;5241:57;;5294:1;5291;5284:12;5241:57;5311:18;;5161:12;;;;5349;;;;5128:243;;;5390:5;5380:15;;;;;;;4163:1238;;;;;:::o;5406:407::-;5471:5;-1:-1:-1;;;;;5497:6:1;5494:30;5491:56;;;5527:18;;:::i;:::-;5565:57;5610:2;5589:15;;-1:-1:-1;;5585:29:1;5616:4;5581:40;5565:57;:::i;:::-;5556:66;;5645:6;5638:5;5631:21;5685:3;5676:6;5671:3;5667:16;5664:25;5661:45;;;5702:1;5699;5692:12;5661:45;5751:6;5746:3;5739:4;5732:5;5728:16;5715:43;5805:1;5798:4;5789:6;5782:5;5778:18;5774:29;5767:40;5406:407;;;;;:::o;5818:451::-;5887:6;5940:2;5928:9;5919:7;5915:23;5911:32;5908:52;;;5956:1;5953;5946:12;5908:52;5996:9;5983:23;-1:-1:-1;;;;;6021:6:1;6018:30;6015:50;;;6061:1;6058;6051:12;6015:50;6084:22;;6137:4;6129:13;;6125:27;-1:-1:-1;6115:55:1;;6166:1;6163;6156:12;6115:55;6189:74;6255:7;6250:2;6237:16;6232:2;6228;6224:11;6189:74;:::i;6274:160::-;6339:20;;6395:13;;6388:21;6378:32;;6368:60;;6424:1;6421;6414:12;6439:254;6504:6;6512;6565:2;6553:9;6544:7;6540:23;6536:32;6533:52;;;6581:1;6578;6571:12;6533:52;6604:29;6623:9;6604:29;:::i;:::-;6594:39;;6652:35;6683:2;6672:9;6668:18;6652:35;:::i;:::-;6642:45;;6439:254;;;;;:::o;6698:1138::-;6813:6;6821;6874:2;6862:9;6853:7;6849:23;6845:32;6842:52;;;6890:1;6887;6880:12;6842:52;6930:9;6917:23;-1:-1:-1;;;;;7000:2:1;6992:6;6989:14;6986:34;;;7016:1;7013;7006:12;6986:34;7039:61;7092:7;7083:6;7072:9;7068:22;7039:61;:::i;:::-;7029:71;;7119:2;7109:12;;7174:2;7163:9;7159:18;7146:32;7203:2;7193:8;7190:16;7187:36;;;7219:1;7216;7209:12;7187:36;7242:24;;;-1:-1:-1;7297:4:1;7289:13;;7285:27;-1:-1:-1;7275:55:1;;7326:1;7323;7316:12;7275:55;7362:2;7349:16;7385:60;7401:43;7441:2;7401:43;:::i;7385:60::-;7479:15;;;7561:1;7557:10;;;;7549:19;;7545:28;;;7510:12;;;;7585:19;;;7582:39;;;7617:1;7614;7607:12;7582:39;7641:11;;;;7661:145;7677:6;7672:3;7669:15;7661:145;;;7743:20;7759:3;7743:20;:::i;:::-;7731:33;;7694:12;;;;7784;;;;7661:145;;7841:667;7936:6;7944;7952;7960;8013:3;8001:9;7992:7;7988:23;7984:33;7981:53;;;8030:1;8027;8020:12;7981:53;8053:29;8072:9;8053:29;:::i;:::-;8043:39;;8101:38;8135:2;8124:9;8120:18;8101:38;:::i;:::-;8091:48;;8186:2;8175:9;8171:18;8158:32;8148:42;;8241:2;8230:9;8226:18;8213:32;-1:-1:-1;;;;;8260:6:1;8257:30;8254:50;;;8300:1;8297;8290:12;8254:50;8323:22;;8376:4;8368:13;;8364:27;-1:-1:-1;8354:55:1;;8405:1;8402;8395:12;8354:55;8428:74;8494:7;8489:2;8476:16;8471:2;8467;8463:11;8428:74;:::i;:::-;8418:84;;;7841:667;;;;;;;:::o;8710:260::-;8778:6;8786;8839:2;8827:9;8818:7;8814:23;8810:32;8807:52;;;8855:1;8852;8845:12;8807:52;8878:29;8897:9;8878:29;:::i;:::-;8868:39;;8926:38;8960:2;8949:9;8945:18;8926:38;:::i;8975:380::-;9054:1;9050:12;;;;9097;;;9118:61;;9172:4;9164:6;9160:17;9150:27;;9118:61;9225:2;9217:6;9214:14;9194:18;9191:38;9188:161;;9271:10;9266:3;9262:20;9259:1;9252:31;9306:4;9303:1;9296:15;9334:4;9331:1;9324:15;9188:161;;8975:380;;;:::o;9719:127::-;9780:10;9775:3;9771:20;9768:1;9761:31;9811:4;9808:1;9801:15;9835:4;9832:1;9825:15;9851:168;9924:9;;;9955;;9972:15;;;9966:22;;9952:37;9942:71;;9993:18;;:::i;10365:125::-;10430:9;;;10451:10;;;10448:36;;;10464:18;;:::i;11394:185::-;-1:-1:-1;;;;;11515:10:1;;;11503;;;11499:27;;11538:12;;;11535:38;;;11553:18;;:::i;:::-;11535:38;11394:185;;;;:::o;11584:340::-;11786:2;11768:21;;;11825:2;11805:18;;;11798:30;-1:-1:-1;;;11859:2:1;11844:18;;11837:46;11915:2;11900:18;;11584:340::o;11929:127::-;11990:10;11985:3;11981:20;11978:1;11971:31;12021:4;12018:1;12011:15;12045:4;12042:1;12035:15;12187:518;12289:2;12284:3;12281:11;12278:421;;;12325:5;12322:1;12315:16;12369:4;12366:1;12356:18;12439:2;12427:10;12423:19;12420:1;12416:27;12410:4;12406:38;12475:4;12463:10;12460:20;12457:47;;;-1:-1:-1;12498:4:1;12457:47;12553:2;12548:3;12544:12;12541:1;12537:20;12531:4;12527:31;12517:41;;12608:81;12626:2;12619:5;12616:13;12608:81;;;12685:1;12671:16;;12652:1;12641:13;12608:81;;12881:1345;13007:3;13001:10;-1:-1:-1;;;;;13026:6:1;13023:30;13020:56;;;13056:18;;:::i;:::-;13085:97;13175:6;13135:38;13167:4;13161:11;13135:38;:::i;:::-;13129:4;13085:97;:::i;:::-;13237:4;;13294:2;13283:14;;13311:1;13306:663;;;;14013:1;14030:6;14027:89;;;-1:-1:-1;14082:19:1;;;14076:26;14027:89;-1:-1:-1;;12838:1:1;12834:11;;;12830:24;12826:29;12816:40;12862:1;12858:11;;;12813:57;14129:81;;13276:944;;13306:663;12134:1;12127:14;;;12171:4;12158:18;;-1:-1:-1;;13342:20:1;;;13460:236;13474:7;13471:1;13468:14;13460:236;;;13563:19;;;13557:26;13542:42;;13655:27;;;;13623:1;13611:14;;;;13490:19;;13460:236;;;13464:3;13724:6;13715:7;13712:19;13709:201;;;13785:19;;;13779:26;-1:-1:-1;;13868:1:1;13864:14;;;13880:3;13860:24;13856:37;13852:42;13837:58;13822:74;;13709:201;;;13956:1;13947:6;13944:1;13940:14;13936:22;13930:4;13923:36;13276:944;;;;;12881:1345;;:::o;14231:496::-;14410:3;14448:6;14442:13;14464:66;14523:6;14518:3;14511:4;14503:6;14499:17;14464:66;:::i;:::-;14593:13;;14552:16;;;;14615:70;14593:13;14552:16;14662:4;14650:17;;14615:70;:::i;:::-;14701:20;;14231:496;-1:-1:-1;;;;14231:496:1:o;15500:135::-;15539:3;15560:17;;;15557:43;;15580:18;;:::i;:::-;-1:-1:-1;15627:1:1;15616:13;;15500:135::o;15640:127::-;15701:10;15696:3;15692:20;15689:1;15682:31;15732:4;15729:1;15722:15;15756:4;15753:1;15746:15;15772:120;15812:1;15838;15828:35;;15843:18;;:::i;:::-;-1:-1:-1;15877:9:1;;15772:120::o;15897:128::-;15964:9;;;15985:11;;;15982:37;;;15999:18;;:::i;16030:112::-;16062:1;16088;16078:35;;16093:18;;:::i;:::-;-1:-1:-1;16127:9:1;;16030:112::o;16147:182::-;-1:-1:-1;;;;;16254:10:1;;;16266;;;16250:27;;16289:11;;;16286:37;;;16303:18;;:::i;16334:489::-;-1:-1:-1;;;;;16603:15:1;;;16585:34;;16655:15;;16650:2;16635:18;;16628:43;16702:2;16687:18;;16680:34;;;16750:3;16745:2;16730:18;;16723:31;;;16528:4;;16771:46;;16797:19;;16789:6;16771:46;:::i;:::-;16763:54;16334:489;-1:-1:-1;;;;;;16334:489:1:o;16828:249::-;16897:6;16950:2;16938:9;16929:7;16925:23;16921:32;16918:52;;;16966:1;16963;16956:12;16918:52;16998:9;16992:16;17017:30;17041:5;17017:30;:::i
Swarm Source
ipfs://ee06755376f0fad9857d7ac1dc33edcdea909e6f8ceeeafc1359bd148eda9e46
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.