Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
10,000 MFE
Holders
1,314
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 MFELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MyFuckingEgg
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-19 */ // SPDX-License-Identifier: MIT // by @MyFuckingEgg - https://myfuckingegg.com // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases li // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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); } } // 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 v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.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 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.6.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 be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: FuckingEgg.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); 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 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(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { 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) { 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) { 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 { _addressData[owner].aux = aux; } /** * 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. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { 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 virtual 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); } /** * @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); } /** * @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); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // 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; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.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; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // 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 storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.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; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, 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 {} } contract MyFuckingEgg is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; // Constant variables // ------------------------------------------------------------------------ uint256 public MAX_FREE_SUPPLY = 5000; uint256 public MAX_RESERVE_SUPPLY = 1000; uint256 public MAX_SUPPLY = MAX_FREE_SUPPLY + MAX_RESERVE_SUPPLY + 4000; uint256 public MAX_PER_WALLET_FREE = 2; uint256 public MAX_PER_TX = 50; uint256 public PRICE = 0.006 ether; // Team addresses - // ------------------------------------------------------------------------ address private constant _a1 = 0x3E0f25E2A320E1F2CCeDe9a417F93c52eDAa33E7; address private constant _a2 = 0xf7f1ED914EdF6eAC82736b5d384De6EE19D6f429; // State variables // ------------------------------------------------------------------------ bool public isLive = true; // Free mint mappings // ------------------------------------------------------------------------ mapping(address => uint256) private _mintedFreeAmount; function countClaimed(address addr) external view returns (uint256) { require(addr != address(0), "Null Address"); return _mintedFreeAmount[addr]; } // URI variables // ------------------------------------------------------------------------ string private _contractURI; string private _baseTokenURI; // Events // ------------------------------------------------------------------------ event BaseTokenURIChanged(string baseTokenURI); event ContractURIChanged(string contractURI); // Constructor // ------------------------------------------------------------------------ constructor() ERC721A("MyFuckingEgg", "MFE") {} function setStatus(bool _status) external onlyOwner { isLive = _status; } function setFreeSupply(uint256 _quantity) public onlyOwner { MAX_FREE_SUPPLY = _quantity; } function mint(uint256 quantity) external payable { uint256 cost = PRICE; bool isFree = ((totalSupply() + quantity < MAX_FREE_SUPPLY +1) && (_mintedFreeAmount[msg.sender] + quantity <= MAX_PER_WALLET_FREE)); if (isFree) { cost = 0; } require(msg.value >= quantity * cost, "Please send the exact amount."); require(totalSupply() + quantity < MAX_SUPPLY + 1, "No more"); require(isLive, "Minting is not live yet"); require(quantity < MAX_PER_TX + 1, "Max per TX reached."); if (isFree) { _mintedFreeAmount[msg.sender] += quantity; } _safeMint(msg.sender, quantity); } //Owner mint function giveaway(address to, uint256 quantity) external onlyOwner { require(totalSupply() + quantity <= MAX_RESERVE_SUPPLY, "Minting would exceed max supply"); require(quantity > 0, "Must mint at least one token"); _mintedFreeAmount[to] += quantity; _safeMint(to, quantity); } // Contract URI Functions // ------------------------------------------------------------------------ // Set the contract URI - must set to a URL which can return a JSON of metadata for the contract function setContractURI(string calldata URI) external onlyOwner { _contractURI = URI; emit ContractURIChanged(URI); } function setPrice(uint256 newPrice) public onlyOwner { PRICE = newPrice; } // Return the contract URI function contractURI() public view returns (string memory) { return _contractURI; } // Base URI Functions // ------------------------------------------------------------------------ // set the base token URI function setBaseTokenURI(string calldata URI) external onlyOwner { _baseTokenURI = URI; emit BaseTokenURIChanged(URI); } // override the _baseURI() method in the ERC721 contract // the tokenURI() method below will call the tokenURI() method in the ERC721A contract, which will need the _baseURI set above function _baseURI() internal view override returns (string memory) { return _baseTokenURI; } function baseTokenURI() public view returns (string memory) { return _baseTokenURI; } function tokenURI(uint256 tokenId) public view override returns (string memory) { return super.tokenURI(tokenId); } // Withdrawal functions -- NEED TO UPDATE WITH INFORMATION FOR WITHDRAWALS // ------------------------------------------------------------------------ function withdrawAll() external onlyOwner { uint _a1amount = address(this).balance * 90/100; uint _a2amount = address(this).balance * 10/100; require(payable(_a1).send(_a1amount), "Failed to send to Owner"); require(payable(_a2).send(_a2amount), "Failed to send to Developer"); } }
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":false,"internalType":"string","name":"baseTokenURI","type":"string"}],"name":"BaseTokenURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"contractURI","type":"string"}],"name":"ContractURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_FREE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET_FREE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_RESERVE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"countClaimed","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":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","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":"isLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"setFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setStatus","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":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611388600a8190556103e8600b8190556200001f91620001da565b6200002d90610fa0620001da565b600c556002600d556032600e55661550f7dca70000600f556010805460ff191660011790553480156200005f57600080fd5b50604080518082018252600c81526b4d794675636b696e6745676760a01b6020808301918252835180850190945260038452624d464560e81b908401528151919291620000af9160029162000134565b508051620000c590600390602084019062000134565b50506000805550620000d733620000e2565b60016009556200023e565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001429062000201565b90600052602060002090601f016020900481019282620001665760008555620001b1565b82601f106200018157805160ff1916838001178555620001b1565b82800160010185558215620001b1579182015b82811115620001b157825182559160200191906001019062000194565b50620001bf929150620001c3565b5090565b5b80821115620001bf5760008155600101620001c4565b60008219821115620001fc57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200021657607f821691505b602082108114156200023857634e487b7160e01b600052602260045260246000fd5b50919050565b611f0e806200024e6000396000f3fe6080604052600436106102045760003560e01c80638d859f3e11610118578063b8f7a665116100a0578063e8a3d4851161006f578063e8a3d4851461058e578063e985e9c5146105a3578063f2fde38b146105ec578063f43a22dc1461060c578063f676308a1461062257600080fd5b8063b8f7a6651461051f578063c87b56dd14610539578063d547cfb714610559578063dadfb0141461056e57600080fd5b806395d89b41116100e757806395d89b41146104a1578063a0712d68146104b6578063a22cb465146104c9578063a4a5e763146104e9578063b88d4fde146104ff57600080fd5b80638d859f3e1461042d5780638da5cb5b1461044357806391b7f5ed14610461578063938e3d7b1461048157600080fd5b806330176e131161019b5780635c40f6f41161016a5780635c40f6f4146103a35780636352211e146103c357806370a08231146103e3578063715018a614610403578063853828b61461041857600080fd5b806330176e131461033757806332cb6b0c1461035757806334bb95dc1461036d57806342842e0e1461038357600080fd5b8063081812fc116101d7578063081812fc146102a6578063095ea7b3146102de57806318160ddd146102fe57806323b872dd1461031757600080fd5b806301ffc9a71461020957806302ddb65b1461023e578063050225ea1461026257806306fdde0314610284575b600080fd5b34801561021557600080fd5b506102296102243660046119b3565b610642565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b50610254600a5481565b604051908152602001610235565b34801561026e57600080fd5b5061028261027d3660046119ec565b610694565b005b34801561029057600080fd5b506102996107bc565b6040516102359190611a6e565b3480156102b257600080fd5b506102c66102c1366004611a81565b61084e565b6040516001600160a01b039091168152602001610235565b3480156102ea57600080fd5b506102826102f93660046119ec565b610892565b34801561030a57600080fd5b5060015460005403610254565b34801561032357600080fd5b50610282610332366004611a9a565b610920565b34801561034357600080fd5b50610282610352366004611ad6565b61092b565b34801561036357600080fd5b50610254600c5481565b34801561037957600080fd5b50610254600d5481565b34801561038f57600080fd5b5061028261039e366004611a9a565b61099f565b3480156103af57600080fd5b506102826103be366004611b58565b6109ba565b3480156103cf57600080fd5b506102c66103de366004611a81565b6109f7565b3480156103ef57600080fd5b506102546103fe366004611b73565b610a09565b34801561040f57600080fd5b50610282610a58565b34801561042457600080fd5b50610282610a8e565b34801561043957600080fd5b50610254600f5481565b34801561044f57600080fd5b506008546001600160a01b03166102c6565b34801561046d57600080fd5b5061028261047c366004611a81565b610be7565b34801561048d57600080fd5b5061028261049c366004611ad6565b610c16565b3480156104ad57600080fd5b50610299610c7e565b6102826104c4366004611a81565b610c8d565b3480156104d557600080fd5b506102826104e4366004611b8e565b610e7e565b3480156104f557600080fd5b50610254600b5481565b34801561050b57600080fd5b5061028261051a366004611bd7565b610f14565b34801561052b57600080fd5b506010546102299060ff1681565b34801561054557600080fd5b50610299610554366004611a81565b610f65565b34801561056557600080fd5b50610299610f70565b34801561057a57600080fd5b50610254610589366004611b73565b610f7f565b34801561059a57600080fd5b50610299610fe2565b3480156105af57600080fd5b506102296105be366004611cb3565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156105f857600080fd5b50610282610607366004611b73565b610ff1565b34801561061857600080fd5b50610254600e5481565b34801561062e57600080fd5b5061028261063d366004611a81565b61108c565b60006001600160e01b031982166380ac58cd60e01b148061067357506001600160e01b03198216635b5e139f60e01b145b8061068e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b031633146106c75760405162461bcd60e51b81526004016106be90611cdd565b60405180910390fd5b600b54816106d86001546000540390565b6106e29190611d28565b11156107305760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c790060448201526064016106be565b600081116107805760405162461bcd60e51b815260206004820152601c60248201527f4d757374206d696e74206174206c65617374206f6e6520746f6b656e0000000060448201526064016106be565b6001600160a01b038216600090815260116020526040812080548392906107a8908490611d28565b909155506107b8905082826110bb565b5050565b6060600280546107cb90611d40565b80601f01602080910402602001604051908101604052809291908181526020018280546107f790611d40565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b6000610859826110d5565b610876576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061089d826109f7565b9050806001600160a01b0316836001600160a01b031614156108d25760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906108f257506108f081336105be565b155b15610910576040516367d9dca160e11b815260040160405180910390fd5b61091b838383611100565b505050565b61091b83838361115c565b6008546001600160a01b031633146109555760405162461bcd60e51b81526004016106be90611cdd565b61096160138383611904565b507f228a3ac0675af69daeaaa5b8d369fe2faae665e7f340f0b78ccbb84e17b4f6948282604051610993929190611d7b565b60405180910390a15050565b61091b83838360405180602001604052806000815250610f14565b6008546001600160a01b031633146109e45760405162461bcd60e51b81526004016106be90611cdd565b6010805460ff1916911515919091179055565b6000610a028261134c565b5192915050565b60006001600160a01b038216610a32576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610a825760405162461bcd60e51b81526004016106be90611cdd565b610a8c6000611468565b565b6008546001600160a01b03163314610ab85760405162461bcd60e51b81526004016106be90611cdd565b60006064610ac747605a611daa565b610ad19190611ddf565b905060006064610ae247600a611daa565b610aec9190611ddf565b604051909150733e0f25e2a320e1f2ccede9a417f93c52edaa33e79083156108fc029084906000818181858888f19350505050610b6b5760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f2073656e6420746f204f776e657200000000000000000060448201526064016106be565b60405173f7f1ed914edf6eac82736b5d384de6ee19d6f4299082156108fc029083906000818181858888f193505050506107b85760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f2073656e6420746f20446576656c6f706572000000000060448201526064016106be565b6008546001600160a01b03163314610c115760405162461bcd60e51b81526004016106be90611cdd565b600f55565b6008546001600160a01b03163314610c405760405162461bcd60e51b81526004016106be90611cdd565b610c4c60128383611904565b507fd5ee5eaf65263bab5d569890714d123ad48a9e54409d35e71d374f3dd300bba08282604051610993929190611d7b565b6060600380546107cb90611d40565b600f54600a54600090610ca1906001611d28565b83610caf6001546000540390565b610cb99190611d28565b108015610ce25750600d5433600090815260116020526040902054610cdf908590611d28565b11155b90508015610cef57600091505b610cf98284611daa565b341015610d485760405162461bcd60e51b815260206004820152601d60248201527f506c656173652073656e642074686520657861637420616d6f756e742e00000060448201526064016106be565b600c54610d56906001611d28565b83610d646001546000540390565b610d6e9190611d28565b10610da55760405162461bcd60e51b81526020600482015260076024820152664e6f206d6f726560c81b60448201526064016106be565b60105460ff16610df75760405162461bcd60e51b815260206004820152601760248201527f4d696e74696e67206973206e6f74206c6976652079657400000000000000000060448201526064016106be565b600e54610e05906001611d28565b8310610e495760405162461bcd60e51b815260206004820152601360248201527226b0bc103832b9102a2c103932b0b1b432b21760691b60448201526064016106be565b8015610e74573360009081526011602052604081208054859290610e6e908490611d28565b90915550505b61091b33846110bb565b6001600160a01b038216331415610ea85760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f1f84848461115c565b6001600160a01b0383163b15158015610f415750610f3f848484846114ba565b155b15610f5f576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b606061068e826115a3565b6060601380546107cb90611d40565b60006001600160a01b038216610fc65760405162461bcd60e51b815260206004820152600c60248201526b4e756c6c204164647265737360a01b60448201526064016106be565b506001600160a01b031660009081526011602052604090205490565b6060601280546107cb90611d40565b6008546001600160a01b0316331461101b5760405162461bcd60e51b81526004016106be90611cdd565b6001600160a01b0381166110805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106be565b61108981611468565b50565b6008546001600160a01b031633146110b65760405162461bcd60e51b81526004016106be90611cdd565b600a55565b6107b8828260405180602001604052806000815250611628565b600080548210801561068e575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006111678261134c565b9050836001600160a01b031681600001516001600160a01b03161461119e5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b03861614806111bc57506111bc85336105be565b806111d75750336111cc8461084e565b6001600160a01b0316145b9050806111f757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661121e57604051633a954ecd60e21b815260040160405180910390fd5b61122a60008487611100565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611300576000548214611300578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b60408051606081018252600080825260208201819052918101919091528160005481101561144f57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615159181018290529061144d5780516001600160a01b0316156113e3579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611448579392505050565b6113e3565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906114ef903390899088908890600401611df3565b6020604051808303816000875af192505050801561152a575060408051601f3d908101601f1916820190925261152791810190611e30565b60015b611585573d808015611558576040519150601f19603f3d011682016040523d82523d6000602084013e61155d565b606091505b50805161157d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60606115ae826110d5565b6115cb57604051630a14c4b560e41b815260040160405180910390fd5b60006115d5610f70565b90508051600014156115f65760405180602001604052806000815250611621565b8061160084611635565b604051602001611611929190611e4d565b6040516020818303038152906040525b9392505050565b61091b8383836001611733565b6060816116595750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611683578061166d81611e7c565b915061167c9050600a83611ddf565b915061165d565b60008167ffffffffffffffff81111561169e5761169e611bc1565b6040519080825280601f01601f1916602001820160405280156116c8576020820181803683370190505b5090505b841561159b576116dd600183611e97565b91506116ea600a86611eae565b6116f5906030611d28565b60f81b81838151811061170a5761170a611ec2565b60200101906001600160f81b031916908160001a90535061172c600a86611ddf565b94506116cc565b6000546001600160a01b03851661175c57604051622e076360e81b815260040160405180910390fd5b8361177a5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561182c57506001600160a01b0387163b15155b156118b5575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461187d60008884806001019550886114ba565b61189a576040516368d2bf6b60e11b815260040160405180910390fd5b808214156118325782600054146118b057600080fd5b6118fb565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156118b6575b50600055611345565b82805461191090611d40565b90600052602060002090601f0160209004810192826119325760008555611978565b82601f1061194b5782800160ff19823516178555611978565b82800160010185558215611978579182015b8281111561197857823582559160200191906001019061195d565b50611984929150611988565b5090565b5b808211156119845760008155600101611989565b6001600160e01b03198116811461108957600080fd5b6000602082840312156119c557600080fd5b81356116218161199d565b80356001600160a01b03811681146119e757600080fd5b919050565b600080604083850312156119ff57600080fd5b611a08836119d0565b946020939093013593505050565b60005b83811015611a31578181015183820152602001611a19565b83811115610f5f5750506000910152565b60008151808452611a5a816020860160208601611a16565b601f01601f19169290920160200192915050565b6020815260006116216020830184611a42565b600060208284031215611a9357600080fd5b5035919050565b600080600060608486031215611aaf57600080fd5b611ab8846119d0565b9250611ac6602085016119d0565b9150604084013590509250925092565b60008060208385031215611ae957600080fd5b823567ffffffffffffffff80821115611b0157600080fd5b818501915085601f830112611b1557600080fd5b813581811115611b2457600080fd5b866020828501011115611b3657600080fd5b60209290920196919550909350505050565b803580151581146119e757600080fd5b600060208284031215611b6a57600080fd5b61162182611b48565b600060208284031215611b8557600080fd5b611621826119d0565b60008060408385031215611ba157600080fd5b611baa836119d0565b9150611bb860208401611b48565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611bed57600080fd5b611bf6856119d0565b9350611c04602086016119d0565b925060408501359150606085013567ffffffffffffffff80821115611c2857600080fd5b818701915087601f830112611c3c57600080fd5b813581811115611c4e57611c4e611bc1565b604051601f8201601f19908116603f01168101908382118183101715611c7657611c76611bc1565b816040528281528a6020848701011115611c8f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611cc657600080fd5b611ccf836119d0565b9150611bb8602084016119d0565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611d3b57611d3b611d12565b500190565b600181811c90821680611d5457607f821691505b60208210811415611d7557634e487b7160e01b600052602260045260246000fd5b50919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000816000190483118215151615611dc457611dc4611d12565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611dee57611dee611dc9565b500490565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e2690830184611a42565b9695505050505050565b600060208284031215611e4257600080fd5b81516116218161199d565b60008351611e5f818460208801611a16565b835190830190611e73818360208801611a16565b01949350505050565b6000600019821415611e9057611e90611d12565b5060010190565b600082821015611ea957611ea9611d12565b500390565b600082611ebd57611ebd611dc9565b500690565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220654b10cbc03e7ae61c9c45b8de21f70ff35ec2d0a6665cfab4b36208cdd967a964736f6c634300080b0033
Deployed Bytecode
0x6080604052600436106102045760003560e01c80638d859f3e11610118578063b8f7a665116100a0578063e8a3d4851161006f578063e8a3d4851461058e578063e985e9c5146105a3578063f2fde38b146105ec578063f43a22dc1461060c578063f676308a1461062257600080fd5b8063b8f7a6651461051f578063c87b56dd14610539578063d547cfb714610559578063dadfb0141461056e57600080fd5b806395d89b41116100e757806395d89b41146104a1578063a0712d68146104b6578063a22cb465146104c9578063a4a5e763146104e9578063b88d4fde146104ff57600080fd5b80638d859f3e1461042d5780638da5cb5b1461044357806391b7f5ed14610461578063938e3d7b1461048157600080fd5b806330176e131161019b5780635c40f6f41161016a5780635c40f6f4146103a35780636352211e146103c357806370a08231146103e3578063715018a614610403578063853828b61461041857600080fd5b806330176e131461033757806332cb6b0c1461035757806334bb95dc1461036d57806342842e0e1461038357600080fd5b8063081812fc116101d7578063081812fc146102a6578063095ea7b3146102de57806318160ddd146102fe57806323b872dd1461031757600080fd5b806301ffc9a71461020957806302ddb65b1461023e578063050225ea1461026257806306fdde0314610284575b600080fd5b34801561021557600080fd5b506102296102243660046119b3565b610642565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b50610254600a5481565b604051908152602001610235565b34801561026e57600080fd5b5061028261027d3660046119ec565b610694565b005b34801561029057600080fd5b506102996107bc565b6040516102359190611a6e565b3480156102b257600080fd5b506102c66102c1366004611a81565b61084e565b6040516001600160a01b039091168152602001610235565b3480156102ea57600080fd5b506102826102f93660046119ec565b610892565b34801561030a57600080fd5b5060015460005403610254565b34801561032357600080fd5b50610282610332366004611a9a565b610920565b34801561034357600080fd5b50610282610352366004611ad6565b61092b565b34801561036357600080fd5b50610254600c5481565b34801561037957600080fd5b50610254600d5481565b34801561038f57600080fd5b5061028261039e366004611a9a565b61099f565b3480156103af57600080fd5b506102826103be366004611b58565b6109ba565b3480156103cf57600080fd5b506102c66103de366004611a81565b6109f7565b3480156103ef57600080fd5b506102546103fe366004611b73565b610a09565b34801561040f57600080fd5b50610282610a58565b34801561042457600080fd5b50610282610a8e565b34801561043957600080fd5b50610254600f5481565b34801561044f57600080fd5b506008546001600160a01b03166102c6565b34801561046d57600080fd5b5061028261047c366004611a81565b610be7565b34801561048d57600080fd5b5061028261049c366004611ad6565b610c16565b3480156104ad57600080fd5b50610299610c7e565b6102826104c4366004611a81565b610c8d565b3480156104d557600080fd5b506102826104e4366004611b8e565b610e7e565b3480156104f557600080fd5b50610254600b5481565b34801561050b57600080fd5b5061028261051a366004611bd7565b610f14565b34801561052b57600080fd5b506010546102299060ff1681565b34801561054557600080fd5b50610299610554366004611a81565b610f65565b34801561056557600080fd5b50610299610f70565b34801561057a57600080fd5b50610254610589366004611b73565b610f7f565b34801561059a57600080fd5b50610299610fe2565b3480156105af57600080fd5b506102296105be366004611cb3565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156105f857600080fd5b50610282610607366004611b73565b610ff1565b34801561061857600080fd5b50610254600e5481565b34801561062e57600080fd5b5061028261063d366004611a81565b61108c565b60006001600160e01b031982166380ac58cd60e01b148061067357506001600160e01b03198216635b5e139f60e01b145b8061068e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b031633146106c75760405162461bcd60e51b81526004016106be90611cdd565b60405180910390fd5b600b54816106d86001546000540390565b6106e29190611d28565b11156107305760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c790060448201526064016106be565b600081116107805760405162461bcd60e51b815260206004820152601c60248201527f4d757374206d696e74206174206c65617374206f6e6520746f6b656e0000000060448201526064016106be565b6001600160a01b038216600090815260116020526040812080548392906107a8908490611d28565b909155506107b8905082826110bb565b5050565b6060600280546107cb90611d40565b80601f01602080910402602001604051908101604052809291908181526020018280546107f790611d40565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b6000610859826110d5565b610876576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061089d826109f7565b9050806001600160a01b0316836001600160a01b031614156108d25760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906108f257506108f081336105be565b155b15610910576040516367d9dca160e11b815260040160405180910390fd5b61091b838383611100565b505050565b61091b83838361115c565b6008546001600160a01b031633146109555760405162461bcd60e51b81526004016106be90611cdd565b61096160138383611904565b507f228a3ac0675af69daeaaa5b8d369fe2faae665e7f340f0b78ccbb84e17b4f6948282604051610993929190611d7b565b60405180910390a15050565b61091b83838360405180602001604052806000815250610f14565b6008546001600160a01b031633146109e45760405162461bcd60e51b81526004016106be90611cdd565b6010805460ff1916911515919091179055565b6000610a028261134c565b5192915050565b60006001600160a01b038216610a32576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610a825760405162461bcd60e51b81526004016106be90611cdd565b610a8c6000611468565b565b6008546001600160a01b03163314610ab85760405162461bcd60e51b81526004016106be90611cdd565b60006064610ac747605a611daa565b610ad19190611ddf565b905060006064610ae247600a611daa565b610aec9190611ddf565b604051909150733e0f25e2a320e1f2ccede9a417f93c52edaa33e79083156108fc029084906000818181858888f19350505050610b6b5760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f2073656e6420746f204f776e657200000000000000000060448201526064016106be565b60405173f7f1ed914edf6eac82736b5d384de6ee19d6f4299082156108fc029083906000818181858888f193505050506107b85760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f2073656e6420746f20446576656c6f706572000000000060448201526064016106be565b6008546001600160a01b03163314610c115760405162461bcd60e51b81526004016106be90611cdd565b600f55565b6008546001600160a01b03163314610c405760405162461bcd60e51b81526004016106be90611cdd565b610c4c60128383611904565b507fd5ee5eaf65263bab5d569890714d123ad48a9e54409d35e71d374f3dd300bba08282604051610993929190611d7b565b6060600380546107cb90611d40565b600f54600a54600090610ca1906001611d28565b83610caf6001546000540390565b610cb99190611d28565b108015610ce25750600d5433600090815260116020526040902054610cdf908590611d28565b11155b90508015610cef57600091505b610cf98284611daa565b341015610d485760405162461bcd60e51b815260206004820152601d60248201527f506c656173652073656e642074686520657861637420616d6f756e742e00000060448201526064016106be565b600c54610d56906001611d28565b83610d646001546000540390565b610d6e9190611d28565b10610da55760405162461bcd60e51b81526020600482015260076024820152664e6f206d6f726560c81b60448201526064016106be565b60105460ff16610df75760405162461bcd60e51b815260206004820152601760248201527f4d696e74696e67206973206e6f74206c6976652079657400000000000000000060448201526064016106be565b600e54610e05906001611d28565b8310610e495760405162461bcd60e51b815260206004820152601360248201527226b0bc103832b9102a2c103932b0b1b432b21760691b60448201526064016106be565b8015610e74573360009081526011602052604081208054859290610e6e908490611d28565b90915550505b61091b33846110bb565b6001600160a01b038216331415610ea85760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f1f84848461115c565b6001600160a01b0383163b15158015610f415750610f3f848484846114ba565b155b15610f5f576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b606061068e826115a3565b6060601380546107cb90611d40565b60006001600160a01b038216610fc65760405162461bcd60e51b815260206004820152600c60248201526b4e756c6c204164647265737360a01b60448201526064016106be565b506001600160a01b031660009081526011602052604090205490565b6060601280546107cb90611d40565b6008546001600160a01b0316331461101b5760405162461bcd60e51b81526004016106be90611cdd565b6001600160a01b0381166110805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106be565b61108981611468565b50565b6008546001600160a01b031633146110b65760405162461bcd60e51b81526004016106be90611cdd565b600a55565b6107b8828260405180602001604052806000815250611628565b600080548210801561068e575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006111678261134c565b9050836001600160a01b031681600001516001600160a01b03161461119e5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b03861614806111bc57506111bc85336105be565b806111d75750336111cc8461084e565b6001600160a01b0316145b9050806111f757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661121e57604051633a954ecd60e21b815260040160405180910390fd5b61122a60008487611100565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611300576000548214611300578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b60408051606081018252600080825260208201819052918101919091528160005481101561144f57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615159181018290529061144d5780516001600160a01b0316156113e3579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611448579392505050565b6113e3565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906114ef903390899088908890600401611df3565b6020604051808303816000875af192505050801561152a575060408051601f3d908101601f1916820190925261152791810190611e30565b60015b611585573d808015611558576040519150601f19603f3d011682016040523d82523d6000602084013e61155d565b606091505b50805161157d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60606115ae826110d5565b6115cb57604051630a14c4b560e41b815260040160405180910390fd5b60006115d5610f70565b90508051600014156115f65760405180602001604052806000815250611621565b8061160084611635565b604051602001611611929190611e4d565b6040516020818303038152906040525b9392505050565b61091b8383836001611733565b6060816116595750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611683578061166d81611e7c565b915061167c9050600a83611ddf565b915061165d565b60008167ffffffffffffffff81111561169e5761169e611bc1565b6040519080825280601f01601f1916602001820160405280156116c8576020820181803683370190505b5090505b841561159b576116dd600183611e97565b91506116ea600a86611eae565b6116f5906030611d28565b60f81b81838151811061170a5761170a611ec2565b60200101906001600160f81b031916908160001a90535061172c600a86611ddf565b94506116cc565b6000546001600160a01b03851661175c57604051622e076360e81b815260040160405180910390fd5b8361177a5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561182c57506001600160a01b0387163b15155b156118b5575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461187d60008884806001019550886114ba565b61189a576040516368d2bf6b60e11b815260040160405180910390fd5b808214156118325782600054146118b057600080fd5b6118fb565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156118b6575b50600055611345565b82805461191090611d40565b90600052602060002090601f0160209004810192826119325760008555611978565b82601f1061194b5782800160ff19823516178555611978565b82800160010185558215611978579182015b8281111561197857823582559160200191906001019061195d565b50611984929150611988565b5090565b5b808211156119845760008155600101611989565b6001600160e01b03198116811461108957600080fd5b6000602082840312156119c557600080fd5b81356116218161199d565b80356001600160a01b03811681146119e757600080fd5b919050565b600080604083850312156119ff57600080fd5b611a08836119d0565b946020939093013593505050565b60005b83811015611a31578181015183820152602001611a19565b83811115610f5f5750506000910152565b60008151808452611a5a816020860160208601611a16565b601f01601f19169290920160200192915050565b6020815260006116216020830184611a42565b600060208284031215611a9357600080fd5b5035919050565b600080600060608486031215611aaf57600080fd5b611ab8846119d0565b9250611ac6602085016119d0565b9150604084013590509250925092565b60008060208385031215611ae957600080fd5b823567ffffffffffffffff80821115611b0157600080fd5b818501915085601f830112611b1557600080fd5b813581811115611b2457600080fd5b866020828501011115611b3657600080fd5b60209290920196919550909350505050565b803580151581146119e757600080fd5b600060208284031215611b6a57600080fd5b61162182611b48565b600060208284031215611b8557600080fd5b611621826119d0565b60008060408385031215611ba157600080fd5b611baa836119d0565b9150611bb860208401611b48565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611bed57600080fd5b611bf6856119d0565b9350611c04602086016119d0565b925060408501359150606085013567ffffffffffffffff80821115611c2857600080fd5b818701915087601f830112611c3c57600080fd5b813581811115611c4e57611c4e611bc1565b604051601f8201601f19908116603f01168101908382118183101715611c7657611c76611bc1565b816040528281528a6020848701011115611c8f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060408385031215611cc657600080fd5b611ccf836119d0565b9150611bb8602084016119d0565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611d3b57611d3b611d12565b500190565b600181811c90821680611d5457607f821691505b60208210811415611d7557634e487b7160e01b600052602260045260246000fd5b50919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000816000190483118215151615611dc457611dc4611d12565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611dee57611dee611dc9565b500490565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e2690830184611a42565b9695505050505050565b600060208284031215611e4257600080fd5b81516116218161199d565b60008351611e5f818460208801611a16565b835190830190611e73818360208801611a16565b01949350505050565b6000600019821415611e9057611e90611d12565b5060010190565b600082821015611ea957611ea9611d12565b500390565b600082611ebd57611ebd611dc9565b500690565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220654b10cbc03e7ae61c9c45b8de21f70ff35ec2d0a6665cfab4b36208cdd967a964736f6c634300080b0033
Deployed Bytecode Sourcemap
47559:5047:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29812:305;;;;;;;;;;-1:-1:-1;29812:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;29812:305:0;;;;;;;;47767:37;;;;;;;;;;;;;;;;;;;738:25:1;;;726:2;711:18;47767:37:0;592:177:1;50319:318:0;;;;;;;;;;-1:-1:-1;50319:318:0;;;;;:::i;:::-;;:::i;:::-;;32925:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34428:204::-;;;;;;;;;;-1:-1:-1;34428:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2311:32:1;;;2293:51;;2281:2;2266:18;34428:204:0;2147:203:1;33991:371:0;;;;;;;;;;-1:-1:-1;33991:371:0;;;;;:::i;:::-;;:::i;29061:303::-;;;;;;;;;;-1:-1:-1;29315:12:0;;29105:7;29299:13;:28;29061:303;;35293:170;;;;;;;;;;-1:-1:-1;35293:170:0;;;;;:::i;:::-;;:::i;51387:143::-;;;;;;;;;;-1:-1:-1;51387:143:0;;;;;:::i;:::-;;:::i;47859:71::-;;;;;;;;;;;;;;;;47940:38;;;;;;;;;;;;;;;;35534:185;;;;;;;;;;-1:-1:-1;35534:185:0;;;;;:::i;:::-;;:::i;49368:87::-;;;;;;;;;;-1:-1:-1;49368:87:0;;;;;:::i;:::-;;:::i;32733:125::-;;;;;;;;;;-1:-1:-1;32733:125:0;;;;;:::i;:::-;;:::i;30181:206::-;;;;;;;;;;-1:-1:-1;30181:206:0;;;;;:::i;:::-;;:::i;7559:103::-;;;;;;;;;;;;;:::i;52265:325::-;;;;;;;;;;;;;:::i;48026:34::-;;;;;;;;;;;;;;;;6908:87;;;;;;;;;;-1:-1:-1;6981:6:0;;-1:-1:-1;;;;;6981:6:0;6908:87;;51009:88;;;;;;;;;;-1:-1:-1;51009:88:0;;;;;:::i;:::-;;:::i;50861:140::-;;;;;;;;;;-1:-1:-1;50861:140:0;;;;;:::i;:::-;;:::i;33094:104::-;;;;;;;;;;;;;:::i;49576:717::-;;;;;;:::i;:::-;;:::i;34704:287::-;;;;;;;;;;-1:-1:-1;34704:287:0;;;;;:::i;:::-;;:::i;47812:40::-;;;;;;;;;;;;;;;;35790:369;;;;;;;;;;-1:-1:-1;35790:369:0;;;;;:::i;:::-;;:::i;48447:25::-;;;;;;;;;;-1:-1:-1;48447:25:0;;;;;;;;51958:129;;;;;;;;;;-1:-1:-1;51958:129:0;;;;;:::i;:::-;;:::i;51851:99::-;;;;;;;;;;;;;:::i;48655:171::-;;;;;;;;;;-1:-1:-1;48655:171:0;;;;;:::i;:::-;;:::i;51137:97::-;;;;;;;;;;;;;:::i;35062:164::-;;;;;;;;;;-1:-1:-1;35062:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;35183:25:0;;;35159:4;35183:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;35062:164;7817:201;;;;;;;;;;-1:-1:-1;7817:201:0;;;;;:::i;:::-;;:::i;47986:30::-;;;;;;;;;;;;;;;;49463:105;;;;;;;;;;-1:-1:-1;49463:105:0;;;;;:::i;:::-;;:::i;29812:305::-;29914:4;-1:-1:-1;;;;;;29951:40:0;;-1:-1:-1;;;29951:40:0;;:105;;-1:-1:-1;;;;;;;30008:48:0;;-1:-1:-1;;;30008:48:0;29951:105;:158;;;-1:-1:-1;;;;;;;;;;19824:40:0;;;30073:36;29931:178;29812:305;-1:-1:-1;;29812:305:0:o;50319:318::-;6981:6;;-1:-1:-1;;;;;6981:6:0;5712:10;7128:23;7120:68;;;;-1:-1:-1;;;7120:68:0;;;;;;;:::i;:::-;;;;;;;;;50433:18:::1;;50421:8;50405:13;29315:12:::0;;29105:7;29299:13;:28;;29061:303;50405:13:::1;:24;;;;:::i;:::-;:46;;50397:90;;;::::0;-1:-1:-1;;;50397:90:0;;6453:2:1;50397:90:0::1;::::0;::::1;6435:21:1::0;6492:2;6472:18;;;6465:30;6531:33;6511:18;;;6504:61;6582:18;;50397:90:0::1;6251:355:1::0;50397:90:0::1;50517:1;50506:8;:12;50498:53;;;::::0;-1:-1:-1;;;50498:53:0;;6813:2:1;50498:53:0::1;::::0;::::1;6795:21:1::0;6852:2;6832:18;;;6825:30;6891;6871:18;;;6864:58;6939:18;;50498:53:0::1;6611:352:1::0;50498:53:0::1;-1:-1:-1::0;;;;;50562:21:0;::::1;;::::0;;;:17:::1;:21;::::0;;;;:33;;50587:8;;50562:21;:33:::1;::::0;50587:8;;50562:33:::1;:::i;:::-;::::0;;;-1:-1:-1;50606:23:0::1;::::0;-1:-1:-1;50616:2:0;50620:8;50606:9:::1;:23::i;:::-;50319:318:::0;;:::o;32925:100::-;32979:13;33012:5;33005:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32925:100;:::o;34428:204::-;34496:7;34521:16;34529:7;34521;:16::i;:::-;34516:64;;34546:34;;-1:-1:-1;;;34546:34:0;;;;;;;;;;;34516:64;-1:-1:-1;34600:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;34600:24:0;;34428:204::o;33991:371::-;34064:13;34080:24;34096:7;34080:15;:24::i;:::-;34064:40;;34125:5;-1:-1:-1;;;;;34119:11:0;:2;-1:-1:-1;;;;;34119:11:0;;34115:48;;;34139:24;;-1:-1:-1;;;34139:24:0;;;;;;;;;;;34115:48;5712:10;-1:-1:-1;;;;;34180:21:0;;;;;;:63;;-1:-1:-1;34206:37:0;34223:5;5712:10;35062:164;:::i;34206:37::-;34205:38;34180:63;34176:138;;;34267:35;;-1:-1:-1;;;34267:35:0;;;;;;;;;;;34176:138;34326:28;34335:2;34339:7;34348:5;34326:8;:28::i;:::-;34053:309;33991:371;;:::o;35293:170::-;35427:28;35437:4;35443:2;35447:7;35427:9;:28::i;51387:143::-;6981:6;;-1:-1:-1;;;;;6981:6:0;5712:10;7128:23;7120:68;;;;-1:-1:-1;;;7120:68:0;;;;;;;:::i;:::-;51463:19:::1;:13;51479:3:::0;;51463:19:::1;:::i;:::-;;51498:24;51518:3;;51498:24;;;;;;;:::i;:::-;;;;;;;;51387:143:::0;;:::o;35534:185::-;35672:39;35689:4;35695:2;35699:7;35672:39;;;;;;;;;;;;:16;:39::i;49368:87::-;6981:6;;-1:-1:-1;;;;;6981:6:0;5712:10;7128:23;7120:68;;;;-1:-1:-1;;;7120:68:0;;;;;;;:::i;:::-;49431:6:::1;:16:::0;;-1:-1:-1;;49431:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49368:87::o;32733:125::-;32797:7;32824:21;32837:7;32824:12;:21::i;:::-;:26;;32733:125;-1:-1:-1;;32733:125:0:o;30181:206::-;30245:7;-1:-1:-1;;;;;30269:19:0;;30265:60;;30297:28;;-1:-1:-1;;;30297:28:0;;;;;;;;;;;30265:60;-1:-1:-1;;;;;;30351:19:0;;;;;:12;:19;;;;;:27;;;;30181:206::o;7559:103::-;6981:6;;-1:-1:-1;;;;;6981:6:0;5712:10;7128:23;7120:68;;;;-1:-1:-1;;;7120:68:0;;;;;;;:::i;:::-;7624:30:::1;7651:1;7624:18;:30::i;:::-;7559:103::o:0;52265:325::-;6981:6;;-1:-1:-1;;;;;6981:6:0;5712:10;7128:23;7120:68;;;;-1:-1:-1;;;7120:68:0;;;;;;;:::i;:::-;52318:14:::1;52362:3;52335:26;:21;52359:2;52335:26;:::i;:::-;:30;;;;:::i;:::-;52318:47:::0;-1:-1:-1;52376:14:0::1;52420:3;52393:26;:21;52417:2;52393:26;:::i;:::-;:30;;;;:::i;:::-;52444:28;::::0;52376:47;;-1:-1:-1;48207:42:0::1;::::0;52444:28;::::1;;;::::0;52462:9;;52444:28:::1;::::0;;;52462:9;48207:42;52444:28;::::1;;;;;;52436:64;;;::::0;-1:-1:-1;;;52436:64:0;;8380:2:1;52436:64:0::1;::::0;::::1;8362:21:1::0;8419:2;8399:18;;;8392:30;8458:25;8438:18;;;8431:53;8501:18;;52436:64:0::1;8178:347:1::0;52436:64:0::1;52519:28;::::0;48288:42:::1;::::0;52519:28;::::1;;;::::0;52537:9;;52519:28:::1;::::0;;;52537:9;48288:42;52519:28;::::1;;;;;;52511:68;;;::::0;-1:-1:-1;;;52511:68:0;;8732:2:1;52511:68:0::1;::::0;::::1;8714:21:1::0;8771:2;8751:18;;;8744:30;8810:29;8790:18;;;8783:57;8857:18;;52511:68:0::1;8530:351:1::0;51009:88:0;6981:6;;-1:-1:-1;;;;;6981:6:0;5712:10;7128:23;7120:68;;;;-1:-1:-1;;;7120:68:0;;;;;;;:::i;:::-;51073:5:::1;:16:::0;51009:88::o;50861:140::-;6981:6;;-1:-1:-1;;;;;6981:6:0;5712:10;7128:23;7120:68;;;;-1:-1:-1;;;7120:68:0;;;;;;;:::i;:::-;50936:18:::1;:12;50951:3:::0;;50936:18:::1;:::i;:::-;;50970:23;50989:3;;50970:23;;;;;;;:::i;33094:104::-:0;33150:13;33183:7;33176:14;;;;;:::i;49576:717::-;49653:5;;49712:15;;49638:12;;49712:18;;49729:1;49712:18;:::i;:::-;49701:8;49685:13;29315:12;;29105:7;29299:13;:28;;29061:303;49685:13;:24;;;;:::i;:::-;:45;49684:129;;;;-1:-1:-1;49793:19:0;;49767:10;49749:29;;;;:17;:29;;;;;;:40;;49781:8;;49749:40;:::i;:::-;:63;;49684:129;49669:145;;49831:6;49827:47;;;49861:1;49854:8;;49827:47;49907:15;49918:4;49907:8;:15;:::i;:::-;49894:9;:28;;49886:70;;;;-1:-1:-1;;;49886:70:0;;9088:2:1;49886:70:0;;;9070:21:1;9127:2;9107:18;;;9100:30;9166:31;9146:18;;;9139:59;9215:18;;49886:70:0;8886:353:1;49886:70:0;50002:10;;:14;;50015:1;50002:14;:::i;:::-;49991:8;49975:13;29315:12;;29105:7;29299:13;:28;;29061:303;49975:13;:24;;;;:::i;:::-;:41;49967:61;;;;-1:-1:-1;;;49967:61:0;;9446:2:1;49967:61:0;;;9428:21:1;9485:1;9465:18;;;9458:29;-1:-1:-1;;;9503:18:1;;;9496:37;9550:18;;49967:61:0;9244:330:1;49967:61:0;50047:6;;;;50039:42;;;;-1:-1:-1;;;50039:42:0;;9781:2:1;50039:42:0;;;9763:21:1;9820:2;9800:18;;;9793:30;9859:25;9839:18;;;9832:53;9902:18;;50039:42:0;9579:347:1;50039:42:0;50111:10;;:14;;50124:1;50111:14;:::i;:::-;50100:8;:25;50092:57;;;;-1:-1:-1;;;50092:57:0;;10133:2:1;50092:57:0;;;10115:21:1;10172:2;10152:18;;;10145:30;-1:-1:-1;;;10191:18:1;;;10184:49;10250:18;;50092:57:0;9931:343:1;50092:57:0;50166:6;50162:80;;;50207:10;50189:29;;;;:17;:29;;;;;:41;;50222:8;;50189:29;:41;;50222:8;;50189:41;:::i;:::-;;;;-1:-1:-1;;50162:80:0;50254:31;50264:10;50276:8;50254:9;:31::i;34704:287::-;-1:-1:-1;;;;;34803:24:0;;5712:10;34803:24;34799:54;;;34836:17;;-1:-1:-1;;;34836:17:0;;;;;;;;;;;34799:54;5712:10;34866:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;34866:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;34866:53:0;;;;;;;;;;34935:48;;540:41:1;;;34866:42:0;;5712:10;34935:48;;513:18:1;34935:48:0;;;;;;;34704:287;;:::o;35790:369::-;35957:28;35967:4;35973:2;35977:7;35957:9;:28::i;:::-;-1:-1:-1;;;;;36000:13:0;;9904:19;:23;;36000:76;;;;;36020:56;36051:4;36057:2;36061:7;36070:5;36020:30;:56::i;:::-;36019:57;36000:76;35996:156;;;36100:40;;-1:-1:-1;;;36100:40:0;;;;;;;;;;;35996:156;35790:369;;;;:::o;51958:129::-;52023:13;52056:23;52071:7;52056:14;:23::i;51851:99::-;51896:13;51929;51922:20;;;;;:::i;48655:171::-;48714:7;-1:-1:-1;;;;;48742:18:0;;48734:43;;;;-1:-1:-1;;;48734:43:0;;10481:2:1;48734:43:0;;;10463:21:1;10520:2;10500:18;;;10493:30;-1:-1:-1;;;10539:18:1;;;10532:42;10591:18;;48734:43:0;10279:336:1;48734:43:0;-1:-1:-1;;;;;;48795:23:0;;;;;:17;:23;;;;;;;48655:171::o;51137:97::-;51181:13;51214:12;51207:19;;;;;:::i;7817:201::-;6981:6;;-1:-1:-1;;;;;6981:6:0;5712:10;7128:23;7120:68;;;;-1:-1:-1;;;7120:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7906:22:0;::::1;7898:73;;;::::0;-1:-1:-1;;;7898:73:0;;10822:2:1;7898:73:0::1;::::0;::::1;10804:21:1::0;10861:2;10841:18;;;10834:30;10900:34;10880:18;;;10873:62;-1:-1:-1;;;10951:18:1;;;10944:36;10997:19;;7898:73:0::1;10620:402:1::0;7898:73:0::1;7982:28;8001:8;7982:18;:28::i;:::-;7817:201:::0;:::o;49463:105::-;6981:6;;-1:-1:-1;;;;;6981:6:0;5712:10;7128:23;7120:68;;;;-1:-1:-1;;;7120:68:0;;;;;;;:::i;:::-;49533:15:::1;:27:::0;49463:105::o;36596:104::-;36665:27;36675:2;36679:8;36665:27;;;;;;;;;;;;:9;:27::i;36414:174::-;36471:4;36535:13;;36525:7;:23;36495:85;;;;-1:-1:-1;;36553:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;36553:27:0;;;;36552:28;;36414:174::o;44571:196::-;44686:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;44686:29:0;-1:-1:-1;;;;;44686:29:0;;;;;;;;;44731:28;;44686:24;;44731:28;;;;;;;44571:196;;;:::o;39514:2130::-;39629:35;39667:21;39680:7;39667:12;:21::i;:::-;39629:59;;39727:4;-1:-1:-1;;;;;39705:26:0;:13;:18;;;-1:-1:-1;;;;;39705:26:0;;39701:67;;39740:28;;-1:-1:-1;;;39740:28:0;;;;;;;;;;;39701:67;39781:22;5712:10;-1:-1:-1;;;;;39807:20:0;;;;:73;;-1:-1:-1;39844:36:0;39861:4;5712:10;35062:164;:::i;39844:36::-;39807:126;;;-1:-1:-1;5712:10:0;39897:20;39909:7;39897:11;:20::i;:::-;-1:-1:-1;;;;;39897:36:0;;39807:126;39781:153;;39952:17;39947:66;;39978:35;;-1:-1:-1;;;39978:35:0;;;;;;;;;;;39947:66;-1:-1:-1;;;;;40028:16:0;;40024:52;;40053:23;;-1:-1:-1;;;40053:23:0;;;;;;;;;;;40024:52;40197:35;40214:1;40218:7;40227:4;40197:8;:35::i;:::-;-1:-1:-1;;;;;40528:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;40528:31:0;;;;;;;-1:-1:-1;;40528:31:0;;;;;;;40574:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;40574:29:0;;;;;;;;;;;40654:20;;;:11;:20;;;;;;40689:18;;-1:-1:-1;;;;;;40722:49:0;;;;-1:-1:-1;;;40755:15:0;40722:49;;;;;;;;;;41045:11;;41105:24;;;;;41148:13;;40654:20;;41105:24;;41148:13;41144:384;;41358:13;;41343:11;:28;41339:174;;41396:20;;41465:28;;;;41439:54;;-1:-1:-1;;;41439:54:0;-1:-1:-1;;;;;;41439:54:0;;;-1:-1:-1;;;;;41396:20:0;;41439:54;;;;41339:174;40503:1036;;;41575:7;41571:2;-1:-1:-1;;;;;41556:27:0;41565:4;-1:-1:-1;;;;;41556:27:0;;;;;;;;;;;41594:42;39618:2026;;39514:2130;;;:::o;31562:1109::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;31673:7:0;31756:13;;31749:4;:20;31718:886;;;31790:31;31824:17;;;:11;:17;;;;;;;;;31790:51;;;;;;;;;-1:-1:-1;;;;;31790:51:0;;;;-1:-1:-1;;;31790:51:0;;;;;;;;;;;-1:-1:-1;;;31790:51:0;;;;;;;;;;;;;;31860:729;;31910:14;;-1:-1:-1;;;;;31910:28:0;;31906:101;;31974:9;31562:1109;-1:-1:-1;;;31562:1109:0:o;31906:101::-;-1:-1:-1;;;32349:6:0;32394:17;;;;:11;:17;;;;;;;;;32382:29;;;;;;;;;-1:-1:-1;;;;;32382:29:0;;;;;-1:-1:-1;;;32382:29:0;;;;;;;;;;;-1:-1:-1;;;32382:29:0;;;;;;;;;;;;;32442:28;32438:109;;32510:9;31562:1109;-1:-1:-1;;;31562:1109:0:o;32438:109::-;32309:261;;;31771:833;31718:886;32632:31;;-1:-1:-1;;;32632:31:0;;;;;;;;;;;8178:191;8271:6;;;-1:-1:-1;;;;;8288:17:0;;;-1:-1:-1;;;;;;8288:17:0;;;;;;;8321:40;;8271:6;;;8288:17;8271:6;;8321:40;;8252:16;;8321:40;8241:128;8178:191;:::o;45259:667::-;45443:72;;-1:-1:-1;;;45443:72:0;;45422:4;;-1:-1:-1;;;;;45443:36:0;;;;;:72;;5712:10;;45494:4;;45500:7;;45509:5;;45443:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45443:72:0;;;;;;;;-1:-1:-1;;45443:72:0;;;;;;;;;;;;:::i;:::-;;;45439:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45677:13:0;;45673:235;;45723:40;;-1:-1:-1;;;45723:40:0;;;;;;;;;;;45673:235;45866:6;45860:13;45851:6;45847:2;45843:15;45836:38;45439:480;-1:-1:-1;;;;;;45562:55:0;-1:-1:-1;;;45562:55:0;;-1:-1:-1;45439:480:0;45259:667;;;;;;:::o;33269:318::-;33342:13;33373:16;33381:7;33373;:16::i;:::-;33368:59;;33398:29;;-1:-1:-1;;;33398:29:0;;;;;;;;;;;33368:59;33440:21;33464:10;:8;:10::i;:::-;33440:34;;33498:7;33492:21;33517:1;33492:26;;:87;;;;;;;;;;;;;;;;;33545:7;33554:18;:7;:16;:18::i;:::-;33528:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33492:87;33485:94;33269:318;-1:-1:-1;;;33269:318:0:o;37063:163::-;37186:32;37192:2;37196:8;37206:5;37213:4;37186:5;:32::i;3194:723::-;3250:13;3471:10;3467:53;;-1:-1:-1;;3498:10:0;;;;;;;;;;;;-1:-1:-1;;;3498:10:0;;;;;3194:723::o;3467:53::-;3545:5;3530:12;3586:78;3593:9;;3586:78;;3619:8;;;;:::i;:::-;;-1:-1:-1;3642:10:0;;-1:-1:-1;3650:2:0;3642:10;;:::i;:::-;;;3586:78;;;3674:19;3706:6;3696:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3696:17:0;;3674:39;;3724:154;3731:10;;3724:154;;3758:11;3768:1;3758:11;;:::i;:::-;;-1:-1:-1;3827:10:0;3835:2;3827:5;:10;:::i;:::-;3814:24;;:2;:24;:::i;:::-;3801:39;;3784:6;3791;3784:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3784:56:0;;;;;;;;-1:-1:-1;3855:11:0;3864:2;3855:11;;:::i;:::-;;;3724:154;;37485:1775;37624:20;37647:13;-1:-1:-1;;;;;37675:16:0;;37671:48;;37700:19;;-1:-1:-1;;;37700:19:0;;;;;;;;;;;37671:48;37734:13;37730:44;;37756:18;;-1:-1:-1;;;37756:18:0;;;;;;;;;;;37730:44;-1:-1:-1;;;;;38125:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;38184:49:0;;38125:44;;;;;;;;38184:49;;;;-1:-1:-1;;38125:44:0;;;;;;38184:49;;;;;;;;;;;;;;;;38250:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;38300:66:0;;;;-1:-1:-1;;;38350:15:0;38300:66;;;;;;;;;;38250:25;38447:23;;;38491:4;:23;;;;-1:-1:-1;;;;;;38499:13:0;;9904:19;:23;;38499:15;38487:641;;;38535:314;38566:38;;38591:12;;-1:-1:-1;;;;;38566:38:0;;;38583:1;;38566:38;;38583:1;;38566:38;38632:69;38671:1;38675:2;38679:14;;;;;;38695:5;38632:30;:69::i;:::-;38627:174;;38737:40;;-1:-1:-1;;;38737:40:0;;;;;;;;;;;38627:174;38844:3;38828:12;:19;;38535:314;;38930:12;38913:13;;:29;38909:43;;38944:8;;;38909:43;38487:641;;;38993:120;39024:40;;39049:14;;;;;-1:-1:-1;;;;;39024:40:0;;;39041:1;;39024:40;;39041:1;;39024:40;39108:3;39092:12;:19;;38993:120;;38487:641;-1:-1:-1;39142:13:0;:28;39192:60;35790:369;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;774:173::-;842:20;;-1:-1:-1;;;;;891:31:1;;881:42;;871:70;;937:1;934;927:12;871:70;774:173;;;:::o;952:254::-;1020:6;1028;1081:2;1069:9;1060:7;1056:23;1052:32;1049:52;;;1097:1;1094;1087:12;1049:52;1120:29;1139:9;1120:29;:::i;:::-;1110:39;1196:2;1181:18;;;;1168:32;;-1:-1:-1;;;952:254:1:o;1211:258::-;1283:1;1293:113;1307:6;1304:1;1301:13;1293:113;;;1383:11;;;1377:18;1364:11;;;1357:39;1329:2;1322:10;1293:113;;;1424:6;1421:1;1418:13;1415:48;;;-1:-1:-1;;1459:1:1;1441:16;;1434:27;1211:258::o;1474:::-;1516:3;1554:5;1548:12;1581:6;1576:3;1569:19;1597:63;1653:6;1646:4;1641:3;1637:14;1630:4;1623:5;1619:16;1597:63;:::i;:::-;1714:2;1693:15;-1:-1:-1;;1689:29:1;1680:39;;;;1721:4;1676:50;;1474:258;-1:-1:-1;;1474:258:1:o;1737:220::-;1886:2;1875:9;1868:21;1849:4;1906:45;1947:2;1936:9;1932:18;1924:6;1906:45;:::i;1962:180::-;2021:6;2074:2;2062:9;2053:7;2049:23;2045:32;2042:52;;;2090:1;2087;2080:12;2042:52;-1:-1:-1;2113:23:1;;1962:180;-1:-1:-1;1962:180:1:o;2355:328::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2540:29;2559:9;2540:29;:::i;:::-;2530:39;;2588:38;2622:2;2611:9;2607:18;2588:38;:::i;:::-;2578:48;;2673:2;2662:9;2658:18;2645:32;2635:42;;2355:328;;;;;:::o;2688:592::-;2759:6;2767;2820:2;2808:9;2799:7;2795:23;2791:32;2788:52;;;2836:1;2833;2826:12;2788:52;2876:9;2863:23;2905:18;2946:2;2938:6;2935:14;2932:34;;;2962:1;2959;2952:12;2932:34;3000:6;2989:9;2985:22;2975:32;;3045:7;3038:4;3034:2;3030:13;3026:27;3016:55;;3067:1;3064;3057:12;3016:55;3107:2;3094:16;3133:2;3125:6;3122:14;3119:34;;;3149:1;3146;3139:12;3119:34;3194:7;3189:2;3180:6;3176:2;3172:15;3168:24;3165:37;3162:57;;;3215:1;3212;3205:12;3162:57;3246:2;3238:11;;;;;3268:6;;-1:-1:-1;2688:592:1;;-1:-1:-1;;;;2688:592:1:o;3285:160::-;3350:20;;3406:13;;3399:21;3389:32;;3379:60;;3435:1;3432;3425:12;3450:180;3506:6;3559:2;3547:9;3538:7;3534:23;3530:32;3527:52;;;3575:1;3572;3565:12;3527:52;3598:26;3614:9;3598:26;:::i;3635:186::-;3694:6;3747:2;3735:9;3726:7;3722:23;3718:32;3715:52;;;3763:1;3760;3753:12;3715:52;3786:29;3805:9;3786:29;:::i;3826:254::-;3891:6;3899;3952:2;3940:9;3931:7;3927:23;3923:32;3920:52;;;3968:1;3965;3958:12;3920:52;3991:29;4010:9;3991:29;:::i;:::-;3981:39;;4039:35;4070:2;4059:9;4055:18;4039:35;:::i;:::-;4029:45;;3826:254;;;;;:::o;4085:127::-;4146:10;4141:3;4137:20;4134:1;4127:31;4177:4;4174:1;4167:15;4201:4;4198:1;4191:15;4217:1138;4312:6;4320;4328;4336;4389:3;4377:9;4368:7;4364:23;4360:33;4357:53;;;4406:1;4403;4396:12;4357:53;4429:29;4448:9;4429:29;:::i;:::-;4419:39;;4477:38;4511:2;4500:9;4496:18;4477:38;:::i;:::-;4467:48;;4562:2;4551:9;4547:18;4534:32;4524:42;;4617:2;4606:9;4602:18;4589:32;4640:18;4681:2;4673:6;4670:14;4667:34;;;4697:1;4694;4687:12;4667:34;4735:6;4724:9;4720:22;4710:32;;4780:7;4773:4;4769:2;4765:13;4761:27;4751:55;;4802:1;4799;4792:12;4751:55;4838:2;4825:16;4860:2;4856;4853:10;4850:36;;;4866:18;;:::i;:::-;4941:2;4935:9;4909:2;4995:13;;-1:-1:-1;;4991:22:1;;;5015:2;4987:31;4983:40;4971:53;;;5039:18;;;5059:22;;;5036:46;5033:72;;;5085:18;;:::i;:::-;5125:10;5121:2;5114:22;5160:2;5152:6;5145:18;5200:7;5195:2;5190;5186;5182:11;5178:20;5175:33;5172:53;;;5221:1;5218;5211:12;5172:53;5277:2;5272;5268;5264:11;5259:2;5251:6;5247:15;5234:46;5322:1;5317:2;5312;5304:6;5300:15;5296:24;5289:35;5343:6;5333:16;;;;;;;4217:1138;;;;;;;:::o;5360:260::-;5428:6;5436;5489:2;5477:9;5468:7;5464:23;5460:32;5457:52;;;5505:1;5502;5495:12;5457:52;5528:29;5547:9;5528:29;:::i;:::-;5518:39;;5576:38;5610:2;5599:9;5595:18;5576:38;:::i;5625:356::-;5827:2;5809:21;;;5846:18;;;5839:30;5905:34;5900:2;5885:18;;5878:62;5972:2;5957:18;;5625:356::o;5986:127::-;6047:10;6042:3;6038:20;6035:1;6028:31;6078:4;6075:1;6068:15;6102:4;6099:1;6092:15;6118:128;6158:3;6189:1;6185:6;6182:1;6179:13;6176:39;;;6195:18;;:::i;:::-;-1:-1:-1;6231:9:1;;6118:128::o;6968:380::-;7047:1;7043:12;;;;7090;;;7111:61;;7165:4;7157:6;7153:17;7143:27;;7111:61;7218:2;7210:6;7207:14;7187:18;7184:38;7181:161;;;7264:10;7259:3;7255:20;7252:1;7245:31;7299:4;7296:1;7289:15;7327:4;7324:1;7317:15;7181:161;;6968:380;;;:::o;7353:390::-;7512:2;7501:9;7494:21;7551:6;7546:2;7535:9;7531:18;7524:34;7608:6;7600;7595:2;7584:9;7580:18;7567:48;7664:1;7635:22;;;7659:2;7631:31;;;7624:42;;;;7727:2;7706:15;;;-1:-1:-1;;7702:29:1;7687:45;7683:54;;7353:390;-1:-1:-1;7353:390:1:o;7748:168::-;7788:7;7854:1;7850;7846:6;7842:14;7839:1;7836:21;7831:1;7824:9;7817:17;7813:45;7810:71;;;7861:18;;:::i;:::-;-1:-1:-1;7901:9:1;;7748:168::o;7921:127::-;7982:10;7977:3;7973:20;7970:1;7963:31;8013:4;8010:1;8003:15;8037:4;8034:1;8027:15;8053:120;8093:1;8119;8109:35;;8124:18;;:::i;:::-;-1:-1:-1;8158:9:1;;8053:120::o;11027:489::-;-1:-1:-1;;;;;11296:15:1;;;11278:34;;11348:15;;11343:2;11328:18;;11321:43;11395:2;11380:18;;11373:34;;;11443:3;11438:2;11423:18;;11416:31;;;11221:4;;11464:46;;11490:19;;11482:6;11464:46;:::i;:::-;11456:54;11027:489;-1:-1:-1;;;;;;11027:489:1:o;11521:249::-;11590:6;11643:2;11631:9;11622:7;11618:23;11614:32;11611:52;;;11659:1;11656;11649:12;11611:52;11691:9;11685:16;11710:30;11734:5;11710:30;:::i;11775:470::-;11954:3;11992:6;11986:13;12008:53;12054:6;12049:3;12042:4;12034:6;12030:17;12008:53;:::i;:::-;12124:13;;12083:16;;;;12146:57;12124:13;12083:16;12180:4;12168:17;;12146:57;:::i;:::-;12219:20;;11775:470;-1:-1:-1;;;;11775:470:1:o;12250:135::-;12289:3;-1:-1:-1;;12310:17:1;;12307:43;;;12330:18;;:::i;:::-;-1:-1:-1;12377:1:1;12366:13;;12250:135::o;12390:125::-;12430:4;12458:1;12455;12452:8;12449:34;;;12463:18;;:::i;:::-;-1:-1:-1;12500:9:1;;12390:125::o;12520:112::-;12552:1;12578;12568:35;;12583:18;;:::i;:::-;-1:-1:-1;12617:9:1;;12520:112::o;12637:127::-;12698:10;12693:3;12689:20;12686:1;12679:31;12729:4;12726:1;12719:15;12753:4;12750:1;12743:15
Swarm Source
ipfs://654b10cbc03e7ae61c9c45b8de21f70ff35ec2d0a6665cfab4b36208cdd967a9
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.