ETH Price: $2,434.71 (-0.87%)
 

Overview

Max Total Supply

288 LZR

Holders

225

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 LZR
0x19989297b5641de9ceac8a0ca63ac384cf3a633d
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Lazer

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-13
*/

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts 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/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts 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/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: erc721a/contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;








error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: LazerR.sol



pragma solidity >=0.7.0 <0.9.0;




struct PresaleConfig {
  uint32 startTime;
  uint32 endTime;
  uint256 whitelistMintPerWalletMax;
  uint256 whitelistPrice;
}

contract Lazer is ERC721A, Ownable {
  using Strings for uint256;

  bytes32 public merkleRoot;

  string public baseURI;

  uint32 public WHITELIST_MAX_PER_WALLET_LIMIT = 999;
  uint32 public MINT_PER_WALLET_MAX = 999;
  uint32 public MAX_TEAM_RESERVES = 50;

  uint256 public PRICE = 0.15 ether;
  uint256 public WHITELIST_PRICE = 0.15 ether;
  uint256 public SUPPLY_MAX = 10000;
  uint256 public SUPPLY_PRESALE = 5000;
  uint256 public teamReserves;

  bool public presalePaused;
  bool public publicSalePaused;
  bool public revealed;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI
  ) ERC721A(_name, _symbol) {
    _safeMint(address(this), 1);
    _burn(0);
    baseURI = _initBaseURI;
}

  modifier mintCompliance(uint256 _mintAmount) {
    require(msg.sender == tx.origin, "Nope. Can't mint through another contract.");
    require((totalSupply() + _mintAmount) <= SUPPLY_MAX, "Max supply exceeded!");
    require((_numberMinted(msg.sender) + _mintAmount) <= MINT_PER_WALLET_MAX, "You can only mint 10 per wallet!");
    _;
  }

  function buyPresale(uint256 _mintAmount, bytes32[] calldata _merkleProof)
    external
    payable
    mintCompliance(_mintAmount) 
  {
    
    require(!presalePaused, "Presale has been paused.");
    require((_numberMinted(msg.sender) + _mintAmount) <= WHITELIST_MAX_PER_WALLET_LIMIT, "Exceeds whitelist max mint per wallet!"); 
    require(msg.value >= (WHITELIST_PRICE * _mintAmount), "Insufficient funds!");
    bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
    require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Invalid Merkle Proof.");

    _safeMint(msg.sender, _mintAmount);
  }  

  function buyPublic(uint256 _mintAmount)
    external
    payable
    mintCompliance(_mintAmount)
  {
    require(!publicSalePaused, "Public minting is paused.");
    require(msg.value >= (PRICE * _mintAmount), "Insufficient funds!");

    _safeMint(msg.sender, _mintAmount);
  }
  
  function mintForAddress(uint256 _mintAmount, address _receiver) public onlyOwner { // Reserves for the team and promos.
    require((_mintAmount + teamReserves) <= MAX_TEAM_RESERVES, "Max reserves exhausted.");
    teamReserves += _mintAmount;
    _safeMint(_receiver, _mintAmount);
  }

  function setRevealed() public onlyOwner {
    revealed = true;
  }

  function pausePublic(bool _state) public onlyOwner {
    publicSalePaused = _state;
  }

  function pausePresale(bool _state) public onlyOwner {
    presalePaused = _state;
  }

  function setMerkleRoot(bytes32 merkleRoot_) public onlyOwner {
    merkleRoot = merkleRoot_;
  }

  function setPublicPrice(uint256 _price) public onlyOwner {
    PRICE = _price;
  }

  function setWhitelistPrice(uint256 _price) public onlyOwner {
    WHITELIST_PRICE = _price;
  }

  function setMaxSupply(uint256 _supply) public onlyOwner {
    SUPPLY_MAX = _supply;
  }

  function withdraw() public onlyOwner {
    payable(owner()).transfer(address(this).balance);
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
      baseURI = _newBaseURI;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
        _exists(_tokenId),
        "ERC721Metadata: URI query for nonexistent token"
    );

    if (!revealed) return _baseURI();
    return string(abi.encodePacked(_baseURI(), _tokenId.toString(), ".json"));
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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_TEAM_RESERVES","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PER_WALLET_MAX","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_MAX_PER_WALLET_LIMIT","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"buyPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"buyPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pausePublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presalePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSalePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setWhitelistPrice","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":[],"name":"teamReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600b80546001600160601b0319166832000003e7000003e7179055670214e8348c4f0000600c819055600d55612710600e55611388600f553480156200004957600080fd5b5060405162002ee838038062002ee88339810160408190526200006c91620009ae565b8251839083906200008590600290602085019062000844565b5080516200009b90600390602084019062000844565b50506000805550620000ad33620000e5565b620000ba30600162000137565b620000c660006200015d565b8051620000db90600a90602084019062000844565b5050505062000b17565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001598282604051806020016040528060008152506200016d60201b60201c565b5050565b6200016a81600062000181565b50565b6200017c838383600162000365565b505050565b60006200018e8362000528565b8051909150821562000218576000336001600160a01b0383161480620001d757506001600160a01b038216600090815260076020908152604080832033845290915290205460ff165b80620001f5575033620001ea866200065c565b6001600160a01b0316145b9050806200021657604051632ce44b5f60e11b815260040160405180910390fd5b505b6200022660008583620006a9565b6001600160a01b0380821660008181526005602090815260408083208054600160801b6000196001600160401b038084169190910181166001600160401b0319841681178390048216600190810183169093027fffffffffffffffff0000000000000000ffffffffffffffff0000000000000000909416179290921783558b86526004909452828520805460ff60e01b1942909316600160a01b026001600160e01b03199091169097179690961716600160e01b1785559189018084529220805491949091166200032c5760005482146200032c57805460208701516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038716171781555b5050604051869250600091506001600160a01b0384169060008051602062002ec8833981519152908390a4505060018054810190555050565b6000546001600160a01b0385166200038f57604051622e076360e81b815260040160405180910390fd5b83620003ae5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546001600160801b031981166001600160401b038083168c018116918217680100000000000000006001600160401b031990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801562000467575062000467876001600160a01b03166200070560201b620014371760201c565b15620004e7575b60405182906001600160a01b0389169060009060008051602062002ec8833981519152908290a46001820191620004ab9060009089908862000714565b620004c9576040516368d2bf6b60e11b815260040160405180910390fd5b808214156200046e578260005414620004e157600080fd5b6200051d565b5b6040516001830192906001600160a01b0389169060009060008051602062002ec8833981519152908290a480821415620004e8575b506000555050505050565b6040805160608101825260008082526020820181905291810191909152818062000550600090565b1115801562000560575060005481105b156200064357600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290620006415780516001600160a01b031615620005d6579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff16151592810192909252156200063b579392505050565b620005d6565b505b604051636f96cda160e11b815260040160405180910390fd5b6000620006698262000815565b62000687576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b50505050565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6001600160a01b03163b151590565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906200074b90339089908890889060040162000a3f565b602060405180830381600087803b1580156200076657600080fd5b505af192505050801562000799575060408051601f3d908101601f1916820190925262000796918101906200097b565b60015b620007f8573d808015620007ca576040519150601f19603f3d011682016040523d82523d6000602084013e620007cf565b606091505b508051620007f0576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60008054821080156200083e5750600082815260046020526040902054600160e01b900460ff16155b92915050565b828054620008529062000ac4565b90600052602060002090601f016020900481019282620008765760008555620008c1565b82601f106200089157805160ff1916838001178555620008c1565b82800160010185558215620008c1579182015b82811115620008c1578251825591602001919060010190620008a4565b50620008cf929150620008d3565b5090565b5b80821115620008cf5760008155600101620008d4565b600082601f830112620008fc57600080fd5b81516001600160401b038082111562000919576200091962000b01565b604051601f8301601f19908116603f0116810190828211818310171562000944576200094462000b01565b816040528381528660208588010111156200095e57600080fd5b6200097184602083016020890162000a95565b9695505050505050565b6000602082840312156200098e57600080fd5b81516001600160e01b031981168114620009a757600080fd5b9392505050565b600080600060608486031215620009c457600080fd5b83516001600160401b0380821115620009dc57600080fd5b620009ea87838801620008ea565b9450602086015191508082111562000a0157600080fd5b62000a0f87838801620008ea565b9350604086015191508082111562000a2657600080fd5b5062000a3586828701620008ea565b9150509250925092565b600060018060a01b03808716835280861660208401525083604083015260806060830152825180608084015262000a7e8160a085016020870162000a95565b601f01601f19169190910160a00195945050505050565b60005b8381101562000ab257818101518382015260200162000a98565b83811115620006a35750506000910152565b600181811c9082168062000ad957607f821691505b6020821081141562000afb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6123a18062000b276000396000f3fe6080604052600436106102515760003560e01c80637cb6475911610139578063c0c8dd07116100b6578063c9ce448a1161007a578063c9ce448a1461068e578063d7299ef7146106b3578063e985e9c5146106d3578063efbd73f41461071c578063f2fde38b1461073c578063f79c173f1461075c57600080fd5b8063c0c8dd0714610604578063c1c4f5cb14610617578063c62752551461063b578063c87b56dd1461065b578063c91fab521461067b57600080fd5b80639e38f70f116100fd5780639e38f70f1461057e578063a22cb46514610594578063a440cd98146105b4578063a79fdbb4146105ca578063b88d4fde146105e457600080fd5b80637cb64759146104ff5780638d859f3e1461051f5780638da5cb5b14610535578063958f6ed61461055357806395d89b411461056957600080fd5b80633bd64968116101d25780636352211e116101965780636352211e146104555780636c0360eb146104755780636f8b44b01461048a57806370a08231146104aa578063715018a6146104ca578063717d57d3146104df57600080fd5b80633bd64968146103cb5780633ccfd60b146103e057806342842e0e146103f5578063518302271461041557806355f804b31461043557600080fd5b806317e7f2951161021957806317e7f2951461032657806318160ddd1461034a57806323b872dd146103635780632affa9fc146103835780632eb4a7ab146103b557600080fd5b806301ffc9a714610256578063069cd5731461028b57806306fdde03146102aa578063081812fc146102cc578063095ea7b314610304575b600080fd5b34801561026257600080fd5b50610276610271366004611fa6565b61077c565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b5060115461027690610100900460ff1681565b3480156102b657600080fd5b506102bf6107ce565b6040516102829190612173565b3480156102d857600080fd5b506102ec6102e7366004611f8d565b610860565b6040516001600160a01b039091168152602001610282565b34801561031057600080fd5b5061032461031f366004611f48565b6108a4565b005b34801561033257600080fd5b5061033c600d5481565b604051908152602001610282565b34801561035657600080fd5b506001546000540361033c565b34801561036f57600080fd5b5061032461037e366004611e66565b610932565b34801561038f57600080fd5b50600b546103a09063ffffffff1681565b60405163ffffffff9091168152602001610282565b3480156103c157600080fd5b5061033c60095481565b3480156103d757600080fd5b5061032461093d565b3480156103ec57600080fd5b50610324610983565b34801561040157600080fd5b50610324610410366004611e66565b6109e9565b34801561042157600080fd5b506011546102769062010000900460ff1681565b34801561044157600080fd5b50610324610450366004611fe0565b610a04565b34801561046157600080fd5b506102ec610470366004611f8d565b610a45565b34801561048157600080fd5b506102bf610a57565b34801561049657600080fd5b506103246104a5366004611f8d565b610ae5565b3480156104b657600080fd5b5061033c6104c5366004611e11565b610b14565b3480156104d657600080fd5b50610324610b63565b3480156104eb57600080fd5b506103246104fa366004611f8d565b610b99565b34801561050b57600080fd5b5061032461051a366004611f8d565b610bc8565b34801561052b57600080fd5b5061033c600c5481565b34801561054157600080fd5b506008546001600160a01b03166102ec565b34801561055f57600080fd5b5061033c600e5481565b34801561057557600080fd5b506102bf610bf7565b34801561058a57600080fd5b5061033c60105481565b3480156105a057600080fd5b506103246105af366004611f1e565b610c06565b3480156105c057600080fd5b5061033c600f5481565b3480156105d657600080fd5b506011546102769060ff1681565b3480156105f057600080fd5b506103246105ff366004611ea2565b610c9c565b610324610612366004611f8d565b610ced565b34801561062357600080fd5b50600b546103a090600160401b900463ffffffff1681565b34801561064757600080fd5b50610324610656366004611f8d565b610e95565b34801561066757600080fd5b506102bf610676366004611f8d565b610ec4565b61032461068936600461204c565b610f83565b34801561069a57600080fd5b50600b546103a090640100000000900463ffffffff1681565b3480156106bf57600080fd5b506103246106ce366004611f72565b611265565b3480156106df57600080fd5b506102766106ee366004611e33565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561072857600080fd5b50610324610737366004612029565b6112a2565b34801561074857600080fd5b50610324610757366004611e11565b61135b565b34801561076857600080fd5b50610324610777366004611f72565b6113f3565b60006001600160e01b031982166380ac58cd60e01b14806107ad57506001600160e01b03198216635b5e139f60e01b145b806107c857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546107dd90612293565b80601f016020809104026020016040519081016040528092919081815260200182805461080990612293565b80156108565780601f1061082b57610100808354040283529160200191610856565b820191906000526020600020905b81548152906001019060200180831161083957829003601f168201915b5050505050905090565b600061086b82611446565b610888576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006108af82610a45565b9050806001600160a01b0316836001600160a01b031614156108e45760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610904575061090281336106ee565b155b15610922576040516367d9dca160e11b815260040160405180910390fd5b61092d838383611471565b505050565b61092d8383836114cd565b6008546001600160a01b031633146109705760405162461bcd60e51b8152600401610967906121d0565b60405180910390fd5b6011805462ff0000191662010000179055565b6008546001600160a01b031633146109ad5760405162461bcd60e51b8152600401610967906121d0565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156109e6573d6000803e3d6000fd5b50565b61092d83838360405180602001604052806000815250610c9c565b6008546001600160a01b03163314610a2e5760405162461bcd60e51b8152600401610967906121d0565b8051610a4190600a906020840190611cd6565b5050565b6000610a50826116ba565b5192915050565b600a8054610a6490612293565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9090612293565b8015610add5780601f10610ab257610100808354040283529160200191610add565b820191906000526020600020905b815481529060010190602001808311610ac057829003601f168201915b505050505081565b6008546001600160a01b03163314610b0f5760405162461bcd60e51b8152600401610967906121d0565b600e55565b60006001600160a01b038216610b3d576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610b8d5760405162461bcd60e51b8152600401610967906121d0565b610b9760006117d6565b565b6008546001600160a01b03163314610bc35760405162461bcd60e51b8152600401610967906121d0565b600d55565b6008546001600160a01b03163314610bf25760405162461bcd60e51b8152600401610967906121d0565b600955565b6060600380546107dd90612293565b6001600160a01b038216331415610c305760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ca78484846114cd565b6001600160a01b0383163b15158015610cc95750610cc784848484611828565b155b15610ce7576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b80333214610d0d5760405162461bcd60e51b815260040161096790612186565b600e5481610d1e6001546000540390565b610d289190612205565b1115610d6d5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610967565b600b54640100000000900463ffffffff1681610d8833611920565b610d929190612205565b1115610de05760405162461bcd60e51b815260206004820181905260248201527f596f752063616e206f6e6c79206d696e74203130207065722077616c6c6574216044820152606401610967565b601154610100900460ff1615610e385760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206d696e74696e67206973207061757365642e000000000000006044820152606401610967565b81600c54610e469190612231565b341015610e8b5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610967565b610a41338361194c565b6008546001600160a01b03163314610ebf5760405162461bcd60e51b8152600401610967906121d0565b600c55565b6060610ecf82611446565b610f335760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610967565b60115462010000900460ff16610f4b576107c8611966565b610f53611966565b610f5c83611975565b604051602001610f6d9291906120f7565b6040516020818303038152906040529050919050565b82333214610fa35760405162461bcd60e51b815260040161096790612186565b600e5481610fb46001546000540390565b610fbe9190612205565b11156110035760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610967565b600b54640100000000900463ffffffff168161101e33611920565b6110289190612205565b11156110765760405162461bcd60e51b815260206004820181905260248201527f596f752063616e206f6e6c79206d696e74203130207065722077616c6c6574216044820152606401610967565b60115460ff16156110c95760405162461bcd60e51b815260206004820152601860248201527f50726573616c6520686173206265656e207061757365642e00000000000000006044820152606401610967565b600b5463ffffffff16846110dc33611920565b6110e69190612205565b11156111435760405162461bcd60e51b815260206004820152602660248201527f457863656564732077686974656c697374206d6178206d696e74207065722077604482015265616c6c65742160d01b6064820152608401610967565b83600d546111519190612231565b3410156111965760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610967565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050611210848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506009549150849050611a73565b6112545760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b21026b2b935b63290283937b7b31760591b6044820152606401610967565b61125e338661194c565b5050505050565b6008546001600160a01b0316331461128f5760405162461bcd60e51b8152600401610967906121d0565b6011805460ff1916911515919091179055565b6008546001600160a01b031633146112cc5760405162461bcd60e51b8152600401610967906121d0565b600b54601054600160401b90910463ffffffff16906112eb9084612205565b11156113395760405162461bcd60e51b815260206004820152601760248201527f4d6178207265736572766573206578686175737465642e0000000000000000006044820152606401610967565b816010600082825461134b9190612205565b90915550610a419050818361194c565b6008546001600160a01b031633146113855760405162461bcd60e51b8152600401610967906121d0565b6001600160a01b0381166113ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610967565b6109e6816117d6565b6008546001600160a01b0316331461141d5760405162461bcd60e51b8152600401610967906121d0565b601180549115156101000261ff0019909216919091179055565b6001600160a01b03163b151590565b60008054821080156107c8575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006114d8826116ba565b9050836001600160a01b031681600001516001600160a01b03161461150f5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061152d575061152d85336106ee565b8061154857503361153d84610860565b6001600160a01b0316145b90508061156857604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661158f57604051633a954ecd60e21b815260040160405180910390fd5b61159b60008487611471565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611671576000548214611671578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461125e565b6040805160608101825260008082526020820181905291810191909152816000548110156117bd57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906117bb5780516001600160a01b031615611751579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff16151592810192909252156117b6579392505050565b611751565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061185d903390899088908890600401612136565b602060405180830381600087803b15801561187757600080fd5b505af19250505080156118a7575060408051601f3d908101601f191682019092526118a491810190611fc3565b60015b611902573d8080156118d5576040519150601f19603f3d011682016040523d82523d6000602084013e6118da565b606091505b5080516118fa576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6001600160a01b0316600090815260056020526040902054600160401b900467ffffffffffffffff1690565b610a41828260405180602001604052806000815250611a89565b6060600a80546107dd90612293565b6060816119995750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119c357806119ad816122ce565b91506119bc9050600a8361221d565b915061199d565b60008167ffffffffffffffff8111156119de576119de61233f565b6040519080825280601f01601f191660200182016040528015611a08576020820181803683370190505b5090505b841561191857611a1d600183612250565b9150611a2a600a866122e9565b611a35906030612205565b60f81b818381518110611a4a57611a4a612329565b60200101906001600160f81b031916908160001a905350611a6c600a8661221d565b9450611a0c565b600082611a808584611a96565b14949350505050565b61092d8383836001611b0a565b600081815b8451811015611b02576000858281518110611ab857611ab8612329565b60200260200101519050808311611ade5760008381526020829052604090209250611aef565b600081815260208490526040902092505b5080611afa816122ce565b915050611a9b565b509392505050565b6000546001600160a01b038516611b3357604051622e076360e81b815260040160405180910390fd5b83611b515760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b429092169190910217905580808501838015611bfe57506001600160a01b0387163b15155b15611c87575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611c4f6000888480600101955088611828565b611c6c576040516368d2bf6b60e11b815260040160405180910390fd5b80821415611c04578260005414611c8257600080fd5b611ccd565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415611c88575b5060005561125e565b828054611ce290612293565b90600052602060002090601f016020900481019282611d045760008555611d4a565b82601f10611d1d57805160ff1916838001178555611d4a565b82800160010185558215611d4a579182015b82811115611d4a578251825591602001919060010190611d2f565b50611d56929150611d5a565b5090565b5b80821115611d565760008155600101611d5b565b600067ffffffffffffffff80841115611d8a57611d8a61233f565b604051601f8501601f19908116603f01168101908282118183101715611db257611db261233f565b81604052809350858152868686011115611dcb57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611dfc57600080fd5b919050565b80358015158114611dfc57600080fd5b600060208284031215611e2357600080fd5b611e2c82611de5565b9392505050565b60008060408385031215611e4657600080fd5b611e4f83611de5565b9150611e5d60208401611de5565b90509250929050565b600080600060608486031215611e7b57600080fd5b611e8484611de5565b9250611e9260208501611de5565b9150604084013590509250925092565b60008060008060808587031215611eb857600080fd5b611ec185611de5565b9350611ecf60208601611de5565b925060408501359150606085013567ffffffffffffffff811115611ef257600080fd5b8501601f81018713611f0357600080fd5b611f1287823560208401611d6f565b91505092959194509250565b60008060408385031215611f3157600080fd5b611f3a83611de5565b9150611e5d60208401611e01565b60008060408385031215611f5b57600080fd5b611f6483611de5565b946020939093013593505050565b600060208284031215611f8457600080fd5b611e2c82611e01565b600060208284031215611f9f57600080fd5b5035919050565b600060208284031215611fb857600080fd5b8135611e2c81612355565b600060208284031215611fd557600080fd5b8151611e2c81612355565b600060208284031215611ff257600080fd5b813567ffffffffffffffff81111561200957600080fd5b8201601f8101841361201a57600080fd5b61191884823560208401611d6f565b6000806040838503121561203c57600080fd5b82359150611e5d60208401611de5565b60008060006040848603121561206157600080fd5b83359250602084013567ffffffffffffffff8082111561208057600080fd5b818601915086601f83011261209457600080fd5b8135818111156120a357600080fd5b8760208260051b85010111156120b857600080fd5b6020830194508093505050509250925092565b600081518084526120e3816020860160208601612267565b601f01601f19169290920160200192915050565b60008351612109818460208801612267565b83519083019061211d818360208801612267565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612169908301846120cb565b9695505050505050565b602081526000611e2c60208301846120cb565b6020808252602a908201527f4e6f70652e2043616e2774206d696e74207468726f75676820616e6f746865726040820152691031b7b73a3930b1ba1760b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115612218576122186122fd565b500190565b60008261222c5761222c612313565b500490565b600081600019048311821515161561224b5761224b6122fd565b500290565b600082821015612262576122626122fd565b500390565b60005b8381101561228257818101518382015260200161226a565b83811115610ce75750506000910152565b600181811c908216806122a757607f821691505b602082108114156122c857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156122e2576122e26122fd565b5060010190565b6000826122f8576122f8612313565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146109e657600080fdfea2646970667358221220a454d955be574728f9e1d7dfd75c776ce770e46164d035f4c78b6045774d374f64736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000054c415a455200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034c5a5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045697066733a2f2f516d515a3634653648374b6b5643436f45444b3350654c54386e624575797a477369706978427655414b4a3170442f756e72657665616c65642e6a736f6e000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102515760003560e01c80637cb6475911610139578063c0c8dd07116100b6578063c9ce448a1161007a578063c9ce448a1461068e578063d7299ef7146106b3578063e985e9c5146106d3578063efbd73f41461071c578063f2fde38b1461073c578063f79c173f1461075c57600080fd5b8063c0c8dd0714610604578063c1c4f5cb14610617578063c62752551461063b578063c87b56dd1461065b578063c91fab521461067b57600080fd5b80639e38f70f116100fd5780639e38f70f1461057e578063a22cb46514610594578063a440cd98146105b4578063a79fdbb4146105ca578063b88d4fde146105e457600080fd5b80637cb64759146104ff5780638d859f3e1461051f5780638da5cb5b14610535578063958f6ed61461055357806395d89b411461056957600080fd5b80633bd64968116101d25780636352211e116101965780636352211e146104555780636c0360eb146104755780636f8b44b01461048a57806370a08231146104aa578063715018a6146104ca578063717d57d3146104df57600080fd5b80633bd64968146103cb5780633ccfd60b146103e057806342842e0e146103f5578063518302271461041557806355f804b31461043557600080fd5b806317e7f2951161021957806317e7f2951461032657806318160ddd1461034a57806323b872dd146103635780632affa9fc146103835780632eb4a7ab146103b557600080fd5b806301ffc9a714610256578063069cd5731461028b57806306fdde03146102aa578063081812fc146102cc578063095ea7b314610304575b600080fd5b34801561026257600080fd5b50610276610271366004611fa6565b61077c565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b5060115461027690610100900460ff1681565b3480156102b657600080fd5b506102bf6107ce565b6040516102829190612173565b3480156102d857600080fd5b506102ec6102e7366004611f8d565b610860565b6040516001600160a01b039091168152602001610282565b34801561031057600080fd5b5061032461031f366004611f48565b6108a4565b005b34801561033257600080fd5b5061033c600d5481565b604051908152602001610282565b34801561035657600080fd5b506001546000540361033c565b34801561036f57600080fd5b5061032461037e366004611e66565b610932565b34801561038f57600080fd5b50600b546103a09063ffffffff1681565b60405163ffffffff9091168152602001610282565b3480156103c157600080fd5b5061033c60095481565b3480156103d757600080fd5b5061032461093d565b3480156103ec57600080fd5b50610324610983565b34801561040157600080fd5b50610324610410366004611e66565b6109e9565b34801561042157600080fd5b506011546102769062010000900460ff1681565b34801561044157600080fd5b50610324610450366004611fe0565b610a04565b34801561046157600080fd5b506102ec610470366004611f8d565b610a45565b34801561048157600080fd5b506102bf610a57565b34801561049657600080fd5b506103246104a5366004611f8d565b610ae5565b3480156104b657600080fd5b5061033c6104c5366004611e11565b610b14565b3480156104d657600080fd5b50610324610b63565b3480156104eb57600080fd5b506103246104fa366004611f8d565b610b99565b34801561050b57600080fd5b5061032461051a366004611f8d565b610bc8565b34801561052b57600080fd5b5061033c600c5481565b34801561054157600080fd5b506008546001600160a01b03166102ec565b34801561055f57600080fd5b5061033c600e5481565b34801561057557600080fd5b506102bf610bf7565b34801561058a57600080fd5b5061033c60105481565b3480156105a057600080fd5b506103246105af366004611f1e565b610c06565b3480156105c057600080fd5b5061033c600f5481565b3480156105d657600080fd5b506011546102769060ff1681565b3480156105f057600080fd5b506103246105ff366004611ea2565b610c9c565b610324610612366004611f8d565b610ced565b34801561062357600080fd5b50600b546103a090600160401b900463ffffffff1681565b34801561064757600080fd5b50610324610656366004611f8d565b610e95565b34801561066757600080fd5b506102bf610676366004611f8d565b610ec4565b61032461068936600461204c565b610f83565b34801561069a57600080fd5b50600b546103a090640100000000900463ffffffff1681565b3480156106bf57600080fd5b506103246106ce366004611f72565b611265565b3480156106df57600080fd5b506102766106ee366004611e33565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561072857600080fd5b50610324610737366004612029565b6112a2565b34801561074857600080fd5b50610324610757366004611e11565b61135b565b34801561076857600080fd5b50610324610777366004611f72565b6113f3565b60006001600160e01b031982166380ac58cd60e01b14806107ad57506001600160e01b03198216635b5e139f60e01b145b806107c857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600280546107dd90612293565b80601f016020809104026020016040519081016040528092919081815260200182805461080990612293565b80156108565780601f1061082b57610100808354040283529160200191610856565b820191906000526020600020905b81548152906001019060200180831161083957829003601f168201915b5050505050905090565b600061086b82611446565b610888576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006108af82610a45565b9050806001600160a01b0316836001600160a01b031614156108e45760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610904575061090281336106ee565b155b15610922576040516367d9dca160e11b815260040160405180910390fd5b61092d838383611471565b505050565b61092d8383836114cd565b6008546001600160a01b031633146109705760405162461bcd60e51b8152600401610967906121d0565b60405180910390fd5b6011805462ff0000191662010000179055565b6008546001600160a01b031633146109ad5760405162461bcd60e51b8152600401610967906121d0565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156109e6573d6000803e3d6000fd5b50565b61092d83838360405180602001604052806000815250610c9c565b6008546001600160a01b03163314610a2e5760405162461bcd60e51b8152600401610967906121d0565b8051610a4190600a906020840190611cd6565b5050565b6000610a50826116ba565b5192915050565b600a8054610a6490612293565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9090612293565b8015610add5780601f10610ab257610100808354040283529160200191610add565b820191906000526020600020905b815481529060010190602001808311610ac057829003601f168201915b505050505081565b6008546001600160a01b03163314610b0f5760405162461bcd60e51b8152600401610967906121d0565b600e55565b60006001600160a01b038216610b3d576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610b8d5760405162461bcd60e51b8152600401610967906121d0565b610b9760006117d6565b565b6008546001600160a01b03163314610bc35760405162461bcd60e51b8152600401610967906121d0565b600d55565b6008546001600160a01b03163314610bf25760405162461bcd60e51b8152600401610967906121d0565b600955565b6060600380546107dd90612293565b6001600160a01b038216331415610c305760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ca78484846114cd565b6001600160a01b0383163b15158015610cc95750610cc784848484611828565b155b15610ce7576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b80333214610d0d5760405162461bcd60e51b815260040161096790612186565b600e5481610d1e6001546000540390565b610d289190612205565b1115610d6d5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610967565b600b54640100000000900463ffffffff1681610d8833611920565b610d929190612205565b1115610de05760405162461bcd60e51b815260206004820181905260248201527f596f752063616e206f6e6c79206d696e74203130207065722077616c6c6574216044820152606401610967565b601154610100900460ff1615610e385760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206d696e74696e67206973207061757365642e000000000000006044820152606401610967565b81600c54610e469190612231565b341015610e8b5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610967565b610a41338361194c565b6008546001600160a01b03163314610ebf5760405162461bcd60e51b8152600401610967906121d0565b600c55565b6060610ecf82611446565b610f335760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610967565b60115462010000900460ff16610f4b576107c8611966565b610f53611966565b610f5c83611975565b604051602001610f6d9291906120f7565b6040516020818303038152906040529050919050565b82333214610fa35760405162461bcd60e51b815260040161096790612186565b600e5481610fb46001546000540390565b610fbe9190612205565b11156110035760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610967565b600b54640100000000900463ffffffff168161101e33611920565b6110289190612205565b11156110765760405162461bcd60e51b815260206004820181905260248201527f596f752063616e206f6e6c79206d696e74203130207065722077616c6c6574216044820152606401610967565b60115460ff16156110c95760405162461bcd60e51b815260206004820152601860248201527f50726573616c6520686173206265656e207061757365642e00000000000000006044820152606401610967565b600b5463ffffffff16846110dc33611920565b6110e69190612205565b11156111435760405162461bcd60e51b815260206004820152602660248201527f457863656564732077686974656c697374206d6178206d696e74207065722077604482015265616c6c65742160d01b6064820152608401610967565b83600d546111519190612231565b3410156111965760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610967565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050611210848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506009549150849050611a73565b6112545760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b21026b2b935b63290283937b7b31760591b6044820152606401610967565b61125e338661194c565b5050505050565b6008546001600160a01b0316331461128f5760405162461bcd60e51b8152600401610967906121d0565b6011805460ff1916911515919091179055565b6008546001600160a01b031633146112cc5760405162461bcd60e51b8152600401610967906121d0565b600b54601054600160401b90910463ffffffff16906112eb9084612205565b11156113395760405162461bcd60e51b815260206004820152601760248201527f4d6178207265736572766573206578686175737465642e0000000000000000006044820152606401610967565b816010600082825461134b9190612205565b90915550610a419050818361194c565b6008546001600160a01b031633146113855760405162461bcd60e51b8152600401610967906121d0565b6001600160a01b0381166113ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610967565b6109e6816117d6565b6008546001600160a01b0316331461141d5760405162461bcd60e51b8152600401610967906121d0565b601180549115156101000261ff0019909216919091179055565b6001600160a01b03163b151590565b60008054821080156107c8575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006114d8826116ba565b9050836001600160a01b031681600001516001600160a01b03161461150f5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061152d575061152d85336106ee565b8061154857503361153d84610860565b6001600160a01b0316145b90508061156857604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661158f57604051633a954ecd60e21b815260040160405180910390fd5b61159b60008487611471565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611671576000548214611671578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461125e565b6040805160608101825260008082526020820181905291810191909152816000548110156117bd57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906117bb5780516001600160a01b031615611751579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff16151592810192909252156117b6579392505050565b611751565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061185d903390899088908890600401612136565b602060405180830381600087803b15801561187757600080fd5b505af19250505080156118a7575060408051601f3d908101601f191682019092526118a491810190611fc3565b60015b611902573d8080156118d5576040519150601f19603f3d011682016040523d82523d6000602084013e6118da565b606091505b5080516118fa576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6001600160a01b0316600090815260056020526040902054600160401b900467ffffffffffffffff1690565b610a41828260405180602001604052806000815250611a89565b6060600a80546107dd90612293565b6060816119995750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119c357806119ad816122ce565b91506119bc9050600a8361221d565b915061199d565b60008167ffffffffffffffff8111156119de576119de61233f565b6040519080825280601f01601f191660200182016040528015611a08576020820181803683370190505b5090505b841561191857611a1d600183612250565b9150611a2a600a866122e9565b611a35906030612205565b60f81b818381518110611a4a57611a4a612329565b60200101906001600160f81b031916908160001a905350611a6c600a8661221d565b9450611a0c565b600082611a808584611a96565b14949350505050565b61092d8383836001611b0a565b600081815b8451811015611b02576000858281518110611ab857611ab8612329565b60200260200101519050808311611ade5760008381526020829052604090209250611aef565b600081815260208490526040902092505b5080611afa816122ce565b915050611a9b565b509392505050565b6000546001600160a01b038516611b3357604051622e076360e81b815260040160405180910390fd5b83611b515760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b429092169190910217905580808501838015611bfe57506001600160a01b0387163b15155b15611c87575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611c4f6000888480600101955088611828565b611c6c576040516368d2bf6b60e11b815260040160405180910390fd5b80821415611c04578260005414611c8257600080fd5b611ccd565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415611c88575b5060005561125e565b828054611ce290612293565b90600052602060002090601f016020900481019282611d045760008555611d4a565b82601f10611d1d57805160ff1916838001178555611d4a565b82800160010185558215611d4a579182015b82811115611d4a578251825591602001919060010190611d2f565b50611d56929150611d5a565b5090565b5b80821115611d565760008155600101611d5b565b600067ffffffffffffffff80841115611d8a57611d8a61233f565b604051601f8501601f19908116603f01168101908282118183101715611db257611db261233f565b81604052809350858152868686011115611dcb57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611dfc57600080fd5b919050565b80358015158114611dfc57600080fd5b600060208284031215611e2357600080fd5b611e2c82611de5565b9392505050565b60008060408385031215611e4657600080fd5b611e4f83611de5565b9150611e5d60208401611de5565b90509250929050565b600080600060608486031215611e7b57600080fd5b611e8484611de5565b9250611e9260208501611de5565b9150604084013590509250925092565b60008060008060808587031215611eb857600080fd5b611ec185611de5565b9350611ecf60208601611de5565b925060408501359150606085013567ffffffffffffffff811115611ef257600080fd5b8501601f81018713611f0357600080fd5b611f1287823560208401611d6f565b91505092959194509250565b60008060408385031215611f3157600080fd5b611f3a83611de5565b9150611e5d60208401611e01565b60008060408385031215611f5b57600080fd5b611f6483611de5565b946020939093013593505050565b600060208284031215611f8457600080fd5b611e2c82611e01565b600060208284031215611f9f57600080fd5b5035919050565b600060208284031215611fb857600080fd5b8135611e2c81612355565b600060208284031215611fd557600080fd5b8151611e2c81612355565b600060208284031215611ff257600080fd5b813567ffffffffffffffff81111561200957600080fd5b8201601f8101841361201a57600080fd5b61191884823560208401611d6f565b6000806040838503121561203c57600080fd5b82359150611e5d60208401611de5565b60008060006040848603121561206157600080fd5b83359250602084013567ffffffffffffffff8082111561208057600080fd5b818601915086601f83011261209457600080fd5b8135818111156120a357600080fd5b8760208260051b85010111156120b857600080fd5b6020830194508093505050509250925092565b600081518084526120e3816020860160208601612267565b601f01601f19169290920160200192915050565b60008351612109818460208801612267565b83519083019061211d818360208801612267565b64173539b7b760d91b9101908152600501949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612169908301846120cb565b9695505050505050565b602081526000611e2c60208301846120cb565b6020808252602a908201527f4e6f70652e2043616e2774206d696e74207468726f75676820616e6f746865726040820152691031b7b73a3930b1ba1760b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115612218576122186122fd565b500190565b60008261222c5761222c612313565b500490565b600081600019048311821515161561224b5761224b6122fd565b500290565b600082821015612262576122626122fd565b500390565b60005b8381101561228257818101518382015260200161226a565b83811115610ce75750506000910152565b600181811c908216806122a757607f821691505b602082108114156122c857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156122e2576122e26122fd565b5060010190565b6000826122f8576122f8612313565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146109e657600080fdfea2646970667358221220a454d955be574728f9e1d7dfd75c776ce770e46164d035f4c78b6045774d374f64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000054c415a455200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034c5a5200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045697066733a2f2f516d515a3634653648374b6b5643436f45444b3350654c54386e624575797a477369706978427655414b4a3170442f756e72657665616c65642e6a736f6e000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): LAZER
Arg [1] : _symbol (string): LZR
Arg [2] : _initBaseURI (string): ipfs://QmQZ64e6H7KkVCCoEDK3PeLT8nbEuyzGsipixBvUAKJ1pD/unrevealed.json

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 4c415a4552000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4c5a520000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [8] : 697066733a2f2f516d515a3634653648374b6b5643436f45444b3350654c5438
Arg [9] : 6e624575797a477369706978427655414b4a3170442f756e72657665616c6564
Arg [10] : 2e6a736f6e000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

