ERC-721
Overview
Max Total Supply
31 SR
Holders
20
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 SRLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LMNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-24 */ // SPDX-License-Identifier: MIT 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/[email protected] // 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/introspection/[email protected] // 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/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (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`, 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } // File @openzeppelin/contracts/token/ERC721/[email protected] // OpenZeppelin Contracts v4.4.1 (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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // 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/utils/[email protected] // 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/introspection/[email protected] // 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/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); 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 virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/interfaces/IMNFT.sol pragma solidity ^0.8.0; interface IMNFT { function mint(uint256 _qty, address _to) external payable; } // File contracts/LMNFT.sol pragma solidity ^0.8.0; contract LMNFT is IMNFT, ERC721Enumerable, Ownable { using Strings for uint256; // Base Token URI string public baseURI; string public baseExtension = ".json"; // MAX supply of collection uint256 public MAX_SUPPLY; uint256 public mintPrice; address payable public revenueAddress; constructor( string memory _name, string memory _symbol, uint256 _mintPrice, string memory _baseURL, address _revenueAddress , uint256 _maxSupply) ERC721(_name,_symbol) { mintPrice = _mintPrice; baseURI = _baseURL; MAX_SUPPLY = _maxSupply; revenueAddress = payable(_revenueAddress); } /************************** ***** MINT FUNCTIONS ***** *************************/ function mint(uint256 _qty, address _to) external payable override { require(totalSupply() + _qty <= MAX_SUPPLY, "NFT: out of stock"); require(_to != address(0), "NFT: invalid address"); require(msg.value >= _qty * mintPrice,"Price is not correct"); revenueAddress.transfer(msg.value); for (uint256 i = 0; i < _qty; i++) { _safeMint(_to, totalSupply() + 1); } } function multiMint(address[] calldata _wallets) external onlyOwner { require(_wallets.length > 0, "Input address list is empty"); require(totalSupply() + _wallets.length <= MAX_SUPPLY, "NFT: max supply reached"); for (uint256 i = 0; i < _wallets.length; i++) { require(_wallets[i] != address(0), "NFT: invalid address"); _safeMint(_wallets[i], totalSupply() + 1); } } function adminMint(uint256 _qty, address _to) external onlyOwner { require(_qty != 0, "NFT: minimum 1 nft"); require(_to != address(0), "NFT: invalid address"); require(totalSupply() + _qty <= MAX_SUPPLY, "NFT: max supply reached"); for (uint256 i = 0; i < _qty; i++) { _safeMint(_to, totalSupply() + 1); } } /************************** ***** VIEW FUNCTIONS ***** *************************/ function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function tokenURI(uint256 _id) public view virtual override returns (string memory) { require(_exists(_id), "ERC721Metadata: URI query for nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _id.toString(),baseExtension)) : ""; } function tokensOfOwner(address _owner) public view returns (uint256[] memory) { uint256 balance = balanceOf(_owner); uint256[] memory ids = new uint256[](balance); for (uint256 i = 0; i < balance; i++) { ids[i] = tokenOfOwnerByIndex(_owner, i); } return ids; } function exists(uint256 _id) external view returns (bool) { return _exists(_id); } function setBaseURI(string memory _newBaseURI) external onlyOwner { baseURI = _newBaseURI; } function setMintPrice(uint256 _newPrice) external onlyOwner { mintPrice = _newPrice; } function setRevenueAddress(address _rAdd) external onlyOwner { revenueAddress = payable(_rAdd); } function getMintPrice() external view returns (uint256) { return mintPrice; } function clearStuckTokens(IERC20 erc20) external onlyOwner { uint256 balance = erc20.balanceOf(address(this)); erc20.transfer(msg.sender, balance); } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_mintPrice","type":"uint256"},{"internalType":"string","name":"_baseURL","type":"string"},{"internalType":"address","name":"_revenueAddress","type":"address"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"erc20","type":"address"}],"name":"clearStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"multiMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rAdd","type":"address"}],"name":"setRevenueAddress","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600c919062000144565b503480156200003657600080fd5b5060405162002bb138038062002bb18339810160408190526200005991620002a1565b8551869086906200007290600090602085019062000144565b5080516200008890600190602084019062000144565b505050620000a56200009f620000ee60201b60201c565b620000f2565b600e8490558251620000bf90600b90602086019062000144565b50600d55600f80546001600160a01b0319166001600160a01b039290921691909117905550620003bb92505050565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001529062000368565b90600052602060002090601f016020900481019282620001765760008555620001c1565b82601f106200019157805160ff1916838001178555620001c1565b82800160010185558215620001c1579182015b82811115620001c1578251825591602001919060010190620001a4565b50620001cf929150620001d3565b5090565b5b80821115620001cf5760008155600101620001d4565b600082601f830112620001fc57600080fd5b81516001600160401b0380821115620002195762000219620003a5565b604051601f8301601f19908116603f01168101908282118183101715620002445762000244620003a5565b816040528381526020925086838588010111156200026157600080fd5b600091505b8382101562000285578582018301518183018401529082019062000266565b83821115620002975760008385830101525b9695505050505050565b60008060008060008060c08789031215620002bb57600080fd5b86516001600160401b0380821115620002d357600080fd5b620002e18a838b01620001ea565b97506020890151915080821115620002f857600080fd5b620003068a838b01620001ea565b96506040890151955060608901519150808211156200032457600080fd5b506200033389828a01620001ea565b608089015190945090506001600160a01b03811681146200035357600080fd5b8092505060a087015190509295509295509295565b600181811c908216806200037d57607f821691505b602082108114156200039f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6127e680620003cb6000396000f3fe6080604052600436106102045760003560e01c80636352211e11610118578063a22cb465116100a0578063c66828621161006f578063c66828621461059f578063c87b56dd146105b4578063e985e9c5146105d4578063f2fde38b1461061d578063f4a0a5281461063d57600080fd5b8063a22cb4651461052a578063a7f93ebd1461054a578063b410908d1461055f578063b88d4fde1461057f57600080fd5b8063715018a6116100e7578063715018a6146104a25780638462151c146104b75780638da5cb5b146104e457806394bf804d1461050257806395d89b411461051557600080fd5b80636352211e146104375780636817c76c146104575780636c0360eb1461046d57806370a082311461048257600080fd5b806332cb6b0c1161019b578063438098d01161016a578063438098d01461039757806345338d63146103b75780634f558e79146103d75780634f6ccce7146103f757806355f804b31461041757600080fd5b806332cb6b0c14610339578063346cc7be1461034f5780633ccfd60b1461036f57806342842e0e1461037757600080fd5b80630dc28efe116101d75780630dc28efe146102ba57806318160ddd146102da57806323b872dd146102f95780632f745c591461031957600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc14610260578063095ea7b314610298575b600080fd5b34801561021557600080fd5b506102296102243660046122ad565b61065d565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b50610253610688565b60405161023591906124f8565b34801561026c57600080fd5b5061028061027b366004612330565b61071a565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b33660046121ef565b6107b4565b005b3480156102c657600080fd5b506102b86102d5366004612362565b6108ca565b3480156102e657600080fd5b506008545b604051908152602001610235565b34801561030557600080fd5b506102b8610314366004612100565b6109f5565b34801561032557600080fd5b506102eb6103343660046121ef565b610a26565b34801561034557600080fd5b506102eb600d5481565b34801561035b57600080fd5b506102b861036a3660046120aa565b610abc565b6102b8610be3565b34801561038357600080fd5b506102b8610392366004612100565b610c81565b3480156103a357600080fd5b506102b86103b236600461221b565b610c9c565b3480156103c357600080fd5b506102b86103d23660046120aa565b610e11565b3480156103e357600080fd5b506102296103f2366004612330565b610e5d565b34801561040357600080fd5b506102eb610412366004612330565b610e7c565b34801561042357600080fd5b506102b86104323660046122e7565b610f0f565b34801561044357600080fd5b50610280610452366004612330565b610f50565b34801561046357600080fd5b506102eb600e5481565b34801561047957600080fd5b50610253610fc7565b34801561048e57600080fd5b506102eb61049d3660046120aa565b611055565b3480156104ae57600080fd5b506102b86110dc565b3480156104c357600080fd5b506104d76104d23660046120aa565b611112565b60405161023591906124b4565b3480156104f057600080fd5b50600a546001600160a01b0316610280565b6102b8610510366004612362565b6111b4565b34801561052157600080fd5b506102536112ea565b34801561053657600080fd5b506102b86105453660046121c1565b6112f9565b34801561055657600080fd5b50600e546102eb565b34801561056b57600080fd5b50600f54610280906001600160a01b031681565b34801561058b57600080fd5b506102b861059a366004612141565b611304565b3480156105ab57600080fd5b5061025361133c565b3480156105c057600080fd5b506102536105cf366004612330565b611349565b3480156105e057600080fd5b506102296105ef3660046120c7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561062957600080fd5b506102b86106383660046120aa565b611427565b34801561064957600080fd5b506102b8610658366004612330565b6114bf565b60006001600160e01b0319821663780e9d6360e01b14806106825750610682826114ee565b92915050565b6060600080546106979061269f565b80601f01602080910402602001604051908101604052809291908181526020018280546106c39061269f565b80156107105780601f106106e557610100808354040283529160200191610710565b820191906000526020600020905b8154815290600101906020018083116106f357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107985760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006107bf82610f50565b9050806001600160a01b0316836001600160a01b0316141561082d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161078f565b336001600160a01b0382161480610849575061084981336105ef565b6108bb5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161078f565b6108c5838361153e565b505050565b600a546001600160a01b031633146108f45760405162461bcd60e51b815260040161078f9061258b565b816109365760405162461bcd60e51b81526020600482015260126024820152711391950e881b5a5b9a5b5d5b480c481b999d60721b604482015260640161078f565b6001600160a01b03811661095c5760405162461bcd60e51b815260040161078f9061250b565b600d548261096960085490565b6109739190612611565b11156109bb5760405162461bcd60e51b81526020600482015260176024820152761391950e881b585e081cdd5c1c1b1e481c995858da1959604a1b604482015260640161078f565b60005b828110156108c5576109e3826109d360085490565b6109de906001612611565b6115ac565b806109ed816126da565b9150506109be565b6109ff33826115c6565b610a1b5760405162461bcd60e51b815260040161078f906125c0565b6108c58383836116bd565b6000610a3183611055565b8210610a935760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161078f565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610ae65760405162461bcd60e51b815260040161078f9061258b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610b2857600080fd5b505afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b609190612349565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610bab57600080fd5b505af1158015610bbf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c59190612290565b600a546001600160a01b03163314610c0d5760405162461bcd60e51b815260040161078f9061258b565b6000610c21600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610c6b576040519150601f19603f3d011682016040523d82523d6000602084013e610c70565b606091505b5050905080610c7e57600080fd5b50565b6108c583838360405180602001604052806000815250611304565b600a546001600160a01b03163314610cc65760405162461bcd60e51b815260040161078f9061258b565b80610d135760405162461bcd60e51b815260206004820152601b60248201527f496e7075742061646472657373206c69737420697320656d7074790000000000604482015260640161078f565b600d5481610d2060085490565b610d2a9190612611565b1115610d725760405162461bcd60e51b81526020600482015260176024820152761391950e881b585e081cdd5c1c1b1e481c995858da1959604a1b604482015260640161078f565b60005b818110156108c5576000838383818110610d9157610d9161274b565b9050602002016020810190610da691906120aa565b6001600160a01b03161415610dcd5760405162461bcd60e51b815260040161078f9061250b565b610dff838383818110610de257610de261274b565b9050602002016020810190610df791906120aa565b6008546109d3565b80610e09816126da565b915050610d75565b600a546001600160a01b03163314610e3b5760405162461bcd60e51b815260040161078f9061258b565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260408120546001600160a01b03161515610682565b6000610e8760085490565b8210610eea5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161078f565b60088281548110610efd57610efd61274b565b90600052602060002001549050919050565b600a546001600160a01b03163314610f395760405162461bcd60e51b815260040161078f9061258b565b8051610f4c90600b906020840190611f9b565b5050565b6000818152600260205260408120546001600160a01b0316806106825760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161078f565b600b8054610fd49061269f565b80601f01602080910402602001604051908101604052809291908181526020018280546110009061269f565b801561104d5780601f106110225761010080835404028352916020019161104d565b820191906000526020600020905b81548152906001019060200180831161103057829003601f168201915b505050505081565b60006001600160a01b0382166110c05760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161078f565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146111065760405162461bcd60e51b815260040161078f9061258b565b6111106000611864565b565b6060600061111f83611055565b905060008167ffffffffffffffff81111561113c5761113c612761565b604051908082528060200260200182016040528015611165578160200160208202803683370190505b50905060005b828110156111ac5761117d8582610a26565b82828151811061118f5761118f61274b565b6020908102919091010152806111a4816126da565b91505061116b565b509392505050565b600d54826111c160085490565b6111cb9190612611565b111561120d5760405162461bcd60e51b81526020600482015260116024820152704e46543a206f7574206f662073746f636b60781b604482015260640161078f565b6001600160a01b0381166112335760405162461bcd60e51b815260040161078f9061250b565b600e54611240908361263d565b3410156112865760405162461bcd60e51b8152602060048201526014602482015273141c9a58d9481a5cc81b9bdd0818dbdc9c9958dd60621b604482015260640161078f565b600f546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156112bf573d6000803e3d6000fd5b5060005b828110156108c5576112d8826109d360085490565b806112e2816126da565b9150506112c3565b6060600180546106979061269f565b610f4c3383836118b6565b61130e33836115c6565b61132a5760405162461bcd60e51b815260040161078f906125c0565b61133684848484611985565b50505050565b600c8054610fd49061269f565b6000818152600260205260409020546060906001600160a01b03166113c85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161078f565b60006113d26119b8565b905060008151116113f25760405180602001604052806000815250611420565b806113fc846119c7565b600c604051602001611410939291906123b3565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146114515760405162461bcd60e51b815260040161078f9061258b565b6001600160a01b0381166114b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161078f565b610c7e81611864565b600a546001600160a01b031633146114e95760405162461bcd60e51b815260040161078f9061258b565b600e55565b60006001600160e01b031982166380ac58cd60e01b148061151f57506001600160e01b03198216635b5e139f60e01b145b8061068257506301ffc9a760e01b6001600160e01b0319831614610682565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061157382610f50565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610f4c828260405180602001604052806000815250611ac5565b6000818152600260205260408120546001600160a01b031661163f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161078f565b600061164a83610f50565b9050806001600160a01b0316846001600160a01b031614806116855750836001600160a01b031661167a8461071a565b6001600160a01b0316145b806116b557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166116d082610f50565b6001600160a01b0316146117345760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161078f565b6001600160a01b0382166117965760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161078f565b6117a1838383611af8565b6117ac60008261153e565b6001600160a01b03831660009081526003602052604081208054600192906117d590849061265c565b90915550506001600160a01b0382166000908152600360205260408120805460019290611803908490612611565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156119185760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161078f565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6119908484846116bd565b61199c84848484611bb0565b6113365760405162461bcd60e51b815260040161078f90612539565b6060600b80546106979061269f565b6060816119eb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a1557806119ff816126da565b9150611a0e9050600a83612629565b91506119ef565b60008167ffffffffffffffff811115611a3057611a30612761565b6040519080825280601f01601f191660200182016040528015611a5a576020820181803683370190505b5090505b84156116b557611a6f60018361265c565b9150611a7c600a866126f5565b611a87906030612611565b60f81b818381518110611a9c57611a9c61274b565b60200101906001600160f81b031916908160001a905350611abe600a86612629565b9450611a5e565b611acf8383611cbd565b611adc6000848484611bb0565b6108c55760405162461bcd60e51b815260040161078f90612539565b6001600160a01b038316611b5357611b4e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611b76565b816001600160a01b0316836001600160a01b031614611b7657611b768382611e0b565b6001600160a01b038216611b8d576108c581611ea8565b826001600160a01b0316826001600160a01b0316146108c5576108c58282611f57565b60006001600160a01b0384163b15611cb257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bf4903390899088908890600401612477565b602060405180830381600087803b158015611c0e57600080fd5b505af1925050508015611c3e575060408051601f3d908101601f19168201909252611c3b918101906122ca565b60015b611c98573d808015611c6c576040519150601f19603f3d011682016040523d82523d6000602084013e611c71565b606091505b508051611c905760405162461bcd60e51b815260040161078f90612539565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116b5565b506001949350505050565b6001600160a01b038216611d135760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161078f565b6000818152600260205260409020546001600160a01b031615611d785760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161078f565b611d8460008383611af8565b6001600160a01b0382166000908152600360205260408120805460019290611dad908490612611565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611e1884611055565b611e22919061265c565b600083815260076020526040902054909150808214611e75576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611eba9060019061265c565b60008381526009602052604081205460088054939450909284908110611ee257611ee261274b565b906000526020600020015490508060088381548110611f0357611f0361274b565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611f3b57611f3b612735565b6001900381819060005260206000200160009055905550505050565b6000611f6283611055565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054611fa79061269f565b90600052602060002090601f016020900481019282611fc9576000855561200f565b82601f10611fe257805160ff191683800117855561200f565b8280016001018555821561200f579182015b8281111561200f578251825591602001919060010190611ff4565b5061201b92915061201f565b5090565b5b8082111561201b5760008155600101612020565b600067ffffffffffffffff8084111561204f5761204f612761565b604051601f8501601f19908116603f0116810190828211818310171561207757612077612761565b8160405280935085815286868601111561209057600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156120bc57600080fd5b813561142081612777565b600080604083850312156120da57600080fd5b82356120e581612777565b915060208301356120f581612777565b809150509250929050565b60008060006060848603121561211557600080fd5b833561212081612777565b9250602084013561213081612777565b929592945050506040919091013590565b6000806000806080858703121561215757600080fd5b843561216281612777565b9350602085013561217281612777565b925060408501359150606085013567ffffffffffffffff81111561219557600080fd5b8501601f810187136121a657600080fd5b6121b587823560208401612034565b91505092959194509250565b600080604083850312156121d457600080fd5b82356121df81612777565b915060208301356120f58161278c565b6000806040838503121561220257600080fd5b823561220d81612777565b946020939093013593505050565b6000806020838503121561222e57600080fd5b823567ffffffffffffffff8082111561224657600080fd5b818501915085601f83011261225a57600080fd5b81358181111561226957600080fd5b8660208260051b850101111561227e57600080fd5b60209290920196919550909350505050565b6000602082840312156122a257600080fd5b81516114208161278c565b6000602082840312156122bf57600080fd5b81356114208161279a565b6000602082840312156122dc57600080fd5b81516114208161279a565b6000602082840312156122f957600080fd5b813567ffffffffffffffff81111561231057600080fd5b8201601f8101841361232157600080fd5b6116b584823560208401612034565b60006020828403121561234257600080fd5b5035919050565b60006020828403121561235b57600080fd5b5051919050565b6000806040838503121561237557600080fd5b8235915060208301356120f581612777565b6000815180845261239f816020860160208601612673565b601f01601f19169290920160200192915050565b6000845160206123c68285838a01612673565b8551918401916123d98184848a01612673565b8554920191600090600181811c90808316806123f657607f831692505b85831081141561241457634e487b7160e01b85526022600452602485fd5b808015612428576001811461243957612466565b60ff19851688528388019550612466565b60008b81526020902060005b8581101561245e5781548a820152908401908801612445565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124aa90830184612387565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156124ec578351835292840192918401916001016124d0565b50909695505050505050565b6020815260006114206020830184612387565b6020808252601490820152734e46543a20696e76616c6964206164647265737360601b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561262457612624612709565b500190565b6000826126385761263861271f565b500490565b600081600019048311821515161561265757612657612709565b500290565b60008282101561266e5761266e612709565b500390565b60005b8381101561268e578181015183820152602001612676565b838111156113365750506000910152565b600181811c908216806126b357607f821691505b602082108114156126d457634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126ee576126ee612709565b5060010190565b6000826127045761270461271f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c7e57600080fd5b8015158114610c7e57600080fd5b6001600160e01b031981168114610c7e57600080fdfea2646970667358221220f344ddc4f08e51de09d9118de449000d9a4a0f6b314cb4417eb5d894c179fd2b64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000040f3fdae96b933eb6f487f3b6bb69b4b1017d3eb00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000017537570657252756666795f62795f4d657461527566667900000000000000000000000000000000000000000000000000000000000000000000000000000000025352000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f72756666792e6d7970696e6174612e636c6f75642f697066732f516d57754a5350774d554e46757a696b4c355954784e526d78397a504d4764636766636d57587756466e385566672f000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102045760003560e01c80636352211e11610118578063a22cb465116100a0578063c66828621161006f578063c66828621461059f578063c87b56dd146105b4578063e985e9c5146105d4578063f2fde38b1461061d578063f4a0a5281461063d57600080fd5b8063a22cb4651461052a578063a7f93ebd1461054a578063b410908d1461055f578063b88d4fde1461057f57600080fd5b8063715018a6116100e7578063715018a6146104a25780638462151c146104b75780638da5cb5b146104e457806394bf804d1461050257806395d89b411461051557600080fd5b80636352211e146104375780636817c76c146104575780636c0360eb1461046d57806370a082311461048257600080fd5b806332cb6b0c1161019b578063438098d01161016a578063438098d01461039757806345338d63146103b75780634f558e79146103d75780634f6ccce7146103f757806355f804b31461041757600080fd5b806332cb6b0c14610339578063346cc7be1461034f5780633ccfd60b1461036f57806342842e0e1461037757600080fd5b80630dc28efe116101d75780630dc28efe146102ba57806318160ddd146102da57806323b872dd146102f95780632f745c591461031957600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc14610260578063095ea7b314610298575b600080fd5b34801561021557600080fd5b506102296102243660046122ad565b61065d565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b50610253610688565b60405161023591906124f8565b34801561026c57600080fd5b5061028061027b366004612330565b61071a565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b33660046121ef565b6107b4565b005b3480156102c657600080fd5b506102b86102d5366004612362565b6108ca565b3480156102e657600080fd5b506008545b604051908152602001610235565b34801561030557600080fd5b506102b8610314366004612100565b6109f5565b34801561032557600080fd5b506102eb6103343660046121ef565b610a26565b34801561034557600080fd5b506102eb600d5481565b34801561035b57600080fd5b506102b861036a3660046120aa565b610abc565b6102b8610be3565b34801561038357600080fd5b506102b8610392366004612100565b610c81565b3480156103a357600080fd5b506102b86103b236600461221b565b610c9c565b3480156103c357600080fd5b506102b86103d23660046120aa565b610e11565b3480156103e357600080fd5b506102296103f2366004612330565b610e5d565b34801561040357600080fd5b506102eb610412366004612330565b610e7c565b34801561042357600080fd5b506102b86104323660046122e7565b610f0f565b34801561044357600080fd5b50610280610452366004612330565b610f50565b34801561046357600080fd5b506102eb600e5481565b34801561047957600080fd5b50610253610fc7565b34801561048e57600080fd5b506102eb61049d3660046120aa565b611055565b3480156104ae57600080fd5b506102b86110dc565b3480156104c357600080fd5b506104d76104d23660046120aa565b611112565b60405161023591906124b4565b3480156104f057600080fd5b50600a546001600160a01b0316610280565b6102b8610510366004612362565b6111b4565b34801561052157600080fd5b506102536112ea565b34801561053657600080fd5b506102b86105453660046121c1565b6112f9565b34801561055657600080fd5b50600e546102eb565b34801561056b57600080fd5b50600f54610280906001600160a01b031681565b34801561058b57600080fd5b506102b861059a366004612141565b611304565b3480156105ab57600080fd5b5061025361133c565b3480156105c057600080fd5b506102536105cf366004612330565b611349565b3480156105e057600080fd5b506102296105ef3660046120c7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561062957600080fd5b506102b86106383660046120aa565b611427565b34801561064957600080fd5b506102b8610658366004612330565b6114bf565b60006001600160e01b0319821663780e9d6360e01b14806106825750610682826114ee565b92915050565b6060600080546106979061269f565b80601f01602080910402602001604051908101604052809291908181526020018280546106c39061269f565b80156107105780601f106106e557610100808354040283529160200191610710565b820191906000526020600020905b8154815290600101906020018083116106f357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107985760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006107bf82610f50565b9050806001600160a01b0316836001600160a01b0316141561082d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161078f565b336001600160a01b0382161480610849575061084981336105ef565b6108bb5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161078f565b6108c5838361153e565b505050565b600a546001600160a01b031633146108f45760405162461bcd60e51b815260040161078f9061258b565b816109365760405162461bcd60e51b81526020600482015260126024820152711391950e881b5a5b9a5b5d5b480c481b999d60721b604482015260640161078f565b6001600160a01b03811661095c5760405162461bcd60e51b815260040161078f9061250b565b600d548261096960085490565b6109739190612611565b11156109bb5760405162461bcd60e51b81526020600482015260176024820152761391950e881b585e081cdd5c1c1b1e481c995858da1959604a1b604482015260640161078f565b60005b828110156108c5576109e3826109d360085490565b6109de906001612611565b6115ac565b806109ed816126da565b9150506109be565b6109ff33826115c6565b610a1b5760405162461bcd60e51b815260040161078f906125c0565b6108c58383836116bd565b6000610a3183611055565b8210610a935760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161078f565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610ae65760405162461bcd60e51b815260040161078f9061258b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610b2857600080fd5b505afa158015610b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b609190612349565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610bab57600080fd5b505af1158015610bbf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c59190612290565b600a546001600160a01b03163314610c0d5760405162461bcd60e51b815260040161078f9061258b565b6000610c21600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610c6b576040519150601f19603f3d011682016040523d82523d6000602084013e610c70565b606091505b5050905080610c7e57600080fd5b50565b6108c583838360405180602001604052806000815250611304565b600a546001600160a01b03163314610cc65760405162461bcd60e51b815260040161078f9061258b565b80610d135760405162461bcd60e51b815260206004820152601b60248201527f496e7075742061646472657373206c69737420697320656d7074790000000000604482015260640161078f565b600d5481610d2060085490565b610d2a9190612611565b1115610d725760405162461bcd60e51b81526020600482015260176024820152761391950e881b585e081cdd5c1c1b1e481c995858da1959604a1b604482015260640161078f565b60005b818110156108c5576000838383818110610d9157610d9161274b565b9050602002016020810190610da691906120aa565b6001600160a01b03161415610dcd5760405162461bcd60e51b815260040161078f9061250b565b610dff838383818110610de257610de261274b565b9050602002016020810190610df791906120aa565b6008546109d3565b80610e09816126da565b915050610d75565b600a546001600160a01b03163314610e3b5760405162461bcd60e51b815260040161078f9061258b565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260408120546001600160a01b03161515610682565b6000610e8760085490565b8210610eea5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161078f565b60088281548110610efd57610efd61274b565b90600052602060002001549050919050565b600a546001600160a01b03163314610f395760405162461bcd60e51b815260040161078f9061258b565b8051610f4c90600b906020840190611f9b565b5050565b6000818152600260205260408120546001600160a01b0316806106825760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161078f565b600b8054610fd49061269f565b80601f01602080910402602001604051908101604052809291908181526020018280546110009061269f565b801561104d5780601f106110225761010080835404028352916020019161104d565b820191906000526020600020905b81548152906001019060200180831161103057829003601f168201915b505050505081565b60006001600160a01b0382166110c05760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161078f565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146111065760405162461bcd60e51b815260040161078f9061258b565b6111106000611864565b565b6060600061111f83611055565b905060008167ffffffffffffffff81111561113c5761113c612761565b604051908082528060200260200182016040528015611165578160200160208202803683370190505b50905060005b828110156111ac5761117d8582610a26565b82828151811061118f5761118f61274b565b6020908102919091010152806111a4816126da565b91505061116b565b509392505050565b600d54826111c160085490565b6111cb9190612611565b111561120d5760405162461bcd60e51b81526020600482015260116024820152704e46543a206f7574206f662073746f636b60781b604482015260640161078f565b6001600160a01b0381166112335760405162461bcd60e51b815260040161078f9061250b565b600e54611240908361263d565b3410156112865760405162461bcd60e51b8152602060048201526014602482015273141c9a58d9481a5cc81b9bdd0818dbdc9c9958dd60621b604482015260640161078f565b600f546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156112bf573d6000803e3d6000fd5b5060005b828110156108c5576112d8826109d360085490565b806112e2816126da565b9150506112c3565b6060600180546106979061269f565b610f4c3383836118b6565b61130e33836115c6565b61132a5760405162461bcd60e51b815260040161078f906125c0565b61133684848484611985565b50505050565b600c8054610fd49061269f565b6000818152600260205260409020546060906001600160a01b03166113c85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161078f565b60006113d26119b8565b905060008151116113f25760405180602001604052806000815250611420565b806113fc846119c7565b600c604051602001611410939291906123b3565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146114515760405162461bcd60e51b815260040161078f9061258b565b6001600160a01b0381166114b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161078f565b610c7e81611864565b600a546001600160a01b031633146114e95760405162461bcd60e51b815260040161078f9061258b565b600e55565b60006001600160e01b031982166380ac58cd60e01b148061151f57506001600160e01b03198216635b5e139f60e01b145b8061068257506301ffc9a760e01b6001600160e01b0319831614610682565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061157382610f50565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610f4c828260405180602001604052806000815250611ac5565b6000818152600260205260408120546001600160a01b031661163f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161078f565b600061164a83610f50565b9050806001600160a01b0316846001600160a01b031614806116855750836001600160a01b031661167a8461071a565b6001600160a01b0316145b806116b557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166116d082610f50565b6001600160a01b0316146117345760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161078f565b6001600160a01b0382166117965760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161078f565b6117a1838383611af8565b6117ac60008261153e565b6001600160a01b03831660009081526003602052604081208054600192906117d590849061265c565b90915550506001600160a01b0382166000908152600360205260408120805460019290611803908490612611565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156119185760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161078f565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6119908484846116bd565b61199c84848484611bb0565b6113365760405162461bcd60e51b815260040161078f90612539565b6060600b80546106979061269f565b6060816119eb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a1557806119ff816126da565b9150611a0e9050600a83612629565b91506119ef565b60008167ffffffffffffffff811115611a3057611a30612761565b6040519080825280601f01601f191660200182016040528015611a5a576020820181803683370190505b5090505b84156116b557611a6f60018361265c565b9150611a7c600a866126f5565b611a87906030612611565b60f81b818381518110611a9c57611a9c61274b565b60200101906001600160f81b031916908160001a905350611abe600a86612629565b9450611a5e565b611acf8383611cbd565b611adc6000848484611bb0565b6108c55760405162461bcd60e51b815260040161078f90612539565b6001600160a01b038316611b5357611b4e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611b76565b816001600160a01b0316836001600160a01b031614611b7657611b768382611e0b565b6001600160a01b038216611b8d576108c581611ea8565b826001600160a01b0316826001600160a01b0316146108c5576108c58282611f57565b60006001600160a01b0384163b15611cb257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611bf4903390899088908890600401612477565b602060405180830381600087803b158015611c0e57600080fd5b505af1925050508015611c3e575060408051601f3d908101601f19168201909252611c3b918101906122ca565b60015b611c98573d808015611c6c576040519150601f19603f3d011682016040523d82523d6000602084013e611c71565b606091505b508051611c905760405162461bcd60e51b815260040161078f90612539565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116b5565b506001949350505050565b6001600160a01b038216611d135760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161078f565b6000818152600260205260409020546001600160a01b031615611d785760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161078f565b611d8460008383611af8565b6001600160a01b0382166000908152600360205260408120805460019290611dad908490612611565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611e1884611055565b611e22919061265c565b600083815260076020526040902054909150808214611e75576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611eba9060019061265c565b60008381526009602052604081205460088054939450909284908110611ee257611ee261274b565b906000526020600020015490508060088381548110611f0357611f0361274b565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611f3b57611f3b612735565b6001900381819060005260206000200160009055905550505050565b6000611f6283611055565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054611fa79061269f565b90600052602060002090601f016020900481019282611fc9576000855561200f565b82601f10611fe257805160ff191683800117855561200f565b8280016001018555821561200f579182015b8281111561200f578251825591602001919060010190611ff4565b5061201b92915061201f565b5090565b5b8082111561201b5760008155600101612020565b600067ffffffffffffffff8084111561204f5761204f612761565b604051601f8501601f19908116603f0116810190828211818310171561207757612077612761565b8160405280935085815286868601111561209057600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156120bc57600080fd5b813561142081612777565b600080604083850312156120da57600080fd5b82356120e581612777565b915060208301356120f581612777565b809150509250929050565b60008060006060848603121561211557600080fd5b833561212081612777565b9250602084013561213081612777565b929592945050506040919091013590565b6000806000806080858703121561215757600080fd5b843561216281612777565b9350602085013561217281612777565b925060408501359150606085013567ffffffffffffffff81111561219557600080fd5b8501601f810187136121a657600080fd5b6121b587823560208401612034565b91505092959194509250565b600080604083850312156121d457600080fd5b82356121df81612777565b915060208301356120f58161278c565b6000806040838503121561220257600080fd5b823561220d81612777565b946020939093013593505050565b6000806020838503121561222e57600080fd5b823567ffffffffffffffff8082111561224657600080fd5b818501915085601f83011261225a57600080fd5b81358181111561226957600080fd5b8660208260051b850101111561227e57600080fd5b60209290920196919550909350505050565b6000602082840312156122a257600080fd5b81516114208161278c565b6000602082840312156122bf57600080fd5b81356114208161279a565b6000602082840312156122dc57600080fd5b81516114208161279a565b6000602082840312156122f957600080fd5b813567ffffffffffffffff81111561231057600080fd5b8201601f8101841361232157600080fd5b6116b584823560208401612034565b60006020828403121561234257600080fd5b5035919050565b60006020828403121561235b57600080fd5b5051919050565b6000806040838503121561237557600080fd5b8235915060208301356120f581612777565b6000815180845261239f816020860160208601612673565b601f01601f19169290920160200192915050565b6000845160206123c68285838a01612673565b8551918401916123d98184848a01612673565b8554920191600090600181811c90808316806123f657607f831692505b85831081141561241457634e487b7160e01b85526022600452602485fd5b808015612428576001811461243957612466565b60ff19851688528388019550612466565b60008b81526020902060005b8581101561245e5781548a820152908401908801612445565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124aa90830184612387565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156124ec578351835292840192918401916001016124d0565b50909695505050505050565b6020815260006114206020830184612387565b6020808252601490820152734e46543a20696e76616c6964206164647265737360601b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561262457612624612709565b500190565b6000826126385761263861271f565b500490565b600081600019048311821515161561265757612657612709565b500290565b60008282101561266e5761266e612709565b500390565b60005b8381101561268e578181015183820152602001612676565b838111156113365750506000910152565b600181811c908216806126b357607f821691505b602082108114156126d457634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126ee576126ee612709565b5060010190565b6000826127045761270461271f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c7e57600080fd5b8015158114610c7e57600080fd5b6001600160e01b031981168114610c7e57600080fdfea2646970667358221220f344ddc4f08e51de09d9118de449000d9a4a0f6b314cb4417eb5d894c179fd2b64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000040f3fdae96b933eb6f487f3b6bb69b4b1017d3eb00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000017537570657252756666795f62795f4d657461527566667900000000000000000000000000000000000000000000000000000000000000000000000000000000025352000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f72756666792e6d7970696e6174612e636c6f75642f697066732f516d57754a5350774d554e46757a696b4c355954784e526d78397a504d4764636766636d57587756466e385566672f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): SuperRuffy_by_MetaRuffy
Arg [1] : _symbol (string): SR
Arg [2] : _mintPrice (uint256): 20000000000000000
Arg [3] : _baseURL (string): https://ruffy.mypinata.cloud/ipfs/QmWuJSPwMUNFuzikL5YTxNRmx9zPMGdcgfcmWXwVFn8Ufg/
Arg [4] : _revenueAddress (address): 0x40F3fdAe96B933EB6F487F3B6bb69b4B1017D3Eb
Arg [5] : _maxSupply (uint256): 10000
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 00000000000000000000000000000000000000000000000000470de4df820000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [4] : 00000000000000000000000040f3fdae96b933eb6f487f3b6bb69b4b1017d3eb
Arg [5] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [7] : 537570657252756666795f62795f4d6574615275666679000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 5352000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [11] : 68747470733a2f2f72756666792e6d7970696e6174612e636c6f75642f697066
Arg [12] : 732f516d57754a5350774d554e46757a696b4c355954784e526d78397a504d47
Arg [13] : 64636766636d57587756466e385566672f000000000000000000000000000000
Deployed Bytecode Sourcemap
48581:3895:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39315:224;;;;;;;;;;-1:-1:-1;39315:224:0;;;;;:::i;:::-;;:::i;:::-;;;10062:14:1;;10055:22;10037:41;;10025:2;10010:18;39315:224:0;;;;;;;;25043:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26602:221::-;;;;;;;;;;-1:-1:-1;26602:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8220:32:1;;;8202:51;;8190:2;8175:18;26602:221:0;8056:203:1;26125:411:0;;;;;;;;;;-1:-1:-1;26125:411:0;;;;;:::i;:::-;;:::i;:::-;;50267:373;;;;;;;;;;-1:-1:-1;50267:373:0;;;;;:::i;:::-;;:::i;39955:113::-;;;;;;;;;;-1:-1:-1;40043:10:0;:17;39955:113;;;19761:25:1;;;19749:2;19734:18;39955:113:0;19615:177:1;27352:339:0;;;;;;;;;;-1:-1:-1;27352:339:0;;;;;:::i;:::-;;:::i;39623:256::-;;;;;;;;;;-1:-1:-1;39623:256:0;;;;;:::i;:::-;;:::i;48801:26::-;;;;;;;;;;;;;;;;52150:172;;;;;;;;;;-1:-1:-1;52150:172:0;;;;;:::i;:::-;;:::i;52328:145::-;;;:::i;27762:185::-;;;;;;;;;;-1:-1:-1;27762:185:0;;;;;:::i;:::-;;:::i;49822:437::-;;;;;;;;;;-1:-1:-1;49822:437:0;;;;;:::i;:::-;;:::i;51930:111::-;;;;;;;;;;-1:-1:-1;51930:111:0;;;;;:::i;:::-;;:::i;51604:96::-;;;;;;;;;;-1:-1:-1;51604:96:0;;;;;:::i;:::-;;:::i;40145:233::-;;;;;;;;;;-1:-1:-1;40145:233:0;;;;;:::i;:::-;;:::i;51708:106::-;;;;;;;;;;-1:-1:-1;51708:106:0;;;;;:::i;:::-;;:::i;24737:239::-;;;;;;;;;;-1:-1:-1;24737:239:0;;;;;:::i;:::-;;:::i;48834:24::-;;;;;;;;;;;;;;;;48696:21;;;;;;;;;;;;;:::i;24467:208::-;;;;;;;;;;-1:-1:-1;24467:208:0;;;;;:::i;:::-;;:::i;2539:103::-;;;;;;;;;;;;;:::i;51273:323::-;;;;;;;;;;-1:-1:-1;51273:323:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1888:87::-;;;;;;;;;;-1:-1:-1;1961:6:0;;-1:-1:-1;;;;;1961:6:0;1888:87;;49377:437;;;;;;:::i;:::-;;:::i;25212:104::-;;;;;;;;;;;;;:::i;26895:155::-;;;;;;;;;;-1:-1:-1;26895:155:0;;;;;:::i;:::-;;:::i;52047:91::-;;;;;;;;;;-1:-1:-1;52121:9:0;;52047:91;;48865:37;;;;;;;;;;-1:-1:-1;48865:37:0;;;;-1:-1:-1;;;;;48865:37:0;;;28018:328;;;;;;;;;;-1:-1:-1;28018:328:0;;;;;:::i;:::-;;:::i;48724:37::-;;;;;;;;;;;;;:::i;50863:402::-;;;;;;;;;;-1:-1:-1;50863:402:0;;;;;:::i;:::-;;:::i;27121:164::-;;;;;;;;;;-1:-1:-1;27121:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;27242:25:0;;;27218:4;27242:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27121:164;2797:201;;;;;;;;;;-1:-1:-1;2797:201:0;;;;;:::i;:::-;;:::i;51822:100::-;;;;;;;;;;-1:-1:-1;51822:100:0;;;;;:::i;:::-;;:::i;39315:224::-;39417:4;-1:-1:-1;;;;;;39441:50:0;;-1:-1:-1;;;39441:50:0;;:90;;;39495:36;39519:11;39495:23;:36::i;:::-;39434:97;39315:224;-1:-1:-1;;39315:224:0:o;25043:100::-;25097:13;25130:5;25123:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25043:100;:::o;26602:221::-;26678:7;29945:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29945:16:0;26698:73;;;;-1:-1:-1;;;26698:73:0;;17048:2:1;26698:73:0;;;17030:21:1;17087:2;17067:18;;;17060:30;17126:34;17106:18;;;17099:62;-1:-1:-1;;;17177:18:1;;;17170:42;17229:19;;26698:73:0;;;;;;;;;-1:-1:-1;26791:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26791:24:0;;26602:221::o;26125:411::-;26206:13;26222:23;26237:7;26222:14;:23::i;:::-;26206:39;;26270:5;-1:-1:-1;;;;;26264:11:0;:2;-1:-1:-1;;;;;26264:11:0;;;26256:57;;;;-1:-1:-1;;;26256:57:0;;18238:2:1;26256:57:0;;;18220:21:1;18277:2;18257:18;;;18250:30;18316:34;18296:18;;;18289:62;-1:-1:-1;;;18367:18:1;;;18360:31;18408:19;;26256:57:0;18036:397:1;26256:57:0;686:10;-1:-1:-1;;;;;26348:21:0;;;;:62;;-1:-1:-1;26373:37:0;26390:5;686:10;27121:164;:::i;26373:37::-;26326:168;;;;-1:-1:-1;;;26326:168:0;;15092:2:1;26326:168:0;;;15074:21:1;15131:2;15111:18;;;15104:30;15170:34;15150:18;;;15143:62;15241:26;15221:18;;;15214:54;15285:19;;26326:168:0;14890:420:1;26326:168:0;26507:21;26516:2;26520:7;26507:8;:21::i;:::-;26195:341;26125:411;;:::o;50267:373::-;1961:6;;-1:-1:-1;;;;;1961:6:0;686:10;2108:23;2100:68;;;;-1:-1:-1;;;2100:68:0;;;;;;;:::i;:::-;50351:9;50343:40:::1;;;::::0;-1:-1:-1;;;50343:40:0;;13221:2:1;50343:40:0::1;::::0;::::1;13203:21:1::0;13260:2;13240:18;;;13233:30;-1:-1:-1;;;13279:18:1;;;13272:48;13337:18;;50343:40:0::1;13019:342:1::0;50343:40:0::1;-1:-1:-1::0;;;;;50402:17:0;::::1;50394:50;;;;-1:-1:-1::0;;;50394:50:0::1;;;;;;;:::i;:::-;50487:10;;50479:4;50463:13;40043:10:::0;:17;;39955:113;50463:13:::1;:20;;;;:::i;:::-;:34;;50455:70;;;::::0;-1:-1:-1;;;50455:70:0;;14327:2:1;50455:70:0::1;::::0;::::1;14309:21:1::0;14366:2;14346:18;;;14339:30;-1:-1:-1;;;14385:18:1;;;14378:53;14448:18;;50455:70:0::1;14125:347:1::0;50455:70:0::1;50543:9;50538:95;50562:4;50558:1;:8;50538:95;;;50588:33;50598:3;50603:13;40043:10:::0;:17;;39955:113;50603:13:::1;:17;::::0;50619:1:::1;50603:17;:::i;:::-;50588:9;:33::i;:::-;50568:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50538:95;;27352:339:::0;27547:41;686:10;27580:7;27547:18;:41::i;:::-;27539:103;;;;-1:-1:-1;;;27539:103:0;;;;;;;:::i;:::-;27655:28;27665:4;27671:2;27675:7;27655:9;:28::i;39623:256::-;39720:7;39756:23;39773:5;39756:16;:23::i;:::-;39748:5;:31;39740:87;;;;-1:-1:-1;;;39740:87:0;;11220:2:1;39740:87:0;;;11202:21:1;11259:2;11239:18;;;11232:30;11298:34;11278:18;;;11271:62;-1:-1:-1;;;11349:18:1;;;11342:41;11400:19;;39740:87:0;11018:407:1;39740:87:0;-1:-1:-1;;;;;;39845:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;39623:256::o;52150:172::-;1961:6;;-1:-1:-1;;;;;1961:6:0;686:10;2108:23;2100:68;;;;-1:-1:-1;;;2100:68:0;;;;;;;:::i;:::-;52238:30:::1;::::0;-1:-1:-1;;;52238:30:0;;52262:4:::1;52238:30;::::0;::::1;8202:51:1::0;52220:15:0::1;::::0;-1:-1:-1;;;;;52238:15:0;::::1;::::0;::::1;::::0;8175:18:1;;52238:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52279:35;::::0;-1:-1:-1;;;52279:35:0;;52294:10:::1;52279:35;::::0;::::1;9155:51:1::0;9222:18;;;9215:34;;;52220:48:0;;-1:-1:-1;;;;;;52279:14:0;::::1;::::0;::::1;::::0;9128:18:1;;52279:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;52328:145::-:0;1961:6;;-1:-1:-1;;;;;1961:6:0;686:10;2108:23;2100:68;;;;-1:-1:-1;;;2100:68:0;;;;;;;:::i;:::-;52381:7:::1;52402;1961:6:::0;;-1:-1:-1;;;;;1961:6:0;;1888:87;52402:7:::1;-1:-1:-1::0;;;;;52394:21:0::1;52423;52394:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52380:69;;;52464:2;52456:11;;;::::0;::::1;;52373:100;52328:145::o:0;27762:185::-;27900:39;27917:4;27923:2;27927:7;27900:39;;;;;;;;;;;;:16;:39::i;49822:437::-;1961:6;;-1:-1:-1;;;;;1961:6:0;686:10;2108:23;2100:68;;;;-1:-1:-1;;;2100:68:0;;;;;;;:::i;:::-;49909:19;49901:59:::1;;;::::0;-1:-1:-1;;;49901:59:0;;10864:2:1;49901:59:0::1;::::0;::::1;10846:21:1::0;10903:2;10883:18;;;10876:30;10942:29;10922:18;;;10915:57;10989:18;;49901:59:0::1;10662:351:1::0;49901:59:0::1;50014:10;::::0;49995:8;49979:13:::1;40043:10:::0;:17;;39955:113;49979:13:::1;:31;;;;:::i;:::-;:45;;49971:81;;;::::0;-1:-1:-1;;;49971:81:0;;14327:2:1;49971:81:0::1;::::0;::::1;14309:21:1::0;14366:2;14346:18;;;14339:30;-1:-1:-1;;;14385:18:1;;;14378:53;14448:18;;49971:81:0::1;14125:347:1::0;49971:81:0::1;50070:9;50065:187;50085:19:::0;;::::1;50065:187;;;50157:1;50134:8:::0;;50143:1;50134:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50134:25:0::1;;;50126:58;;;;-1:-1:-1::0;;;50126:58:0::1;;;;;;;:::i;:::-;50199:41;50209:8;;50218:1;50209:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;40043:10:::0;:17;50222:13:::1;39955:113:::0;50199:41:::1;50106:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50065:187;;51930:111:::0;1961:6;;-1:-1:-1;;;;;1961:6:0;686:10;2108:23;2100:68;;;;-1:-1:-1;;;2100:68:0;;;;;;;:::i;:::-;52002:14:::1;:31:::0;;-1:-1:-1;;;;;;52002:31:0::1;-1:-1:-1::0;;;;;52002:31:0;;;::::1;::::0;;;::::1;::::0;;51930:111::o;51604:96::-;51656:4;29945:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29945:16:0;:30;;51680:12;29856:127;40145:233;40220:7;40256:30;40043:10;:17;;39955:113;40256:30;40248:5;:38;40240:95;;;;-1:-1:-1;;;40240:95:0;;19058:2:1;40240:95:0;;;19040:21:1;19097:2;19077:18;;;19070:30;19136:34;19116:18;;;19109:62;-1:-1:-1;;;19187:18:1;;;19180:42;19239:19;;40240:95:0;18856:408:1;40240:95:0;40353:10;40364:5;40353:17;;;;;;;;:::i;:::-;;;;;;;;;40346:24;;40145:233;;;:::o;51708:106::-;1961:6;;-1:-1:-1;;;;;1961:6:0;686:10;2108:23;2100:68;;;;-1:-1:-1;;;2100:68:0;;;;;;;:::i;:::-;51785:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;51708:106:::0;:::o;24737:239::-;24809:7;24845:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24845:16:0;24880:19;24872:73;;;;-1:-1:-1;;;24872:73:0;;16277:2:1;24872:73:0;;;16259:21:1;16316:2;16296:18;;;16289:30;16355:34;16335:18;;;16328:62;-1:-1:-1;;;16406:18:1;;;16399:39;16455:19;;24872:73:0;16075:405:1;48696:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24467:208::-;24539:7;-1:-1:-1;;;;;24567:19:0;;24559:74;;;;-1:-1:-1;;;24559:74:0;;15866:2:1;24559:74:0;;;15848:21:1;15905:2;15885:18;;;15878:30;15944:34;15924:18;;;15917:62;-1:-1:-1;;;15995:18:1;;;15988:40;16045:19;;24559:74:0;15664:406:1;24559:74:0;-1:-1:-1;;;;;;24651:16:0;;;;;:9;:16;;;;;;;24467:208::o;2539:103::-;1961:6;;-1:-1:-1;;;;;1961:6:0;686:10;2108:23;2100:68;;;;-1:-1:-1;;;2100:68:0;;;;;;;:::i;:::-;2604:30:::1;2631:1;2604:18;:30::i;:::-;2539:103::o:0;51273:323::-;51333:16;51362:15;51380:17;51390:6;51380:9;:17::i;:::-;51362:35;;51408:20;51445:7;51431:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51431:22:0;;51408:45;;51469:9;51464:104;51488:7;51484:1;:11;51464:104;;;51526:30;51546:6;51554:1;51526:19;:30::i;:::-;51517:3;51521:1;51517:6;;;;;;;;:::i;:::-;;;;;;;;;;:39;51497:3;;;;:::i;:::-;;;;51464:104;;;-1:-1:-1;51585:3:0;51273:323;-1:-1:-1;;;51273:323:0:o;49377:437::-;49489:10;;49481:4;49465:13;40043:10;:17;;39955:113;49465:13;:20;;;;:::i;:::-;:34;;49457:64;;;;-1:-1:-1;;;49457:64:0;;19471:2:1;49457:64:0;;;19453:21:1;19510:2;19490:18;;;19483:30;-1:-1:-1;;;19529:18:1;;;19522:47;19586:18;;49457:64:0;19269:341:1;49457:64:0;-1:-1:-1;;;;;49540:17:0;;49532:50;;;;-1:-1:-1;;;49532:50:0;;;;;;;:::i;:::-;49621:9;;49614:16;;:4;:16;:::i;:::-;49601:9;:29;;49593:61;;;;-1:-1:-1;;;49593:61:0;;15517:2:1;49593:61:0;;;15499:21:1;15556:2;15536:18;;;15529:30;-1:-1:-1;;;15575:18:1;;;15568:50;15635:18;;49593:61:0;15315:344:1;49593:61:0;49665:14;;:34;;-1:-1:-1;;;;;49665:14:0;;;;49689:9;49665:34;;;;;:14;:34;:14;:34;49689:9;49665:14;:34;;;;;;;;;;;;;;;;;;;;;49717:9;49712:95;49736:4;49732:1;:8;49712:95;;;49762:33;49772:3;49777:13;40043:10;:17;;39955:113;49762:33;49742:3;;;;:::i;:::-;;;;49712:95;;25212:104;25268:13;25301:7;25294:14;;;;;:::i;26895:155::-;26990:52;686:10;27023:8;27033;26990:18;:52::i;28018:328::-;28193:41;686:10;28226:7;28193:18;:41::i;:::-;28185:103;;;;-1:-1:-1;;;28185:103:0;;;;;;;:::i;:::-;28299:39;28313:4;28319:2;28323:7;28332:5;28299:13;:39::i;:::-;28018:328;;;;:::o;48724:37::-;;;;;;;:::i;50863:402::-;29921:4;29945:16;;;:7;:16;;;;;;50932:13;;-1:-1:-1;;;;;29945:16:0;50958:72;;;;-1:-1:-1;;;50958:72:0;;17822:2:1;50958:72:0;;;17804:21:1;17861:2;17841:18;;;17834:30;17900:34;17880:18;;;17873:62;-1:-1:-1;;;17951:18:1;;;17944:45;18006:19;;50958:72:0;17620:411:1;50958:72:0;51041:28;51072:10;:8;:10::i;:::-;51041:41;;51144:1;51119:14;51113:28;:32;:144;;;;;;;;;;;;;;;;;51189:14;51205;:3;:12;:14::i;:::-;51220:13;51172:62;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51113:144;51093:164;50863:402;-1:-1:-1;;;50863:402:0:o;2797:201::-;1961:6;;-1:-1:-1;;;;;1961:6:0;686:10;2108:23;2100:68;;;;-1:-1:-1;;;2100:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2886:22:0;::::1;2878:73;;;::::0;-1:-1:-1;;;2878:73:0;;12051:2:1;2878:73:0::1;::::0;::::1;12033:21:1::0;12090:2;12070:18;;;12063:30;12129:34;12109:18;;;12102:62;-1:-1:-1;;;12180:18:1;;;12173:36;12226:19;;2878:73:0::1;11849:402:1::0;2878:73:0::1;2962:28;2981:8;2962:18;:28::i;51822:100::-:0;1961:6;;-1:-1:-1;;;;;1961:6:0;686:10;2108:23;2100:68;;;;-1:-1:-1;;;2100:68:0;;;;;;;:::i;:::-;51893:9:::1;:21:::0;51822:100::o;24098:305::-;24200:4;-1:-1:-1;;;;;;24237:40:0;;-1:-1:-1;;;24237:40:0;;:105;;-1:-1:-1;;;;;;;24294:48:0;;-1:-1:-1;;;24294:48:0;24237:105;:158;;;-1:-1:-1;;;;;;;;;;22630:40:0;;;24359:36;22521:157;34002:174;34077:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34077:29:0;-1:-1:-1;;;;;34077:29:0;;;;;;;;:24;;34131:23;34077:24;34131:14;:23::i;:::-;-1:-1:-1;;;;;34122:46:0;;;;;;;;;;;34002:174;;:::o;30840:110::-;30916:26;30926:2;30930:7;30916:26;;;;;;;;;;;;:9;:26::i;30150:348::-;30243:4;29945:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29945:16:0;30260:73;;;;-1:-1:-1;;;30260:73:0;;14679:2:1;30260:73:0;;;14661:21:1;14718:2;14698:18;;;14691:30;14757:34;14737:18;;;14730:62;-1:-1:-1;;;14808:18:1;;;14801:42;14860:19;;30260:73:0;14477:408:1;30260:73:0;30344:13;30360:23;30375:7;30360:14;:23::i;:::-;30344:39;;30413:5;-1:-1:-1;;;;;30402:16:0;:7;-1:-1:-1;;;;;30402:16:0;;:51;;;;30446:7;-1:-1:-1;;;;;30422:31:0;:20;30434:7;30422:11;:20::i;:::-;-1:-1:-1;;;;;30422:31:0;;30402:51;:87;;;-1:-1:-1;;;;;;27242:25:0;;;27218:4;27242:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;30457:32;30394:96;30150:348;-1:-1:-1;;;;30150:348:0:o;33259:625::-;33418:4;-1:-1:-1;;;;;33391:31:0;:23;33406:7;33391:14;:23::i;:::-;-1:-1:-1;;;;;33391:31:0;;33383:81;;;;-1:-1:-1;;;33383:81:0;;12458:2:1;33383:81:0;;;12440:21:1;12497:2;12477:18;;;12470:30;12536:34;12516:18;;;12509:62;-1:-1:-1;;;12587:18:1;;;12580:35;12632:19;;33383:81:0;12256:401:1;33383:81:0;-1:-1:-1;;;;;33483:16:0;;33475:65;;;;-1:-1:-1;;;33475:65:0;;13568:2:1;33475:65:0;;;13550:21:1;13607:2;13587:18;;;13580:30;13646:34;13626:18;;;13619:62;-1:-1:-1;;;13697:18:1;;;13690:34;13741:19;;33475:65:0;13366:400:1;33475:65:0;33553:39;33574:4;33580:2;33584:7;33553:20;:39::i;:::-;33657:29;33674:1;33678:7;33657:8;:29::i;:::-;-1:-1:-1;;;;;33699:15:0;;;;;;:9;:15;;;;;:20;;33718:1;;33699:15;:20;;33718:1;;33699:20;:::i;:::-;;;;-1:-1:-1;;;;;;;33730:13:0;;;;;;:9;:13;;;;;:18;;33747:1;;33730:13;:18;;33747:1;;33730:18;:::i;:::-;;;;-1:-1:-1;;33759:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33759:21:0;-1:-1:-1;;;;;33759:21:0;;;;;;;;;33798:27;;33759:16;;33798:27;;;;;;;26195:341;26125:411;;:::o;3158:191::-;3251:6;;;-1:-1:-1;;;;;3268:17:0;;;-1:-1:-1;;;;;;3268:17:0;;;;;;;3301:40;;3251:6;;;3268:17;3251:6;;3301:40;;3232:16;;3301:40;3221:128;3158:191;:::o;34318:315::-;34473:8;-1:-1:-1;;;;;34464:17:0;:5;-1:-1:-1;;;;;34464:17:0;;;34456:55;;;;-1:-1:-1;;;34456:55:0;;13973:2:1;34456:55:0;;;13955:21:1;14012:2;13992:18;;;13985:30;14051:27;14031:18;;;14024:55;14096:18;;34456:55:0;13771:349:1;34456:55:0;-1:-1:-1;;;;;34522:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;34522:46:0;;;;;;;;;;34584:41;;10037::1;;;34584::0;;10010:18:1;34584:41:0;;;;;;;34318:315;;;:::o;29228:::-;29385:28;29395:4;29401:2;29405:7;29385:9;:28::i;:::-;29432:48;29455:4;29461:2;29465:7;29474:5;29432:22;:48::i;:::-;29424:111;;;;-1:-1:-1;;;29424:111:0;;;;;;;:::i;50747:108::-;50807:13;50840:7;50833:14;;;;;:::i;19891:723::-;19947:13;20168:10;20164:53;;-1:-1:-1;;20195:10:0;;;;;;;;;;;;-1:-1:-1;;;20195:10:0;;;;;19891:723::o;20164:53::-;20242:5;20227:12;20283:78;20290:9;;20283:78;;20316:8;;;;:::i;:::-;;-1:-1:-1;20339:10:0;;-1:-1:-1;20347:2:0;20339:10;;:::i;:::-;;;20283:78;;;20371:19;20403:6;20393:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20393:17:0;;20371:39;;20421:154;20428:10;;20421:154;;20455:11;20465:1;20455:11;;:::i;:::-;;-1:-1:-1;20524:10:0;20532:2;20524:5;:10;:::i;:::-;20511:24;;:2;:24;:::i;:::-;20498:39;;20481:6;20488;20481:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;20481:56:0;;;;;;;;-1:-1:-1;20552:11:0;20561:2;20552:11;;:::i;:::-;;;20421:154;;31177:321;31307:18;31313:2;31317:7;31307:5;:18::i;:::-;31358:54;31389:1;31393:2;31397:7;31406:5;31358:22;:54::i;:::-;31336:154;;;;-1:-1:-1;;;31336:154:0;;;;;;;:::i;40991:589::-;-1:-1:-1;;;;;41197:18:0;;41193:187;;41232:40;41264:7;42407:10;:17;;42380:24;;;;:15;:24;;;;;:44;;;42435:24;;;;;;;;;;;;42303:164;41232:40;41193:187;;;41302:2;-1:-1:-1;;;;;41294:10:0;:4;-1:-1:-1;;;;;41294:10:0;;41290:90;;41321:47;41354:4;41360:7;41321:32;:47::i;:::-;-1:-1:-1;;;;;41394:16:0;;41390:183;;41427:45;41464:7;41427:36;:45::i;41390:183::-;41500:4;-1:-1:-1;;;;;41494:10:0;:2;-1:-1:-1;;;;;41494:10:0;;41490:83;;41521:40;41549:2;41553:7;41521:27;:40::i;35198:799::-;35353:4;-1:-1:-1;;;;;35374:13:0;;12543:19;:23;35370:620;;35410:72;;-1:-1:-1;;;35410:72:0;;-1:-1:-1;;;;;35410:36:0;;;;;:72;;686:10;;35461:4;;35467:7;;35476:5;;35410:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35410:72:0;;;;;;;;-1:-1:-1;;35410:72:0;;;;;;;;;;;;:::i;:::-;;;35406:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35652:13:0;;35648:272;;35695:60;;-1:-1:-1;;;35695:60:0;;;;;;;:::i;35648:272::-;35870:6;35864:13;35855:6;35851:2;35847:15;35840:38;35406:529;-1:-1:-1;;;;;;35533:51:0;-1:-1:-1;;;35533:51:0;;-1:-1:-1;35526:58:0;;35370:620;-1:-1:-1;35974:4:0;35198:799;;;;;;:::o;31834:439::-;-1:-1:-1;;;;;31914:16:0;;31906:61;;;;-1:-1:-1;;;31906:61:0;;16687:2:1;31906:61:0;;;16669:21:1;;;16706:18;;;16699:30;16765:34;16745:18;;;16738:62;16817:18;;31906:61:0;16485:356:1;31906:61:0;29921:4;29945:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29945:16:0;:30;31978:58;;;;-1:-1:-1;;;31978:58:0;;12864:2:1;31978:58:0;;;12846:21:1;12903:2;12883:18;;;12876:30;12942;12922:18;;;12915:58;12990:18;;31978:58:0;12662:352:1;31978:58:0;32049:45;32078:1;32082:2;32086:7;32049:20;:45::i;:::-;-1:-1:-1;;;;;32107:13:0;;;;;;:9;:13;;;;;:18;;32124:1;;32107:13;:18;;32124:1;;32107:18;:::i;:::-;;;;-1:-1:-1;;32136:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32136:21:0;-1:-1:-1;;;;;32136:21:0;;;;;;;;32175:33;;32136:16;;;32175:33;;32136:16;;32175:33;51785:21:::1;51708:106:::0;:::o;43094:988::-;43360:22;43410:1;43385:22;43402:4;43385:16;:22::i;:::-;:26;;;;:::i;:::-;43422:18;43443:26;;;:17;:26;;;;;;43360:51;;-1:-1:-1;43576:28:0;;;43572:328;;-1:-1:-1;;;;;43643:18:0;;43621:19;43643:18;;;:12;:18;;;;;;;;:34;;;;;;;;;43694:30;;;;;;:44;;;43811:30;;:17;:30;;;;;:43;;;43572:328;-1:-1:-1;43996:26:0;;;;:17;:26;;;;;;;;43989:33;;;-1:-1:-1;;;;;44040:18:0;;;;;:12;:18;;;;;:34;;;;;;;44033:41;43094:988::o;44377:1079::-;44655:10;:17;44630:22;;44655:21;;44675:1;;44655:21;:::i;:::-;44687:18;44708:24;;;:15;:24;;;;;;45081:10;:26;;44630:46;;-1:-1:-1;44708:24:0;;44630:46;;45081:26;;;;;;:::i;:::-;;;;;;;;;45059:48;;45145:11;45120:10;45131;45120:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;45225:28;;;:15;:28;;;;;;;:41;;;45397:24;;;;;45390:31;45432:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;44448:1008;;;44377:1079;:::o;41881:221::-;41966:14;41983:20;42000:2;41983:16;:20::i;:::-;-1:-1:-1;;;;;42014:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;42059:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;41881:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:247::-;709:6;762:2;750:9;741:7;737:23;733:32;730:52;;;778:1;775;768:12;730:52;817:9;804:23;836:31;861:5;836:31;:::i;902:388::-;970:6;978;1031:2;1019:9;1010:7;1006:23;1002:32;999:52;;;1047:1;1044;1037:12;999:52;1086:9;1073:23;1105:31;1130:5;1105:31;:::i;:::-;1155:5;-1:-1:-1;1212:2:1;1197:18;;1184:32;1225:33;1184:32;1225:33;:::i;:::-;1277:7;1267:17;;;902:388;;;;;:::o;1295:456::-;1372:6;1380;1388;1441:2;1429:9;1420:7;1416:23;1412:32;1409:52;;;1457:1;1454;1447:12;1409:52;1496:9;1483:23;1515:31;1540:5;1515:31;:::i;:::-;1565:5;-1:-1:-1;1622:2:1;1607:18;;1594:32;1635:33;1594:32;1635:33;:::i;:::-;1295:456;;1687:7;;-1:-1:-1;;;1741:2:1;1726:18;;;;1713:32;;1295:456::o;1756:794::-;1851:6;1859;1867;1875;1928:3;1916:9;1907:7;1903:23;1899:33;1896:53;;;1945:1;1942;1935:12;1896:53;1984:9;1971:23;2003:31;2028:5;2003:31;:::i;:::-;2053:5;-1:-1:-1;2110:2:1;2095:18;;2082:32;2123:33;2082:32;2123:33;:::i;:::-;2175:7;-1:-1:-1;2229:2:1;2214:18;;2201:32;;-1:-1:-1;2284:2:1;2269:18;;2256:32;2311:18;2300:30;;2297:50;;;2343:1;2340;2333:12;2297:50;2366:22;;2419:4;2411:13;;2407:27;-1:-1:-1;2397:55:1;;2448:1;2445;2438:12;2397:55;2471:73;2536:7;2531:2;2518:16;2513:2;2509;2505:11;2471:73;:::i;:::-;2461:83;;;1756:794;;;;;;;:::o;2555:382::-;2620:6;2628;2681:2;2669:9;2660:7;2656:23;2652:32;2649:52;;;2697:1;2694;2687:12;2649:52;2736:9;2723:23;2755:31;2780:5;2755:31;:::i;:::-;2805:5;-1:-1:-1;2862:2:1;2847:18;;2834:32;2875:30;2834:32;2875:30;:::i;2942:315::-;3010:6;3018;3071:2;3059:9;3050:7;3046:23;3042:32;3039:52;;;3087:1;3084;3077:12;3039:52;3126:9;3113:23;3145:31;3170:5;3145:31;:::i;:::-;3195:5;3247:2;3232:18;;;;3219:32;;-1:-1:-1;;;2942:315:1:o;3262:615::-;3348:6;3356;3409:2;3397:9;3388:7;3384:23;3380:32;3377:52;;;3425:1;3422;3415:12;3377:52;3465:9;3452:23;3494:18;3535:2;3527:6;3524:14;3521:34;;;3551:1;3548;3541:12;3521:34;3589:6;3578:9;3574:22;3564:32;;3634:7;3627:4;3623:2;3619:13;3615:27;3605:55;;3656:1;3653;3646:12;3605:55;3696:2;3683:16;3722:2;3714:6;3711:14;3708:34;;;3738:1;3735;3728:12;3708:34;3791:7;3786:2;3776:6;3773:1;3769:14;3765:2;3761:23;3757:32;3754:45;3751:65;;;3812:1;3809;3802:12;3751:65;3843:2;3835:11;;;;;3865:6;;-1:-1:-1;3262:615:1;;-1:-1:-1;;;;3262:615:1:o;3882:245::-;3949:6;4002:2;3990:9;3981:7;3977:23;3973:32;3970:52;;;4018:1;4015;4008:12;3970:52;4050:9;4044:16;4069:28;4091:5;4069:28;:::i;4132:245::-;4190:6;4243:2;4231:9;4222:7;4218:23;4214:32;4211:52;;;4259:1;4256;4249:12;4211:52;4298:9;4285:23;4317:30;4341:5;4317:30;:::i;4382:249::-;4451:6;4504:2;4492:9;4483:7;4479:23;4475:32;4472:52;;;4520:1;4517;4510:12;4472:52;4552:9;4546:16;4571:30;4595:5;4571:30;:::i;4903:450::-;4972:6;5025:2;5013:9;5004:7;5000:23;4996:32;4993:52;;;5041:1;5038;5031:12;4993:52;5081:9;5068:23;5114:18;5106:6;5103:30;5100:50;;;5146:1;5143;5136:12;5100:50;5169:22;;5222:4;5214:13;;5210:27;-1:-1:-1;5200:55:1;;5251:1;5248;5241:12;5200:55;5274:73;5339:7;5334:2;5321:16;5316:2;5312;5308:11;5274:73;:::i;5358:180::-;5417:6;5470:2;5458:9;5449:7;5445:23;5441:32;5438:52;;;5486:1;5483;5476:12;5438:52;-1:-1:-1;5509:23:1;;5358:180;-1:-1:-1;5358:180:1:o;5543:184::-;5613:6;5666:2;5654:9;5645:7;5641:23;5637:32;5634:52;;;5682:1;5679;5672:12;5634:52;-1:-1:-1;5705:16:1;;5543:184;-1:-1:-1;5543:184:1:o;5732:315::-;5800:6;5808;5861:2;5849:9;5840:7;5836:23;5832:32;5829:52;;;5877:1;5874;5867:12;5829:52;5913:9;5900:23;5890:33;;5973:2;5962:9;5958:18;5945:32;5986:31;6011:5;5986:31;:::i;6052:257::-;6093:3;6131:5;6125:12;6158:6;6153:3;6146:19;6174:63;6230:6;6223:4;6218:3;6214:14;6207:4;6200:5;6196:16;6174:63;:::i;:::-;6291:2;6270:15;-1:-1:-1;;6266:29:1;6257:39;;;;6298:4;6253:50;;6052:257;-1:-1:-1;;6052:257:1:o;6314:1527::-;6538:3;6576:6;6570:13;6602:4;6615:51;6659:6;6654:3;6649:2;6641:6;6637:15;6615:51;:::i;:::-;6729:13;;6688:16;;;;6751:55;6729:13;6688:16;6773:15;;;6751:55;:::i;:::-;6895:13;;6828:20;;;6868:1;;6955;6977:18;;;;7030;;;;7057:93;;7135:4;7125:8;7121:19;7109:31;;7057:93;7198:2;7188:8;7185:16;7165:18;7162:40;7159:167;;;-1:-1:-1;;;7225:33:1;;7281:4;7278:1;7271:15;7311:4;7232:3;7299:17;7159:167;7342:18;7369:110;;;;7493:1;7488:328;;;;7335:481;;7369:110;-1:-1:-1;;7404:24:1;;7390:39;;7449:20;;;;-1:-1:-1;7369:110:1;;7488:328;19870:1;19863:14;;;19907:4;19894:18;;7583:1;7597:169;7611:8;7608:1;7605:15;7597:169;;;7693:14;;7678:13;;;7671:37;7736:16;;;;7628:10;;7597:169;;;7601:3;;7797:8;7790:5;7786:20;7779:27;;7335:481;-1:-1:-1;7832:3:1;;6314:1527;-1:-1:-1;;;;;;;;;;;6314:1527:1:o;8488:488::-;-1:-1:-1;;;;;8757:15:1;;;8739:34;;8809:15;;8804:2;8789:18;;8782:43;8856:2;8841:18;;8834:34;;;8904:3;8899:2;8884:18;;8877:31;;;8682:4;;8925:45;;8950:19;;8942:6;8925:45;:::i;:::-;8917:53;8488:488;-1:-1:-1;;;;;;8488:488:1:o;9260:632::-;9431:2;9483:21;;;9553:13;;9456:18;;;9575:22;;;9402:4;;9431:2;9654:15;;;;9628:2;9613:18;;;9402:4;9697:169;9711:6;9708:1;9705:13;9697:169;;;9772:13;;9760:26;;9841:15;;;;9806:12;;;;9733:1;9726:9;9697:169;;;-1:-1:-1;9883:3:1;;9260:632;-1:-1:-1;;;;;;9260:632:1:o;10089:219::-;10238:2;10227:9;10220:21;10201:4;10258:44;10298:2;10287:9;10283:18;10275:6;10258:44;:::i;10313:344::-;10515:2;10497:21;;;10554:2;10534:18;;;10527:30;-1:-1:-1;;;10588:2:1;10573:18;;10566:50;10648:2;10633:18;;10313:344::o;11430:414::-;11632:2;11614:21;;;11671:2;11651:18;;;11644:30;11710:34;11705:2;11690:18;;11683:62;-1:-1:-1;;;11776:2:1;11761:18;;11754:48;11834:3;11819:19;;11430:414::o;17259:356::-;17461:2;17443:21;;;17480:18;;;17473:30;17539:34;17534:2;17519:18;;17512:62;17606:2;17591:18;;17259:356::o;18438:413::-;18640:2;18622:21;;;18679:2;18659:18;;;18652:30;18718:34;18713:2;18698:18;;18691:62;-1:-1:-1;;;18784:2:1;18769:18;;18762:47;18841:3;18826:19;;18438:413::o;19923:128::-;19963:3;19994:1;19990:6;19987:1;19984:13;19981:39;;;20000:18;;:::i;:::-;-1:-1:-1;20036:9:1;;19923:128::o;20056:120::-;20096:1;20122;20112:35;;20127:18;;:::i;:::-;-1:-1:-1;20161:9:1;;20056:120::o;20181:168::-;20221:7;20287:1;20283;20279:6;20275:14;20272:1;20269:21;20264:1;20257:9;20250:17;20246:45;20243:71;;;20294:18;;:::i;:::-;-1:-1:-1;20334:9:1;;20181:168::o;20354:125::-;20394:4;20422:1;20419;20416:8;20413:34;;;20427:18;;:::i;:::-;-1:-1:-1;20464:9:1;;20354:125::o;20484:258::-;20556:1;20566:113;20580:6;20577:1;20574:13;20566:113;;;20656:11;;;20650:18;20637:11;;;20630:39;20602:2;20595:10;20566:113;;;20697:6;20694:1;20691:13;20688:48;;;-1:-1:-1;;20732:1:1;20714:16;;20707:27;20484:258::o;20747:380::-;20826:1;20822:12;;;;20869;;;20890:61;;20944:4;20936:6;20932:17;20922:27;;20890:61;20997:2;20989:6;20986:14;20966:18;20963:38;20960:161;;;21043:10;21038:3;21034:20;21031:1;21024:31;21078:4;21075:1;21068:15;21106:4;21103:1;21096:15;20960:161;;20747:380;;;:::o;21132:135::-;21171:3;-1:-1:-1;;21192:17:1;;21189:43;;;21212:18;;:::i;:::-;-1:-1:-1;21259:1:1;21248:13;;21132:135::o;21272:112::-;21304:1;21330;21320:35;;21335:18;;:::i;:::-;-1:-1:-1;21369:9:1;;21272:112::o;21389:127::-;21450:10;21445:3;21441:20;21438:1;21431:31;21481:4;21478:1;21471:15;21505:4;21502:1;21495:15;21521:127;21582:10;21577:3;21573:20;21570:1;21563:31;21613:4;21610:1;21603:15;21637:4;21634:1;21627:15;21653:127;21714:10;21709:3;21705:20;21702:1;21695:31;21745:4;21742:1;21735:15;21769:4;21766:1;21759:15;21785:127;21846:10;21841:3;21837:20;21834:1;21827:31;21877:4;21874:1;21867:15;21901:4;21898:1;21891:15;21917:127;21978:10;21973:3;21969:20;21966:1;21959:31;22009:4;22006:1;21999:15;22033:4;22030:1;22023:15;22049:131;-1:-1:-1;;;;;22124:31:1;;22114:42;;22104:70;;22170:1;22167;22160:12;22185:118;22271:5;22264:13;22257:21;22250:5;22247:32;22237:60;;22293:1;22290;22283:12;22308:131;-1:-1:-1;;;;;;22382:32:1;;22372:43;;22362:71;;22429:1;22426;22419:12
Swarm Source
ipfs://f344ddc4f08e51de09d9118de449000d9a4a0f6b314cb4417eb5d894c179fd2b
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.