47308:3677:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26831:305;;;;;;;;;;-1:-1:-1;26831:305:0;;;;;:::i;:::-;;:::i;:::-;;;7436:14:1;;7429:22;7411:41;;7399:2;7384:18;26831:305:0;;;;;;;;47811:28;;;;;;;;;;-1:-1:-1;47811:28:0;;;;;;;;;;;29944:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31447:204::-;;;;;;;;;;-1:-1:-1;31447:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6734:32:1;;;6716:51;;6704:2;6689:18;31447:204:0;6570:203:1;31010:371:0;;;;;;;;;;-1:-1:-1;31010:371:0;;;;;:::i;:::-;;:::i;:::-;;47620:43;;;;;;;;;;;;;;;;;;;7609:25:1;;;7597:2;7582:18;47620:43:0;7463:177:1;26080:303:0;;;;;;;;;;-1:-1:-1;26334:12:0;;26124:7;26318:13;:28;26080:303;;32312:170;;;;;;;;;;-1:-1:-1;32312:170:0;;;;;:::i;:::-;;:::i;47440:50::-;;;;;;;;;;-1:-1:-1;47440:50:0;;;;;;;;;;;12694:10:1;12682:23;;;12664:42;;12652:2;12637:18;47440:50:0;12520:192:1;47380:25:0;;;;;;;;;;;;;;;;49655:68;;;;;;;;;;;;;:::i;50309:98::-;;;;;;;;;;;;;:::i;32553:185::-;;;;;;;;;;-1:-1:-1;32553:185:0;;;;;:::i;:::-;;:::i;47844:20::-;;;;;;;;;;-1:-1:-1;47844:20:0;;;;;;;;;;;50521:100;;;;;;;;;;-1:-1:-1;50521:100:0;;;;;:::i;:::-;;:::i;29752:125::-;;;;;;;;;;-1:-1:-1;29752:125:0;;;;;:::i;:::-;;:::i;47412:21::-;;;;;;;;;;;;;:::i;50214:89::-;;;;;;;;;;-1:-1:-1;50214:89:0;;;;;:::i;:::-;;:::i;27200:206::-;;;;;;;;;;-1:-1:-1;27200:206:0;;;;;:::i;:::-;;:::i;46289:103::-;;;;;;;;;;;;;:::i;50111:97::-;;;;;;;;;;-1:-1:-1;50111:97:0;;;;;:::i;:::-;;:::i;49917:98::-;;;;;;;;;;-1:-1:-1;49917:98:0;;;;;:::i;:::-;;:::i;47582:33::-;;;;;;;;;;;;;;;;45638:87;;;;;;;;;;-1:-1:-1;45711:6:0;;-1:-1:-1;;;;;45711:6:0;45638:87;;47668:33;;;;;;;;;;;;;;;;30113:104;;;;;;;;;;;;;:::i;47747:27::-;;;;;;;;;;;;;;;;31723:287;;;;;;;;;;-1:-1:-1;31723:287:0;;;;;:::i;:::-;;:::i;47706:36::-;;;;;;;;;;;;;;;;47781:25;;;;;;;;;;-1:-1:-1;47781:25:0;;;;;;;;32809:369;;;;;;;;;;-1:-1:-1;32809:369:0;;;;;:::i;:::-;;:::i;49064:287::-;;;;;;:::i;:::-;;:::i;47539:36::-;;;;;;;;;;-1:-1:-1;47539:36:0;;;;-1:-1:-1;;;47539:36:0;;;;;;50021:84;;;;;;;;;;-1:-1:-1;50021:84:0;;;;;:::i;:::-;;:::i;50627:353::-;;;;;;;;;;-1:-1:-1;50627:353:0;;;;;:::i;:::-;;:::i;48436:620::-;;;;;;:::i;:::-;;:::i;47495:39::-;;;;;;;;;;-1:-1:-1;47495:39:0;;;;;;;;;;;49824:87;;;;;;;;;;-1:-1:-1;49824:87:0;;;;;:::i;:::-;;:::i;32081:164::-;;;;;;;;;;-1:-1:-1;32081:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32202:25:0;;;32178:4;32202:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32081:164;49359:290;;;;;;;;;;-1:-1:-1;49359:290:0;;;;;:::i;:::-;;:::i;46547:201::-;;;;;;;;;;-1:-1:-1;46547:201:0;;;;;:::i;:::-;;:::i;49729:89::-;;;;;;;;;;-1:-1:-1;49729:89:0;;;;;:::i;:::-;;:::i;26831:305::-;26933:4;-1:-1:-1;;;;;;26970:40:0;;-1:-1:-1;;;26970:40:0;;:105;;-1:-1:-1;;;;;;;27027:48:0;;-1:-1:-1;;;27027:48:0;26970:105;:158;;;-1:-1:-1;;;;;;;;;;13549:40:0;;;27092:36;26950:178;26831:305;-1:-1:-1;;26831:305:0:o;29944:100::-;29998:13;30031:5;30024:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29944:100;:::o;31447:204::-;31515:7;31540:16;31548:7;31540;:16::i;:::-;31535:64;;31565:34;;-1:-1:-1;;;31565:34:0;;;;;;;;;;;31535:64;-1:-1:-1;31619:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31619:24:0;;31447:204::o;31010:371::-;31083:13;31099:24;31115:7;31099:15;:24::i;:::-;31083:40;;31144:5;-1:-1:-1;;;;;31138:11:0;:2;-1:-1:-1;;;;;31138:11:0;;31134:48;;;31158:24;;-1:-1:-1;;;31158:24:0;;;;;;;;;;;31134:48;22427:10;-1:-1:-1;;;;;31199:21:0;;;;;;:63;;-1:-1:-1;31225:37:0;31242:5;22427:10;32081:164;:::i;31225:37::-;31224:38;31199:63;31195:138;;;31286:35;;-1:-1:-1;;;31286:35:0;;;;;;;;;;;31195:138;31345:28;31354:2;31358:7;31367:5;31345:8;:28::i;:::-;31072:309;31010:371;;:::o;32312:170::-;32446:28;32456:4;32462:2;32466:7;32446:9;:28::i;49655:68::-;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;;;;;;;;;49702:8:::1;:15:::0;;-1:-1:-1;;49702:15:0::1;::::0;::::1;::::0;;49655:68::o;50309:98::-;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;45711:6;;50353:48:::1;::::0;-1:-1:-1;;;;;45711:6:0;;;;50379:21:::1;50353:48:::0;::::1;;;::::0;::::1;::::0;;;50379:21;45711:6;50353:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;50309:98::o:0;32553:185::-;32691:39;32708:4;32714:2;32718:7;32691:39;;;;;;;;;;;;:16;:39::i;50521:100::-;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;50594:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;50521:100:::0;:::o;29752:125::-;29816:7;29843:21;29856:7;29843:12;:21::i;:::-;:26;;29752:125;-1:-1:-1;;29752:125:0:o;47412:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50214:89::-;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;50277:10:::1;:20:::0;50214:89::o;27200:206::-;27264:7;-1:-1:-1;;;;;27288:19:0;;27284:60;;27316:28;;-1:-1:-1;;;27316:28:0;;;;;;;;;;;27284:60;-1:-1:-1;;;;;;27370:19:0;;;;;:12;:19;;;;;:27;;;;27200:206::o;46289:103::-;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;46354:30:::1;46381:1;46354:18;:30::i;:::-;46289:103::o:0;50111:97::-;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;50178:15:::1;:24:::0;50111:97::o;49917:98::-;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;49985:10:::1;:24:::0;49917:98::o;30113:104::-;30169:13;30202:7;30195:14;;;;;:::i;31723:287::-;-1:-1:-1;;;;;31822:24:0;;22427:10;31822:24;31818:54;;;31855:17;;-1:-1:-1;;;31855:17:0;;;;;;;;;;;31818:54;22427:10;31885:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;31885:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;31885:53:0;;;;;;;;;;31954:48;;7411:41:1;;;31885:42:0;;22427:10;31954:48;;7384:18:1;31954:48:0;;;;;;;31723:287;;:::o;32809:369::-;32976:28;32986:4;32992:2;32996:7;32976:9;:28::i;:::-;-1:-1:-1;;;;;33019:13:0;;3652:19;:23;;33019:76;;;;;33039:56;33070:4;33076:2;33080:7;33089:5;33039:30;:56::i;:::-;33038:57;33019:76;33015:156;;;33119:40;;-1:-1:-1;;;33119:40:0;;;;;;;;;;;33015:156;32809:369;;;;:::o;49064:287::-;49151:11;48147:10;48161:9;48147:23;48139:78;;;;-1:-1:-1;;;48139:78:0;;;;;;;:::i;:::-;48265:10;;48249:11;48233:13;26334:12;;26124:7;26318:13;:28;;26080:303;48233:13;:27;;;;:::i;:::-;48232:43;;48224:76;;;;-1:-1:-1;;;48224:76:0;;11489:2:1;48224:76:0;;;11471:21:1;11528:2;11508:18;;;11501:30;-1:-1:-1;;;11547:18:1;;;11540:50;11607:18;;48224:76:0;11287:344:1;48224:76:0;48360:19;;;;;;;48344:11;48316:25;48330:10;48316:13;:25::i;:::-;:39;;;;:::i;:::-;48315:64;;48307:109;;;;-1:-1:-1;;;48307:109:0;;8478:2:1;48307:109:0;;;8460:21:1;;;8497:18;;;8490:30;8556:34;8536:18;;;8529:62;8608:18;;48307:109:0;8276:356:1;48307:109:0;49183:16:::1;::::0;::::1;::::0;::::1;;;49182:17;49174:55;;;::::0;-1:-1:-1;;;49174:55:0;;11838:2:1;49174:55:0::1;::::0;::::1;11820:21:1::0;11877:2;11857:18;;;11850:30;11916:27;11896:18;;;11889:55;11961:18;;49174:55:0::1;11636:349:1::0;49174:55:0::1;49266:11;49258:5;;:19;;;;:::i;:::-;49244:9;:34;;49236:66;;;::::0;-1:-1:-1;;;49236:66:0;;12192:2:1;49236:66:0::1;::::0;::::1;12174:21:1::0;12231:2;12211:18;;;12204:30;-1:-1:-1;;;12250:18:1;;;12243:49;12309:18;;49236:66:0::1;11990:343:1::0;49236:66:0::1;49311:34;49321:10;49333:11;49311:9;:34::i;50021:84::-:0;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;50085:5:::1;:14:::0;50021:84::o;50627:353::-;50726:13;50769:17;50777:8;50769:7;:17::i;:::-;50751:102;;;;-1:-1:-1;;;50751:102:0;;11073:2:1;50751:102:0;;;11055:21:1;11112:2;11092:18;;;11085:30;11151:34;11131:18;;;11124:62;-1:-1:-1;;;11202:18:1;;;11195:45;11257:19;;50751:102:0;10871:411:1;50751:102:0;50867:8;;;;;;;50862:32;;50884:10;:8;:10::i;50862:32::-;50932:10;:8;:10::i;:::-;50944:19;:8;:17;:19::i;:::-;50915:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50901:73;;50627:353;;;:::o;48436:620::-;48557:11;48147:10;48161:9;48147:23;48139:78;;;;-1:-1:-1;;;48139:78:0;;;;;;;:::i;:::-;48265:10;;48249:11;48233:13;26334:12;;26124:7;26318:13;:28;;26080:303;48233:13;:27;;;;:::i;:::-;48232:43;;48224:76;;;;-1:-1:-1;;;48224:76:0;;11489:2:1;48224:76:0;;;11471:21:1;11528:2;11508:18;;;11501:30;-1:-1:-1;;;11547:18:1;;;11540:50;11607:18;;48224:76:0;11287:344:1;48224:76:0;48360:19;;;;;;;48344:11;48316:25;48330:10;48316:13;:25::i;:::-;:39;;;;:::i;:::-;48315:64;;48307:109;;;;-1:-1:-1;;;48307:109:0;;8478:2:1;48307:109:0;;;8460:21:1;;;8497:18;;;8490:30;8556:34;8536:18;;;8529:62;8608:18;;48307:109:0;8276:356:1;48307:109:0;48596:13:::1;::::0;::::1;;48595:14;48587:51;;;::::0;-1:-1:-1;;;48587:51:0;;8839:2:1;48587:51:0::1;::::0;::::1;8821:21:1::0;8878:2;8858:18;;;8851:30;8917:26;8897:18;;;8890:54;8961:18;;48587:51:0::1;8637:348:1::0;48587:51:0::1;48698:30;::::0;::::1;;48682:11:::0;48654:25:::1;48668:10;48654:13;:25::i;:::-;:39;;;;:::i;:::-;48653:75;;48645:126;;;::::0;-1:-1:-1;;;48645:126:0;;9894:2:1;48645:126:0::1;::::0;::::1;9876:21:1::0;9933:2;9913:18;;;9906:30;9972:34;9952:18;;;9945:62;-1:-1:-1;;;10023:18:1;;;10016:36;10069:19;;48645:126:0::1;9692:402:1::0;48645:126:0::1;48819:11;48801:15;;:29;;;;:::i;:::-;48787:9;:44;;48779:76;;;::::0;-1:-1:-1;;;48779:76:0;;12192:2:1;48779:76:0::1;::::0;::::1;12174:21:1::0;12231:2;12211:18;;;12204:30;-1:-1:-1;;;12250:18:1;;;12243:49;12309:18;;48779:76:0::1;11990:343:1::0;48779:76:0::1;48887:28;::::0;-1:-1:-1;;48904:10:0::1;5843:2:1::0;5839:15;5835:53;48887:28:0::1;::::0;::::1;5823:66:1::0;48862:12:0::1;::::0;5905::1;;48887:28:0::1;;;;;;;;;;;;48877:39;;;;;;48862:54;;48931:50;48950:12;;48931:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;48964:10:0::1;::::0;;-1:-1:-1;48976:4:0;;-1:-1:-1;48931:18:0::1;:50::i;:::-;48923:84;;;::::0;-1:-1:-1;;;48923:84:0;;9192:2:1;48923:84:0::1;::::0;::::1;9174:21:1::0;9231:2;9211:18;;;9204:30;-1:-1:-1;;;9250:18:1;;;9243:51;9311:18;;48923:84:0::1;8990:345:1::0;48923:84:0::1;49016:34;49026:10;49038:11;49016:9;:34::i;:::-;48574:482;48436:620:::0;;;;:::o;49824:87::-;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;49883:13:::1;:22:::0;;-1:-1:-1;;49883:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49824:87::o;49359:290::-;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;49524:17:::1;::::0;49507:12:::1;::::0;-1:-1:-1;;;49524:17:0;;::::1;;;::::0;49493:26:::1;::::0;:11;:26:::1;:::i;:::-;49492:49;;49484:85;;;::::0;-1:-1:-1;;;49484:85:0;;9542:2:1;49484:85:0::1;::::0;::::1;9524:21:1::0;9581:2;9561:18;;;9554:30;9620:25;9600:18;;;9593:53;9663:18;;49484:85:0::1;9340:347:1::0;49484:85:0::1;49592:11;49576:12;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;49610:33:0::1;::::0;-1:-1:-1;49620:9:0;49631:11;49610:9:::1;:33::i;46547:201::-:0;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46636:22:0;::::1;46628:73;;;::::0;-1:-1:-1;;;46628:73:0;;8071:2:1;46628:73:0::1;::::0;::::1;8053:21:1::0;8110:2;8090:18;;;8083:30;8149:34;8129:18;;;8122:62;-1:-1:-1;;;8200:18:1;;;8193:36;8246:19;;46628:73:0::1;7869:402:1::0;46628:73:0::1;46712:28;46731:8;46712:18;:28::i;49729:89::-:0;45711:6;;-1:-1:-1;;;;;45711:6:0;22427:10;45858:23;45850:68;;;;-1:-1:-1;;;45850:68:0;;;;;;;:::i;:::-;49787:16:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;49787:25:0;;::::1;::::0;;;::::1;::::0;;49729:89::o;3357:326::-;-1:-1:-1;;;;;3652:19:0;;:23;;;3357:326::o;33433:174::-;33490:4;33554:13;;33544:7;:23;33514:85;;;;-1:-1:-1;;33572:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;33572:27:0;;;;33571:28;;33433:174::o;41590:196::-;41705:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;41705:29:0;-1:-1:-1;;;;;41705:29:0;;;;;;;;;41750:28;;41705:24;;41750:28;;;;;;;41590:196;;;:::o;36533:2130::-;36648:35;36686:21;36699:7;36686:12;:21::i;:::-;36648:59;;36746:4;-1:-1:-1;;;;;36724:26:0;:13;:18;;;-1:-1:-1;;;;;36724:26:0;;36720:67;;36759:28;;-1:-1:-1;;;36759:28:0;;;;;;;;;;;36720:67;36800:22;22427:10;-1:-1:-1;;;;;36826:20:0;;;;:73;;-1:-1:-1;36863:36:0;36880:4;22427:10;32081:164;:::i;36863:36::-;36826:126;;;-1:-1:-1;22427:10:0;36916:20;36928:7;36916:11;:20::i;:::-;-1:-1:-1;;;;;36916:36:0;;36826:126;36800:153;;36971:17;36966:66;;36997:35;;-1:-1:-1;;;36997:35:0;;;;;;;;;;;36966:66;-1:-1:-1;;;;;37047:16:0;;37043:52;;37072:23;;-1:-1:-1;;;37072:23:0;;;;;;;;;;;37043:52;37216:35;37233:1;37237:7;37246:4;37216:8;:35::i;:::-;-1:-1:-1;;;;;37547:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;37547:31:0;;;;;;;-1:-1:-1;;37547:31:0;;;;;;;37593:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;37593:29:0;;;;;;;;;;;37673:20;;;:11;:20;;;;;;37708:18;;-1:-1:-1;;;;;;37741:49:0;;;;-1:-1:-1;;;37774:15:0;37741:49;;;;;;;;;;38064:11;;38124:24;;;;;38167:13;;37673:20;;38124:24;;38167:13;38163:384;;38377:13;;38362:11;:28;38358:174;;38415:20;;38484:28;;;;38458:54;;-1:-1:-1;;;38458:54:0;-1:-1:-1;;;;;;38458:54:0;;;-1:-1:-1;;;;;38415:20:0;;38458:54;;;;38358:174;37522:1036;;;38594:7;38590:2;-1:-1:-1;;;;;38575:27:0;38584:4;-1:-1:-1;;;;;38575:27:0;;;;;;;;;;;38613:42;32809:369;28581:1109;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;28692:7:0;28775:13;;28768:4;:20;28737:886;;;28809:31;28843:17;;;:11;:17;;;;;;;;;28809:51;;;;;;;;;-1:-1:-1;;;;;28809:51:0;;;;-1:-1:-1;;;28809:51:0;;;;;;;;;;;-1:-1:-1;;;28809:51:0;;;;;;;;;;;;;;28879:729;;28929:14;;-1:-1:-1;;;;;28929:28:0;;28925:101;;28993:9;28581:1109;-1:-1:-1;;;28581:1109:0:o;28925:101::-;-1:-1:-1;;;29368:6:0;29413:17;;;;:11;:17;;;;;;;;;29401:29;;;;;;;;;-1:-1:-1;;;;;29401:29:0;;;;;-1:-1:-1;;;29401:29:0;;;;;;;;;;;-1:-1:-1;;;29401:29:0;;;;;;;;;;;;;29461:28;29457:109;;29529:9;28581:1109;-1:-1:-1;;;28581:1109:0:o;29457:109::-;29328:261;;;28790:833;28737:886;29651:31;;-1:-1:-1;;;29651:31:0;;;;;;;;;;;46908:191;47001:6;;;-1:-1:-1;;;;;47018:17:0;;;-1:-1:-1;;;;;;47018:17:0;;;;;;;47051:40;;47001:6;;;47018:17;47001:6;;47051:40;;46982:16;;47051:40;46971:128;46908:191;:::o;42278:667::-;42462:72;;-1:-1:-1;;;42462:72:0;;42441:4;;-1:-1:-1;;;;;42462:36:0;;;;;:72;;22427:10;;42513:4;;42519:7;;42528:5;;42462:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42462:72:0;;;;;;;;-1:-1:-1;;42462:72:0;;;;;;;;;;;;:::i;:::-;;;42458:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42696:13:0;;42692:235;;42742:40;;-1:-1:-1;;;42742:40:0;;;;;;;;;;;42692:235;42885:6;42879:13;42870:6;42866:2;42862:15;42855:38;42458:480;-1:-1:-1;;;;;;42581:55:0;-1:-1:-1;;;42581:55:0;;-1:-1:-1;42458:480:0;42278:667;;;;;;:::o;27488:137::-;-1:-1:-1;;;;;27584:19:0;27549:7;27584:19;;;:12;:19;;;;;:32;-1:-1:-1;;;27584:32:0;;;;;27488:137::o;33615:104::-;33684:27;33694:2;33698:8;33684:27;;;;;;;;;;;;:9;:27::i;50413:102::-;50473:13;50502:7;50495:14;;;;;:::i;365:723::-;421:13;642:10;638:53;;-1:-1:-1;;669:10:0;;;;;;;;;;;;-1:-1:-1;;;669:10:0;;;;;365:723::o;638:53::-;716:5;701:12;757:78;764:9;;757:78;;790:8;;;;:::i;:::-;;-1:-1:-1;813:10:0;;-1:-1:-1;821:2:0;813:10;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;867:17:0;;845:39;;895:154;902:10;;895:154;;929:11;939:1;929:11;;:::i;:::-;;-1:-1:-1;998:10:0;1006:2;998:5;:10;:::i;:::-;985:24;;:2;:24;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;955:56:0;;;;;;;;-1:-1:-1;1026:11:0;1035:2;1026:11;;:::i;:::-;;;895:154;;20202:190;20327:4;20380;20351:25;20364:5;20371:4;20351:12;:25::i;:::-;:33;;20202:190;-1:-1:-1;;;;20202:190:0:o;34082:163::-;34205:32;34211:2;34215:8;34225:5;34232:4;34205:5;:32::i;20754:675::-;20837:7;20880:4;20837:7;20895:497;20919:5;:12;20915:1;:16;20895:497;;;20953:20;20976:5;20982:1;20976:8;;;;;;;;:::i;:::-;;;;;;;20953:31;;21019:12;21003;:28;20999:382;;21505:13;21555:15;;;21591:4;21584:15;;;21638:4;21622:21;;21131:57;;20999:382;;;21505:13;21555:15;;;21591:4;21584:15;;;21638:4;21622:21;;21308:57;;20999:382;-1:-1:-1;20933:3:0;;;;:::i;:::-;;;;20895:497;;;-1:-1:-1;21409:12:0;20754:675;-1:-1:-1;;;20754:675:0:o;34504:1775::-;34643:20;34666:13;-1:-1:-1;;;;;34694:16:0;;34690:48;;34719:19;;-1:-1:-1;;;34719:19:0;;;;;;;;;;;34690:48;34753:13;34749:44;;34775:18;;-1:-1:-1;;;34775:18:0;;;;;;;;;;;34749:44;-1:-1:-1;;;;;35144:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;35203:49:0;;35144:44;;;;;;;;35203:49;;;-1:-1:-1;;;;;35144:44:0;;;;;;35203:49;;;;;;;;;;;;;;;;35269:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;35319:66:0;;;;-1:-1:-1;;;35369:15:0;35319:66;;;;;;;;;;35269:25;35466:23;;;35510:4;:23;;;;-1:-1:-1;;;;;;35518:13:0;;3652:19;:23;;35518:15;35506:641;;;35554:314;35585:38;;35610:12;;-1:-1:-1;;;;;35585:38:0;;;35602:1;;35585:38;;35602:1;;35585:38;35651:69;35690:1;35694:2;35698:14;;;;;;35714:5;35651:30;:69::i;:::-;35646:174;;35756:40;;-1:-1:-1;;;35756:40:0;;;;;;;;;;;35646:174;35863:3;35847:12;:19;;35554:314;;35949:12;35932:13;;:29;35928:43;;35963:8;;;35928:43;35506:641;;;36012:120;36043:40;;36068:14;;;;;-1:-1:-1;;;;;36043:40:0;;;36060:1;;36043:40;;36060:1;;36043:40;36127:3;36111:12;:19;;36012:120;;35506:641;-1:-1:-1;36161:13:0;:28;36211:60;32809:369;-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:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:60;;978:1;975;968:12;993:186;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;:::-;1134:39;993:186;-1:-1:-1;;;993:186:1:o;1184:260::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;;1400:38;1434:2;1423:9;1419:18;1400:38;:::i;:::-;1390:48;;1184:260;;;;;:::o;1449:328::-;1526:6;1534;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:52;;;1611:1;1608;1601:12;1563:52;1634:29;1653:9;1634:29;:::i;:::-;1624:39;;1682:38;1716:2;1705:9;1701:18;1682:38;:::i;:::-;1672:48;;1767:2;1756:9;1752:18;1739:32;1729:42;;1449:328;;;;;:::o;1782:666::-;1877:6;1885;1893;1901;1954:3;1942:9;1933:7;1929:23;1925:33;1922:53;;;1971:1;1968;1961:12;1922:53;1994:29;2013:9;1994:29;:::i;:::-;1984:39;;2042:38;2076:2;2065:9;2061:18;2042:38;:::i;:::-;2032:48;;2127:2;2116:9;2112:18;2099:32;2089:42;;2182:2;2171:9;2167:18;2154:32;2209:18;2201:6;2198:30;2195:50;;;2241:1;2238;2231:12;2195:50;2264:22;;2317:4;2309:13;;2305:27;-1:-1:-1;2295:55:1;;2346:1;2343;2336:12;2295:55;2369:73;2434:7;2429:2;2416:16;2411:2;2407;2403:11;2369:73;:::i;:::-;2359:83;;;1782:666;;;;;;;:::o;2453:254::-;2518:6;2526;2579:2;2567:9;2558:7;2554:23;2550:32;2547:52;;;2595:1;2592;2585:12;2547:52;2618:29;2637:9;2618:29;:::i;:::-;2608:39;;2666:35;2697:2;2686:9;2682:18;2666:35;:::i;2712:254::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2880:29;2899:9;2880:29;:::i;:::-;2870:39;2956:2;2941:18;;;;2928:32;;-1:-1:-1;;;2712:254:1:o;2971:180::-;3027:6;3080:2;3068:9;3059:7;3055:23;3051:32;3048:52;;;3096:1;3093;3086:12;3048:52;3119:26;3135:9;3119:26;:::i;3156:180::-;3215:6;3268:2;3256:9;3247:7;3243:23;3239:32;3236:52;;;3284:1;3281;3274:12;3236:52;-1:-1:-1;3307:23:1;;3156:180;-1:-1:-1;3156:180:1:o;3341:245::-;3399:6;3452:2;3440:9;3431:7;3427:23;3423:32;3420:52;;;3468:1;3465;3458:12;3420:52;3507:9;3494:23;3526:30;3550:5;3526:30;:::i;3591:249::-;3660:6;3713:2;3701:9;3692:7;3688:23;3684:32;3681:52;;;3729:1;3726;3719:12;3681:52;3761:9;3755:16;3780:30;3804:5;3780:30;:::i;3845:450::-;3914:6;3967:2;3955:9;3946:7;3942:23;3938:32;3935:52;;;3983:1;3980;3973:12;3935:52;4023:9;4010:23;4056:18;4048:6;4045:30;4042:50;;;4088:1;4085;4078:12;4042:50;4111:22;;4164:4;4156:13;;4152:27;-1:-1:-1;4142:55:1;;4193:1;4190;4183:12;4142:55;4216:73;4281:7;4276:2;4263:16;4258:2;4254;4250:11;4216:73;:::i;4485:254::-;4553:6;4561;4614:2;4602:9;4593:7;4589:23;4585:32;4582:52;;;4630:1;4627;4620:12;4582:52;4666:9;4653:23;4643:33;;4695:38;4729:2;4718:9;4714:18;4695:38;:::i;4744:683::-;4839:6;4847;4855;4908:2;4896:9;4887:7;4883:23;4879:32;4876:52;;;4924:1;4921;4914:12;4876:52;4960:9;4947:23;4937:33;;5021:2;5010:9;5006:18;4993:32;5044:18;5085:2;5077:6;5074:14;5071:34;;;5101:1;5098;5091:12;5071:34;5139:6;5128:9;5124:22;5114:32;;5184:7;5177:4;5173:2;5169:13;5165:27;5155:55;;5206:1;5203;5196:12;5155:55;5246:2;5233:16;5272:2;5264:6;5261:14;5258:34;;;5288:1;5285;5278:12;5258:34;5341:7;5336:2;5326:6;5323:1;5319:14;5315:2;5311:23;5307:32;5304:45;5301:65;;;5362:1;5359;5352:12;5301:65;5393:2;5389;5385:11;5375:21;;5415:6;5405:16;;;;;4744:683;;;;;:::o;5432:257::-;5473:3;5511:5;5505:12;5538:6;5533:3;5526:19;5554:63;5610:6;5603:4;5598:3;5594:14;5587:4;5580:5;5576:16;5554:63;:::i;:::-;5671:2;5650:15;-1:-1:-1;;5646:29:1;5637:39;;;;5678:4;5633:50;;5432:257;-1:-1:-1;;5432:257:1:o;5928:637::-;6208:3;6246:6;6240:13;6262:53;6308:6;6303:3;6296:4;6288:6;6284:17;6262:53;:::i;:::-;6378:13;;6337:16;;;;6400:57;6378:13;6337:16;6434:4;6422:17;;6400:57;:::i;:::-;-1:-1:-1;;;6479:20:1;;6508:22;;;6557:1;6546:13;;5928:637;-1:-1:-1;;;;5928:637:1:o;6778:488::-;-1:-1:-1;;;;;7047:15:1;;;7029:34;;7099:15;;7094:2;7079:18;;7072:43;7146:2;7131:18;;7124:34;;;7194:3;7189:2;7174:18;;7167:31;;;6972:4;;7215:45;;7240:19;;7232:6;7215:45;:::i;:::-;7207:53;6778:488;-1:-1:-1;;;;;;6778:488:1:o;7645:219::-;7794:2;7783:9;7776:21;7757:4;7814:44;7854:2;7843:9;7839:18;7831:6;7814:44;:::i;10099:406::-;10301:2;10283:21;;;10340:2;10320:18;;;10313:30;10379:34;10374:2;10359:18;;10352:62;-1:-1:-1;;;10445:2:1;10430:18;;10423:40;10495:3;10480:19;;10099:406::o;10510:356::-;10712:2;10694:21;;;10731:18;;;10724:30;10790:34;10785:2;10770:18;;10763:62;10857:2;10842:18;;10510:356::o;12717:128::-;12757:3;12788:1;12784:6;12781:1;12778:13;12775:39;;;12794:18;;:::i;:::-;-1:-1:-1;12830:9:1;;12717:128::o;12850:120::-;12890:1;12916;12906:35;;12921:18;;:::i;:::-;-1:-1:-1;12955:9:1;;12850:120::o;12975:168::-;13015:7;13081:1;13077;13073:6;13069:14;13066:1;13063:21;13058:1;13051:9;13044:17;13040:45;13037:71;;;13088:18;;:::i;:::-;-1:-1:-1;13128:9:1;;12975:168::o;13148:125::-;13188:4;13216:1;13213;13210:8;13207:34;;;13221:18;;:::i;:::-;-1:-1:-1;13258:9:1;;13148:125::o;13278:258::-;13350:1;13360:113;13374:6;13371:1;13368:13;13360:113;;;13450:11;;;13444:18;13431:11;;;13424:39;13396:2;13389:10;13360:113;;;13491:6;13488:1;13485:13;13482:48;;;-1:-1:-1;;13526:1:1;13508:16;;13501:27;13278:258::o;13541:380::-;13620:1;13616:12;;;;13663;;;13684:61;;13738:4;13730:6;13726:17;13716:27;;13684:61;13791:2;13783:6;13780:14;13760:18;13757:38;13754:161;;;13837:10;13832:3;13828:20;13825:1;13818:31;13872:4;13869:1;13862:15;13900:4;13897:1;13890:15;13754:161;;13541:380;;;:::o;13926:135::-;13965:3;-1:-1:-1;;13986:17:1;;13983:43;;;14006:18;;:::i;:::-;-1:-1:-1;14053:1:1;14042:13;;13926:135::o;14066:112::-;14098:1;14124;14114:35;;14129:18;;:::i;:::-;-1:-1:-1;14163:9:1;;14066:112::o;14183:127::-;14244:10;14239:3;14235:20;14232:1;14225:31;14275:4;14272:1;14265:15;14299:4;14296:1;14289:15;14315:127;14376:10;14371:3;14367:20;14364:1;14357:31;14407:4;14404:1;14397:15;14431:4;14428:1;14421:15;14447:127;14508:10;14503:3;14499:20;14496:1;14489:31;14539:4;14536:1;14529:15;14563:4;14560:1;14553:15;14579:127;14640:10;14635:3;14631:20;14628:1;14621:31;14671:4;14668:1;14661:15;14695:4;14692:1;14685:15;14711:131;-1:-1:-1;;;;;;14785:32:1;;14775:43;;14765:71;;14832:1;14829;14822:12

Swarm Source

ipfs://a454d955be574728f9e1d7dfd75c776ce770e46164d035f4c78b6045774d374f
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.