ETH Price: $2,966.73 (-1.78%)
Gas: 2 Gwei

Token

Omega Alpha ()
 

Overview

Max Total Supply

333

Holders

222

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
theballer.eth
0xf76f291913d37ed9a41b454201b6bd9830f772d8
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Omega Alpha is an exclusive Discord Community. We keep things simple: Alpha, Whitelists, and Community.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
OmegaAlpha

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol


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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
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 Merkle 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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

// File: omega.sol

pragma solidity 0.8.7;

/// SPDX-License-Identifier: UNLICENSED








contract OmegaAlpha is ERC1155, ERC1155Supply, ReentrancyGuard, Ownable {
   
    using Strings for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdTracker;
    
    bytes32 public OGmerkleRoot = 0x7f3b3801871c7a7e75b656612a741bd43c3c37c447d6e0ac1c688776085cfd32;
    bytes32 public WLmerkleRoot = 0x200586ee0c6321574e27a59d35f0e1a25475dec8c7e18f2ebfbcaee55e31a823;

    string public baseURI;
    string public baseExtension = ".json";

    uint256 public OGWLPrice = 0.066 ether;
    uint256 public WLPrice = 0.077 ether;
    uint256 public PublicPrice = 0.088 ether;

    uint256 public maxSupply = 333;

    bool public WLOpen = true;
    bool public PublicOpen = false;

    mapping (address => bool) public whitelistClaimed;

    mapping (address => bool) public publicClaimed;

    address[] private teamWallets = 
    [0x0e93545Edad0Ba8884bCEe70618c3D8D4D73d5B4, 0x222536857ddfD70Ed5ded3E1A0C2cCF4fB1ED9d3, 0xE4214F3ceA99B31f6bE6219FDF646EB4646936AC, 
    0xC4b72816dB9913A69D5A0AF41b477b51c8f598d3, 0xb84d84019Af5EeBf81b378E98567068dCB9B622b, 0x453f2a8e2ee8107E056BC71CDBF29322a1B73a53, 
    0x6ed655ED54910C1f85391f8e755F92927A381439, 0x1e868E0F5948Fc94ed99DDe0d0AbA939E7677b47, 0xe7858696eB520464E6415fB06fDB5ed9D157F9d8, 
    0xb94872bc787343e194c069FFeB7621cBea41FF73, 0x96232D041648046c17f428B3D7b5B8363944188b, 0x3fC1fF9fDb1a893B53870C993DE55FEe97Bf4DdB, 
    0xf402a5C9d709ED5b384Ba29f82445667F924EABF, 0xC54e976001aDAd914552eC95f3c14Aba80f47615, 0xBe68a874d11277AC4A6398b82dEf700553d74C3F, 
    0x111bb952E44fb1D43BD1D8861e965E0b0EcF5Df4, 0x12c8594991f6488CA330945850bBA200a992a185, 0xf932755165312e18b62484B9A23B517Cc07a7ba2,
    0x5B90eea54ed61a690db4429eC503436fFB3ACe91, 0xC54e976001aDAd914552eC95f3c14Aba80f47615, 0xa65C1768400Fe2c8355aA58595bf09FBE1a69631,
    0x643DcBC92592A2B24d9CAC834713f112Ceb8Ba60];
    
    constructor(string memory _initBaseURI) ERC1155(_initBaseURI)
    {
        setBaseURI(_initBaseURI);

        for(uint256 i=0; i<10; i++)
        {
            _tokenIdTracker.increment();
            _mint(msg.sender, 1, 1, "");
        }
        
        for(uint256 i=0; i<teamWallets.length; i++)
        {
            _tokenIdTracker.increment();
            _mint(teamWallets[i], 1, 1, "");
        }
    }   

    modifier onlySender {
        require(msg.sender == tx.origin);
        _;
    }

    function closeWL() public onlyOwner
    {
        WLOpen = false;
        PublicOpen = true;
    }

    modifier WLPhase()
    {
        require(WLOpen == true);
        _;
    }

    modifier PublicPhase()
    {
        require(PublicOpen == true);
        _;
    }


    function setMerkleRootOG(bytes32 incomingBytes) public onlyOwner
    {
        OGmerkleRoot = incomingBytes;
    }

    function setMerkleRootWL(bytes32 incomingBytes) public onlyOwner
    {
        WLmerkleRoot = incomingBytes;
    }

    function whitelistOG(bytes32[] calldata _merkleProof) public payable nonReentrant onlySender WLPhase
    {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(_merkleProof, OGmerkleRoot, leaf), "Invalid proof.");
        require(whitelistClaimed[msg.sender] == false);
        require(totalSupply() < maxSupply);
        require(msg.value >= OGWLPrice);
        
        whitelistClaimed[msg.sender] = true;
        _tokenIdTracker.increment();
        _mint(msg.sender, 1, 1, ""); 
    }

    function whitelistWL(bytes32[] calldata _merkleProof) public payable nonReentrant onlySender WLPhase
    {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(_merkleProof, WLmerkleRoot, leaf), "Invalid proof.");
        require(whitelistClaimed[msg.sender] == false);
        require(totalSupply() < maxSupply);
        require(msg.value >= WLPrice);
        
        whitelistClaimed[msg.sender] = true;
        _tokenIdTracker.increment();
        _mint(msg.sender, 1, 1, ""); 
    }

    function publicSale() public payable nonReentrant onlySender PublicPhase
    {
        require(msg.value >= PublicPrice);
        require(publicClaimed[msg.sender] == false);
        require(totalSupply() < maxSupply);

        publicClaimed[msg.sender] = true;
        _tokenIdTracker.increment();
        _mint(msg.sender, 1, 1, "");
        
    }
   
    function withdrawContractEther(address payable recipient) external onlyOwner
    {
        recipient.transfer(getBalance());
    }
    function getBalance() public view returns(uint)
    {
        return address(this).balance;
    }
    function totalSupply() public view returns (uint256) {
            return _tokenIdTracker.current();
    }
   
    function _baseURI() internal view virtual returns (string memory) {
        return baseURI;
    }
   
    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }
   
    function uri(uint256 tokenId) public view override virtual returns (string memory)
    {
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : "";
    }

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
   

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"OGWLPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OGmerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PublicOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PublicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLmerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"bytes32","name":"incomingBytes","type":"bytes32"}],"name":"setMerkleRootOG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"incomingBytes","type":"bytes32"}],"name":"setMerkleRootWL","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistOG","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistWL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawContractEther","outputs":[],"stateMutability":"nonpayable","type":"function"}]

7f7f3b3801871c7a7e75b656612a741bd43c3c37c447d6e0ac1c688776085cfd326007557f200586ee0c6321574e27a59d35f0e1a25475dec8c7e18f2ebfbcaee55e31a82360085560c06040526005608081905264173539b7b760d91b60a09081526200007091600a919062000a60565b5066ea7aa67b2d0000600b556701118f178fb48000600c55670138a388a43c0000600d5561014d600e55600f805461ffff19166001179055604080516102c081018252730e93545edad0ba8884bcee70618c3d8d4d73d5b4815273222536857ddfd70ed5ded3e1a0c2ccf4fb1ed9d3602082015273e4214f3cea99b31f6be6219fdf646eb4646936ac9181019190915273c4b72816db9913a69d5a0af41b477b51c8f598d3606082015273b84d84019af5eebf81b378e98567068dcb9b622b608082015273453f2a8e2ee8107e056bc71cdbf29322a1b73a5360a0820152736ed655ed54910c1f85391f8e755f92927a38143960c0820152731e868e0f5948fc94ed99dde0d0aba939e7677b4760e082015273e7858696eb520464e6415fb06fdb5ed9d157f9d861010082015273b94872bc787343e194c069ffeb7621cbea41ff736101208201527396232d041648046c17f428b3d7b5b8363944188b610140820152733fc1ff9fdb1a893b53870c993de55fee97bf4ddb61016082015273f402a5c9d709ed5b384ba29f82445667f924eabf61018082015273c54e976001adad914552ec95f3c14aba80f476156101a0820181905273be68a874d11277ac4a6398b82def700553d74c3f6101c083015273111bb952e44fb1d43bd1d8861e965e0b0ecf5df46101e08301527312c8594991f6488ca330945850bba200a992a18561020083015273f932755165312e18b62484b9a23b517cc07a7ba2610220830152735b90eea54ed61a690db4429ec503436ffb3ace9161024083015261026082015273a65c1768400fe2c8355aa58595bf09fbe1a6963161028082015273643dcbc92592a2b24d9cac834713f112ceb8ba606102a0820152620002f990601290601662000aef565b503480156200030757600080fd5b50604051620035c3380380620035c38339810160408190526200032a9162000b91565b8062000336816200043d565b506001600455620003473362000456565b6200035281620004a8565b60005b600a811015620003af576200037660066200051d60201b620010551760201c565b6200039a33600180604051806020016040528060008152506200052660201b60201c565b80620003a68162000d77565b91505062000355565b5060005b6012548110156200043557620003d560066200051d60201b620010551760201c565b6200042060128281548110620003ef57620003ef62000dab565b60009182526020808320909101546040805192830190529181526001600160a01b0390911690600190819062000526565b806200042c8162000d77565b915050620003b3565b505062000e83565b80516200045290600290602084019062000a60565b5050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b80516200045290600990602084019062000a60565b80546001019055565b6001600160a01b038416620005885760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401620004ff565b336000620005968562000655565b90506000620005a58562000655565b9050620005b883600089858589620006a3565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290620005ea90849062000cbd565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46200064c83600089898989620006c6565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811062000692576200069262000dab565b602090810291909101015292915050565b620006be868686868686620008a360201b6200105e1760201c565b505050505050565b620006e5846001600160a01b031662000a5160201b620011e11760201c565b15620006be5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619062000721908990899088908890889060040162000c61565b602060405180830381600087803b1580156200073c57600080fd5b505af19250505080156200076f575060408051601f3d908101601f191682019092526200076c9181019062000b5e565b60015b62000830576200077e62000dd7565b806308c379a01415620007bf57506200079662000df4565b80620007a35750620007c1565b8060405162461bcd60e51b8152600401620004ff919062000ca8565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401620004ff565b6001600160e01b0319811663f23a6e6160e01b146200064c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401620004ff565b620008be868686868686620006be60201b620011d91760201c565b6001600160a01b038516620009525760005b83518110156200095057828181518110620008ef57620008ef62000dab565b60200260200101516003600086848151811062000910576200091062000dab565b60200260200101518152602001908152602001600020600082825462000937919062000cbd565b909155506200094890508162000d77565b9050620008d0565b505b6001600160a01b038416620006be5760005b83518110156200064c57600084828151811062000985576200098562000dab565b602002602001015190506000848381518110620009a657620009a662000dab565b602002602001015190506000600360008481526020019081526020016000205490508181101562000a2b5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b6064820152608401620004ff565b6000928352600360205260409092209103905562000a498162000d77565b905062000964565b6001600160a01b03163b151590565b82805462000a6e9062000d0b565b90600052602060002090601f01602090048101928262000a92576000855562000add565b82601f1062000aad57805160ff191683800117855562000add565b8280016001018555821562000add579182015b8281111562000add57825182559160200191906001019062000ac0565b5062000aeb92915062000b47565b5090565b82805482825590600052602060002090810192821562000add579160200282015b8281111562000add57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000b10565b5b8082111562000aeb576000815560010162000b48565b60006020828403121562000b7157600080fd5b81516001600160e01b03198116811462000b8a57600080fd5b9392505050565b60006020828403121562000ba457600080fd5b81516001600160401b038082111562000bbc57600080fd5b818401915084601f83011262000bd157600080fd5b81518181111562000be65762000be662000dc1565b604051915062000c01601f8201601f19166020018362000d48565b80825285602082850101111562000c1757600080fd5b62000c2a81602084016020860162000cd8565b50949350505050565b6000815180845262000c4d81602086016020860162000cd8565b601f01601f19169290920160200192915050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009062000c9d9083018462000c33565b979650505050505050565b60208152600062000b8a602083018462000c33565b6000821982111562000cd35762000cd362000d95565b500190565b60005b8381101562000cf557818101518382015260200162000cdb565b8381111562000d05576000848401525b50505050565b600181811c9082168062000d2057607f821691505b6020821081141562000d4257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b038111828210171562000d705762000d7062000dc1565b6040525050565b600060001982141562000d8e5762000d8e62000d95565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111562000df15760046000803e5060005160e01c5b90565b600060443d101562000e035790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171562000e3357505050505090565b828501915081518181111562000e4c5750505050505090565b843d870101602082850101111562000e675750505050505090565b62000e786020828601018762000d48565b509095945050505050565b6127308062000e936000396000f3fe6080604052600436106102035760003560e01c806379aa0a9a11610118578063b5b1cd7c116100a0578063d5abeb011161006f578063d5abeb011461058c578063db4bec44146105a2578063e985e9c5146105d2578063f242432a1461061b578063f2fde38b1461063b57600080fd5b8063b5b1cd7c14610505578063bd85b03914610535578063c668286214610562578063cc89589c1461057757600080fd5b8063a22cb465116100e7578063a22cb4651461047c578063a58fdc111461049c578063a8d6db2a146104bc578063ad3e31b7146104cf578063b0a04d3d146104ef57600080fd5b806379aa0a9a146104075780638104e105146104215780638da5cb5b14610434578063a16d605a1461045c57600080fd5b806333bc1c5c1161019b5780635c0656001161016a5780635c0656001461039b5780635ef3bd8b146103b15780636c0360eb146103c7578063715018a6146103dc57806378819777146103f157600080fd5b806333bc1c5c146103175780634e1273f41461031f5780634f558e791461034c57806355f804b31461037b57600080fd5b806312065fe0116101d757806312065fe0146102ae57806312340984146102c157806318160ddd146102e05780632eb2c2d6146102f557600080fd5b8062fdd58e1461020857806301ffc9a71461023b57806306141bb11461026b5780630e89341c14610281575b600080fd5b34801561021457600080fd5b50610228610223366004611f2e565b61065b565b6040519081526020015b60405180910390f35b34801561024757600080fd5b5061025b6102563660046120bb565b6106f2565b6040519015158152602001610232565b34801561027757600080fd5b5061022860085481565b34801561028d57600080fd5b506102a161029c3660046120a2565b610744565b604051610232919061234d565b3480156102ba57600080fd5b5047610228565b3480156102cd57600080fd5b50600f5461025b90610100900460ff1681565b3480156102ec57600080fd5b506102286107a5565b34801561030157600080fd5b50610315610310366004611de4565b6107b5565b005b61031561084c565b34801561032b57600080fd5b5061033f61033a366004611f5a565b610926565b604051610232919061230c565b34801561035857600080fd5b5061025b6103673660046120a2565b600090815260036020526040902054151590565b34801561038757600080fd5b506103156103963660046120f5565b610a50565b3480156103a757600080fd5b50610228600d5481565b3480156103bd57600080fd5b5061022860075481565b3480156103d357600080fd5b506102a1610a91565b3480156103e857600080fd5b50610315610b1f565b3480156103fd57600080fd5b50610228600b5481565b34801561041357600080fd5b50600f5461025b9060ff1681565b61031561042f36600461202d565b610b55565b34801561044057600080fd5b506005546040516001600160a01b039091168152602001610232565b34801561046857600080fd5b50610315610477366004611d8e565b610ce3565b34801561048857600080fd5b50610315610497366004611efb565b610d42565b3480156104a857600080fd5b506103156104b73660046120a2565b610d4d565b6103156104ca36600461202d565b610d7c565b3480156104db57600080fd5b506103156104ea3660046120a2565b610ebc565b3480156104fb57600080fd5b50610228600c5481565b34801561051157600080fd5b5061025b610520366004611d8e565b60116020526000908152604090205460ff1681565b34801561054157600080fd5b506102286105503660046120a2565b60009081526003602052604090205490565b34801561056e57600080fd5b506102a1610eeb565b34801561058357600080fd5b50610315610ef8565b34801561059857600080fd5b50610228600e5481565b3480156105ae57600080fd5b5061025b6105bd366004611d8e565b60106020526000908152604090205460ff1681565b3480156105de57600080fd5b5061025b6105ed366004611dab565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561062757600080fd5b50610315610636366004611e92565b610f33565b34801561064757600080fd5b50610315610656366004611d8e565b610fba565b60006001600160a01b0383166106cc5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061072357506001600160e01b031982166303a24d0760e21b145b8061073e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060006107506111f0565b90506000815111610770576040518060200160405280600081525061079e565b8061077a84611282565b600a60405160200161078e939291906121a5565b6040516020818303038152906040525b9392505050565b60006107b060065490565b905090565b6001600160a01b0385163314806107d157506107d185336105ed565b6108385760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016106c3565b6108458585858585611388565b5050505050565b6002600454141561086f5760405162461bcd60e51b81526004016106c39061246c565b600260045533321461088057600080fd5b600f5460ff61010090910416151560011461089a57600080fd5b600d543410156108a957600080fd5b3360009081526011602052604090205460ff16156108c657600080fd5b600e546108d16107a5565b106108db57600080fd5b336000908152601160205260409020805460ff19166001179055610903600680546001019055565b61091f336001806040518060200160405280600081525061156b565b6001600455565b6060815183511461098b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016106c3565b6000835167ffffffffffffffff8111156109a7576109a7612613565b6040519080825280602002602001820160405280156109d0578160200160208202803683370190505b50905060005b8451811015610a4857610a1b8582815181106109f4576109f46125fd565b6020026020010151858381518110610a0e57610a0e6125fd565b602002602001015161065b565b828281518110610a2d57610a2d6125fd565b6020908102919091010152610a41816125a2565b90506109d6565b509392505050565b6005546001600160a01b03163314610a7a5760405162461bcd60e51b81526004016106c390612437565b8051610a8d906009906020840190611c00565b5050565b60098054610a9e9061253a565b80601f0160208091040260200160405190810160405280929190818152602001828054610aca9061253a565b8015610b175780601f10610aec57610100808354040283529160200191610b17565b820191906000526020600020905b815481529060010190602001808311610afa57829003601f168201915b505050505081565b6005546001600160a01b03163314610b495760405162461bcd60e51b81526004016106c390612437565b610b536000611685565b565b60026004541415610b785760405162461bcd60e51b81526004016106c39061246c565b6002600455333214610b8957600080fd5b600f5460ff161515600114610b9d57600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610c178383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060085491508490506116d7565b610c545760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b60448201526064016106c3565b3360009081526010602052604090205460ff1615610c7157600080fd5b600e54610c7c6107a5565b10610c8657600080fd5b600c54341015610c9557600080fd5b336000908152601060205260409020805460ff19166001179055610cbd600680546001019055565b610cd9336001806040518060200160405280600081525061156b565b5050600160045550565b6005546001600160a01b03163314610d0d5760405162461bcd60e51b81526004016106c390612437565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610a8d573d6000803e3d6000fd5b610a8d3383836116ed565b6005546001600160a01b03163314610d775760405162461bcd60e51b81526004016106c390612437565b600755565b60026004541415610d9f5760405162461bcd60e51b81526004016106c39061246c565b6002600455333214610db057600080fd5b600f5460ff161515600114610dc457600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610e3e8383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060075491508490506116d7565b610e7b5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b60448201526064016106c3565b3360009081526010602052604090205460ff1615610e9857600080fd5b600e54610ea36107a5565b10610ead57600080fd5b600b54341015610c9557600080fd5b6005546001600160a01b03163314610ee65760405162461bcd60e51b81526004016106c390612437565b600855565b600a8054610a9e9061253a565b6005546001600160a01b03163314610f225760405162461bcd60e51b81526004016106c390612437565b600f805461ffff1916610100179055565b6001600160a01b038516331480610f4f5750610f4f85336105ed565b610fad5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016106c3565b61084585858585856117ce565b6005546001600160a01b03163314610fe45760405162461bcd60e51b81526004016106c390612437565b6001600160a01b0381166110495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c3565b61105281611685565b50565b80546001019055565b6001600160a01b0385166110e55760005b83518110156110e35782818151811061108a5761108a6125fd565b6020026020010151600360008684815181106110a8576110a86125fd565b6020026020010151815260200190815260200160002060008282546110cd91906124c7565b909155506110dc9050816125a2565b905061106f565b505b6001600160a01b0384166111d95760005b83518110156111d7576000848281518110611113576111136125fd565b602002602001015190506000848381518110611131576111316125fd565b60200260200101519050600060036000848152602001908152602001600020549050818110156111b45760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b60648201526084016106c3565b600092835260036020526040909220910390556111d0816125a2565b90506110f6565b505b505050505050565b6001600160a01b03163b151590565b6060600980546111ff9061253a565b80601f016020809104026020016040519081016040528092919081815260200182805461122b9061253a565b80156112785780601f1061124d57610100808354040283529160200191611278565b820191906000526020600020905b81548152906001019060200180831161125b57829003601f168201915b5050505050905090565b6060816112a65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156112d057806112ba816125a2565b91506112c99050600a836124df565b91506112aa565b60008167ffffffffffffffff8111156112eb576112eb612613565b6040519080825280601f01601f191660200182016040528015611315576020820181803683370190505b5090505b84156113805761132a6001836124f3565b9150611337600a866125bd565b6113429060306124c7565b60f81b818381518110611357576113576125fd565b60200101906001600160f81b031916908160001a905350611379600a866124df565b9450611319565b949350505050565b81518351146113ea5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016106c3565b6001600160a01b0384166114105760405162461bcd60e51b81526004016106c3906123a8565b3361141f818787878787611906565b60005b845181101561150557600085828151811061143f5761143f6125fd565b60200260200101519050600085838151811061145d5761145d6125fd565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156114ad5760405162461bcd60e51b81526004016106c3906123ed565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906114ea9084906124c7565b92505081905550505050806114fe906125a2565b9050611422565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161155592919061231f565b60405180910390a46111d9818787878787611914565b6001600160a01b0384166115cb5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016106c3565b3360006115d785611a7f565b905060006115e485611a7f565b90506115f583600089858589611906565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906116259084906124c7565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46111d783600089898989611aca565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826116e48584611b94565b14949350505050565b816001600160a01b0316836001600160a01b031614156117615760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016106c3565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166117f45760405162461bcd60e51b81526004016106c3906123a8565b33600061180085611a7f565b9050600061180d85611a7f565b905061181d838989858589611906565b6000868152602081815260408083206001600160a01b038c1684529091529020548581101561185e5760405162461bcd60e51b81526004016106c3906123ed565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061189b9084906124c7565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46118fb848a8a8a8a8a611aca565b505050505050505050565b6111d986868686868661105e565b6001600160a01b0384163b156111d95760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906119589089908990889088908890600401612269565b602060405180830381600087803b15801561197257600080fd5b505af19250505080156119a2575060408051601f3d908101601f1916820190925261199f918101906120d8565b60015b611a4f576119ae612629565b806308c379a014156119e857506119c3612645565b806119ce57506119ea565b8060405162461bcd60e51b81526004016106c3919061234d565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016106c3565b6001600160e01b0319811663bc197c8160e01b146111d75760405162461bcd60e51b81526004016106c390612360565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611ab957611ab96125fd565b602090810291909101015292915050565b6001600160a01b0384163b156111d95760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611b0e90899089908890889088906004016122c7565b602060405180830381600087803b158015611b2857600080fd5b505af1925050508015611b58575060408051601f3d908101601f19168201909252611b55918101906120d8565b60015b611b64576119ae612629565b6001600160e01b0319811663f23a6e6160e01b146111d75760405162461bcd60e51b81526004016106c390612360565b600081815b8451811015610a48576000858281518110611bb657611bb66125fd565b60200260200101519050808311611bdc5760008381526020829052604090209250611bed565b600081815260208490526040902092505b5080611bf8816125a2565b915050611b99565b828054611c0c9061253a565b90600052602060002090601f016020900481019282611c2e5760008555611c74565b82601f10611c4757805160ff1916838001178555611c74565b82800160010185558215611c74579182015b82811115611c74578251825591602001919060010190611c59565b50611c80929150611c84565b5090565b5b80821115611c805760008155600101611c85565b600067ffffffffffffffff831115611cb357611cb3612613565b604051611cca601f8501601f191660200182612575565b809150838152848484011115611cdf57600080fd5b83836020830137600060208583010152509392505050565b600082601f830112611d0857600080fd5b81356020611d15826124a3565b604051611d228282612575565b8381528281019150858301600585901b87018401881015611d4257600080fd5b60005b85811015611d6157813584529284019290840190600101611d45565b5090979650505050505050565b600082601f830112611d7f57600080fd5b61079e83833560208501611c99565b600060208284031215611da057600080fd5b813561079e816126cf565b60008060408385031215611dbe57600080fd5b8235611dc9816126cf565b91506020830135611dd9816126cf565b809150509250929050565b600080600080600060a08688031215611dfc57600080fd5b8535611e07816126cf565b94506020860135611e17816126cf565b9350604086013567ffffffffffffffff80821115611e3457600080fd5b611e4089838a01611cf7565b94506060880135915080821115611e5657600080fd5b611e6289838a01611cf7565b93506080880135915080821115611e7857600080fd5b50611e8588828901611d6e565b9150509295509295909350565b600080600080600060a08688031215611eaa57600080fd5b8535611eb5816126cf565b94506020860135611ec5816126cf565b93506040860135925060608601359150608086013567ffffffffffffffff811115611eef57600080fd5b611e8588828901611d6e565b60008060408385031215611f0e57600080fd5b8235611f19816126cf565b915060208301358015158114611dd957600080fd5b60008060408385031215611f4157600080fd5b8235611f4c816126cf565b946020939093013593505050565b60008060408385031215611f6d57600080fd5b823567ffffffffffffffff80821115611f8557600080fd5b818501915085601f830112611f9957600080fd5b81356020611fa6826124a3565b604051611fb38282612575565b8381528281019150858301600585901b870184018b1015611fd357600080fd5b600096505b84871015611fff578035611feb816126cf565b835260019690960195918301918301611fd8565b509650508601359250508082111561201657600080fd5b5061202385828601611cf7565b9150509250929050565b6000806020838503121561204057600080fd5b823567ffffffffffffffff8082111561205857600080fd5b818501915085601f83011261206c57600080fd5b81358181111561207b57600080fd5b8660208260051b850101111561209057600080fd5b60209290920196919550909350505050565b6000602082840312156120b457600080fd5b5035919050565b6000602082840312156120cd57600080fd5b813561079e816126e4565b6000602082840312156120ea57600080fd5b815161079e816126e4565b60006020828403121561210757600080fd5b813567ffffffffffffffff81111561211e57600080fd5b8201601f8101841361212f57600080fd5b61138084823560208401611c99565b600081518084526020808501945080840160005b8381101561216e57815187529582019590820190600101612152565b509495945050505050565b6000815180845261219181602086016020860161250a565b601f01601f19169290920160200192915050565b6000845160206121b88285838a0161250a565b8551918401916121cb8184848a0161250a565b8554920191600090600181811c90808316806121e857607f831692505b85831081141561220657634e487b7160e01b85526022600452602485fd5b80801561221a576001811461222b57612258565b60ff19851688528388019550612258565b60008b81526020902060005b858110156122505781548a820152908401908801612237565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906122959083018661213e565b82810360608401526122a7818661213e565b905082810360808401526122bb8185612179565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061230190830184612179565b979650505050505050565b60208152600061079e602083018461213e565b604081526000612332604083018561213e565b8281036020840152612344818561213e565b95945050505050565b60208152600061079e6020830184612179565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600067ffffffffffffffff8211156124bd576124bd612613565b5060051b60200190565b600082198211156124da576124da6125d1565b500190565b6000826124ee576124ee6125e7565b500490565b600082821015612505576125056125d1565b500390565b60005b8381101561252557818101518382015260200161250d565b83811115612534576000848401525b50505050565b600181811c9082168061254e57607f821691505b6020821081141561256f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561259b5761259b612613565b6040525050565b60006000198214156125b6576125b66125d1565b5060010190565b6000826125cc576125cc6125e7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156126425760046000803e5060005160e01c5b90565b600060443d10156126535790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561268357505050505090565b828501915081518181111561269b5750505050505090565b843d87010160208285010111156126b55750505050505090565b6126c460208286010187612575565b509095945050505050565b6001600160a01b038116811461105257600080fd5b6001600160e01b03198116811461105257600080fdfea26469706673582212200f3cafa89d1fb40767c1aee0488901ae45052a208baab42081a4e00f23ab9d9e64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d527874555871413943714879753742725750464b7535324a6756726b72764472646b31574e777641364337592f00000000000000000000

Deployed Bytecode

0x6080604052600436106102035760003560e01c806379aa0a9a11610118578063b5b1cd7c116100a0578063d5abeb011161006f578063d5abeb011461058c578063db4bec44146105a2578063e985e9c5146105d2578063f242432a1461061b578063f2fde38b1461063b57600080fd5b8063b5b1cd7c14610505578063bd85b03914610535578063c668286214610562578063cc89589c1461057757600080fd5b8063a22cb465116100e7578063a22cb4651461047c578063a58fdc111461049c578063a8d6db2a146104bc578063ad3e31b7146104cf578063b0a04d3d146104ef57600080fd5b806379aa0a9a146104075780638104e105146104215780638da5cb5b14610434578063a16d605a1461045c57600080fd5b806333bc1c5c1161019b5780635c0656001161016a5780635c0656001461039b5780635ef3bd8b146103b15780636c0360eb146103c7578063715018a6146103dc57806378819777146103f157600080fd5b806333bc1c5c146103175780634e1273f41461031f5780634f558e791461034c57806355f804b31461037b57600080fd5b806312065fe0116101d757806312065fe0146102ae57806312340984146102c157806318160ddd146102e05780632eb2c2d6146102f557600080fd5b8062fdd58e1461020857806301ffc9a71461023b57806306141bb11461026b5780630e89341c14610281575b600080fd5b34801561021457600080fd5b50610228610223366004611f2e565b61065b565b6040519081526020015b60405180910390f35b34801561024757600080fd5b5061025b6102563660046120bb565b6106f2565b6040519015158152602001610232565b34801561027757600080fd5b5061022860085481565b34801561028d57600080fd5b506102a161029c3660046120a2565b610744565b604051610232919061234d565b3480156102ba57600080fd5b5047610228565b3480156102cd57600080fd5b50600f5461025b90610100900460ff1681565b3480156102ec57600080fd5b506102286107a5565b34801561030157600080fd5b50610315610310366004611de4565b6107b5565b005b61031561084c565b34801561032b57600080fd5b5061033f61033a366004611f5a565b610926565b604051610232919061230c565b34801561035857600080fd5b5061025b6103673660046120a2565b600090815260036020526040902054151590565b34801561038757600080fd5b506103156103963660046120f5565b610a50565b3480156103a757600080fd5b50610228600d5481565b3480156103bd57600080fd5b5061022860075481565b3480156103d357600080fd5b506102a1610a91565b3480156103e857600080fd5b50610315610b1f565b3480156103fd57600080fd5b50610228600b5481565b34801561041357600080fd5b50600f5461025b9060ff1681565b61031561042f36600461202d565b610b55565b34801561044057600080fd5b506005546040516001600160a01b039091168152602001610232565b34801561046857600080fd5b50610315610477366004611d8e565b610ce3565b34801561048857600080fd5b50610315610497366004611efb565b610d42565b3480156104a857600080fd5b506103156104b73660046120a2565b610d4d565b6103156104ca36600461202d565b610d7c565b3480156104db57600080fd5b506103156104ea3660046120a2565b610ebc565b3480156104fb57600080fd5b50610228600c5481565b34801561051157600080fd5b5061025b610520366004611d8e565b60116020526000908152604090205460ff1681565b34801561054157600080fd5b506102286105503660046120a2565b60009081526003602052604090205490565b34801561056e57600080fd5b506102a1610eeb565b34801561058357600080fd5b50610315610ef8565b34801561059857600080fd5b50610228600e5481565b3480156105ae57600080fd5b5061025b6105bd366004611d8e565b60106020526000908152604090205460ff1681565b3480156105de57600080fd5b5061025b6105ed366004611dab565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561062757600080fd5b50610315610636366004611e92565b610f33565b34801561064757600080fd5b50610315610656366004611d8e565b610fba565b60006001600160a01b0383166106cc5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061072357506001600160e01b031982166303a24d0760e21b145b8061073e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060006107506111f0565b90506000815111610770576040518060200160405280600081525061079e565b8061077a84611282565b600a60405160200161078e939291906121a5565b6040516020818303038152906040525b9392505050565b60006107b060065490565b905090565b6001600160a01b0385163314806107d157506107d185336105ed565b6108385760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016106c3565b6108458585858585611388565b5050505050565b6002600454141561086f5760405162461bcd60e51b81526004016106c39061246c565b600260045533321461088057600080fd5b600f5460ff61010090910416151560011461089a57600080fd5b600d543410156108a957600080fd5b3360009081526011602052604090205460ff16156108c657600080fd5b600e546108d16107a5565b106108db57600080fd5b336000908152601160205260409020805460ff19166001179055610903600680546001019055565b61091f336001806040518060200160405280600081525061156b565b6001600455565b6060815183511461098b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016106c3565b6000835167ffffffffffffffff8111156109a7576109a7612613565b6040519080825280602002602001820160405280156109d0578160200160208202803683370190505b50905060005b8451811015610a4857610a1b8582815181106109f4576109f46125fd565b6020026020010151858381518110610a0e57610a0e6125fd565b602002602001015161065b565b828281518110610a2d57610a2d6125fd565b6020908102919091010152610a41816125a2565b90506109d6565b509392505050565b6005546001600160a01b03163314610a7a5760405162461bcd60e51b81526004016106c390612437565b8051610a8d906009906020840190611c00565b5050565b60098054610a9e9061253a565b80601f0160208091040260200160405190810160405280929190818152602001828054610aca9061253a565b8015610b175780601f10610aec57610100808354040283529160200191610b17565b820191906000526020600020905b815481529060010190602001808311610afa57829003601f168201915b505050505081565b6005546001600160a01b03163314610b495760405162461bcd60e51b81526004016106c390612437565b610b536000611685565b565b60026004541415610b785760405162461bcd60e51b81526004016106c39061246c565b6002600455333214610b8957600080fd5b600f5460ff161515600114610b9d57600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610c178383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060085491508490506116d7565b610c545760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b60448201526064016106c3565b3360009081526010602052604090205460ff1615610c7157600080fd5b600e54610c7c6107a5565b10610c8657600080fd5b600c54341015610c9557600080fd5b336000908152601060205260409020805460ff19166001179055610cbd600680546001019055565b610cd9336001806040518060200160405280600081525061156b565b5050600160045550565b6005546001600160a01b03163314610d0d5760405162461bcd60e51b81526004016106c390612437565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610a8d573d6000803e3d6000fd5b610a8d3383836116ed565b6005546001600160a01b03163314610d775760405162461bcd60e51b81526004016106c390612437565b600755565b60026004541415610d9f5760405162461bcd60e51b81526004016106c39061246c565b6002600455333214610db057600080fd5b600f5460ff161515600114610dc457600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610e3e8383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060075491508490506116d7565b610e7b5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b60448201526064016106c3565b3360009081526010602052604090205460ff1615610e9857600080fd5b600e54610ea36107a5565b10610ead57600080fd5b600b54341015610c9557600080fd5b6005546001600160a01b03163314610ee65760405162461bcd60e51b81526004016106c390612437565b600855565b600a8054610a9e9061253a565b6005546001600160a01b03163314610f225760405162461bcd60e51b81526004016106c390612437565b600f805461ffff1916610100179055565b6001600160a01b038516331480610f4f5750610f4f85336105ed565b610fad5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016106c3565b61084585858585856117ce565b6005546001600160a01b03163314610fe45760405162461bcd60e51b81526004016106c390612437565b6001600160a01b0381166110495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c3565b61105281611685565b50565b80546001019055565b6001600160a01b0385166110e55760005b83518110156110e35782818151811061108a5761108a6125fd565b6020026020010151600360008684815181106110a8576110a86125fd565b6020026020010151815260200190815260200160002060008282546110cd91906124c7565b909155506110dc9050816125a2565b905061106f565b505b6001600160a01b0384166111d95760005b83518110156111d7576000848281518110611113576111136125fd565b602002602001015190506000848381518110611131576111316125fd565b60200260200101519050600060036000848152602001908152602001600020549050818110156111b45760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b60648201526084016106c3565b600092835260036020526040909220910390556111d0816125a2565b90506110f6565b505b505050505050565b6001600160a01b03163b151590565b6060600980546111ff9061253a565b80601f016020809104026020016040519081016040528092919081815260200182805461122b9061253a565b80156112785780601f1061124d57610100808354040283529160200191611278565b820191906000526020600020905b81548152906001019060200180831161125b57829003601f168201915b5050505050905090565b6060816112a65750506040805180820190915260018152600360fc1b602082015290565b8160005b81156112d057806112ba816125a2565b91506112c99050600a836124df565b91506112aa565b60008167ffffffffffffffff8111156112eb576112eb612613565b6040519080825280601f01601f191660200182016040528015611315576020820181803683370190505b5090505b84156113805761132a6001836124f3565b9150611337600a866125bd565b6113429060306124c7565b60f81b818381518110611357576113576125fd565b60200101906001600160f81b031916908160001a905350611379600a866124df565b9450611319565b949350505050565b81518351146113ea5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016106c3565b6001600160a01b0384166114105760405162461bcd60e51b81526004016106c3906123a8565b3361141f818787878787611906565b60005b845181101561150557600085828151811061143f5761143f6125fd565b60200260200101519050600085838151811061145d5761145d6125fd565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156114ad5760405162461bcd60e51b81526004016106c3906123ed565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906114ea9084906124c7565b92505081905550505050806114fe906125a2565b9050611422565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161155592919061231f565b60405180910390a46111d9818787878787611914565b6001600160a01b0384166115cb5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016106c3565b3360006115d785611a7f565b905060006115e485611a7f565b90506115f583600089858589611906565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906116259084906124c7565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46111d783600089898989611aca565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826116e48584611b94565b14949350505050565b816001600160a01b0316836001600160a01b031614156117615760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016106c3565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166117f45760405162461bcd60e51b81526004016106c3906123a8565b33600061180085611a7f565b9050600061180d85611a7f565b905061181d838989858589611906565b6000868152602081815260408083206001600160a01b038c1684529091529020548581101561185e5760405162461bcd60e51b81526004016106c3906123ed565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061189b9084906124c7565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46118fb848a8a8a8a8a611aca565b505050505050505050565b6111d986868686868661105e565b6001600160a01b0384163b156111d95760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906119589089908990889088908890600401612269565b602060405180830381600087803b15801561197257600080fd5b505af19250505080156119a2575060408051601f3d908101601f1916820190925261199f918101906120d8565b60015b611a4f576119ae612629565b806308c379a014156119e857506119c3612645565b806119ce57506119ea565b8060405162461bcd60e51b81526004016106c3919061234d565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016106c3565b6001600160e01b0319811663bc197c8160e01b146111d75760405162461bcd60e51b81526004016106c390612360565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611ab957611ab96125fd565b602090810291909101015292915050565b6001600160a01b0384163b156111d95760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611b0e90899089908890889088906004016122c7565b602060405180830381600087803b158015611b2857600080fd5b505af1925050508015611b58575060408051601f3d908101601f19168201909252611b55918101906120d8565b60015b611b64576119ae612629565b6001600160e01b0319811663f23a6e6160e01b146111d75760405162461bcd60e51b81526004016106c390612360565b600081815b8451811015610a48576000858281518110611bb657611bb66125fd565b60200260200101519050808311611bdc5760008381526020829052604090209250611bed565b600081815260208490526040902092505b5080611bf8816125a2565b915050611b99565b828054611c0c9061253a565b90600052602060002090601f016020900481019282611c2e5760008555611c74565b82601f10611c4757805160ff1916838001178555611c74565b82800160010185558215611c74579182015b82811115611c74578251825591602001919060010190611c59565b50611c80929150611c84565b5090565b5b80821115611c805760008155600101611c85565b600067ffffffffffffffff831115611cb357611cb3612613565b604051611cca601f8501601f191660200182612575565b809150838152848484011115611cdf57600080fd5b83836020830137600060208583010152509392505050565b600082601f830112611d0857600080fd5b81356020611d15826124a3565b604051611d228282612575565b8381528281019150858301600585901b87018401881015611d4257600080fd5b60005b85811015611d6157813584529284019290840190600101611d45565b5090979650505050505050565b600082601f830112611d7f57600080fd5b61079e83833560208501611c99565b600060208284031215611da057600080fd5b813561079e816126cf565b60008060408385031215611dbe57600080fd5b8235611dc9816126cf565b91506020830135611dd9816126cf565b809150509250929050565b600080600080600060a08688031215611dfc57600080fd5b8535611e07816126cf565b94506020860135611e17816126cf565b9350604086013567ffffffffffffffff80821115611e3457600080fd5b611e4089838a01611cf7565b94506060880135915080821115611e5657600080fd5b611e6289838a01611cf7565b93506080880135915080821115611e7857600080fd5b50611e8588828901611d6e565b9150509295509295909350565b600080600080600060a08688031215611eaa57600080fd5b8535611eb5816126cf565b94506020860135611ec5816126cf565b93506040860135925060608601359150608086013567ffffffffffffffff811115611eef57600080fd5b611e8588828901611d6e565b60008060408385031215611f0e57600080fd5b8235611f19816126cf565b915060208301358015158114611dd957600080fd5b60008060408385031215611f4157600080fd5b8235611f4c816126cf565b946020939093013593505050565b60008060408385031215611f6d57600080fd5b823567ffffffffffffffff80821115611f8557600080fd5b818501915085601f830112611f9957600080fd5b81356020611fa6826124a3565b604051611fb38282612575565b8381528281019150858301600585901b870184018b1015611fd357600080fd5b600096505b84871015611fff578035611feb816126cf565b835260019690960195918301918301611fd8565b509650508601359250508082111561201657600080fd5b5061202385828601611cf7565b9150509250929050565b6000806020838503121561204057600080fd5b823567ffffffffffffffff8082111561205857600080fd5b818501915085601f83011261206c57600080fd5b81358181111561207b57600080fd5b8660208260051b850101111561209057600080fd5b60209290920196919550909350505050565b6000602082840312156120b457600080fd5b5035919050565b6000602082840312156120cd57600080fd5b813561079e816126e4565b6000602082840312156120ea57600080fd5b815161079e816126e4565b60006020828403121561210757600080fd5b813567ffffffffffffffff81111561211e57600080fd5b8201601f8101841361212f57600080fd5b61138084823560208401611c99565b600081518084526020808501945080840160005b8381101561216e57815187529582019590820190600101612152565b509495945050505050565b6000815180845261219181602086016020860161250a565b601f01601f19169290920160200192915050565b6000845160206121b88285838a0161250a565b8551918401916121cb8184848a0161250a565b8554920191600090600181811c90808316806121e857607f831692505b85831081141561220657634e487b7160e01b85526022600452602485fd5b80801561221a576001811461222b57612258565b60ff19851688528388019550612258565b60008b81526020902060005b858110156122505781548a820152908401908801612237565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906122959083018661213e565b82810360608401526122a7818661213e565b905082810360808401526122bb8185612179565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061230190830184612179565b979650505050505050565b60208152600061079e602083018461213e565b604081526000612332604083018561213e565b8281036020840152612344818561213e565b95945050505050565b60208152600061079e6020830184612179565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600067ffffffffffffffff8211156124bd576124bd612613565b5060051b60200190565b600082198211156124da576124da6125d1565b500190565b6000826124ee576124ee6125e7565b500490565b600082821015612505576125056125d1565b500390565b60005b8381101561252557818101518382015260200161250d565b83811115612534576000848401525b50505050565b600181811c9082168061254e57607f821691505b6020821081141561256f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561259b5761259b612613565b6040525050565b60006000198214156125b6576125b66125d1565b5060010190565b6000826125cc576125cc6125e7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156126425760046000803e5060005160e01c5b90565b600060443d10156126535790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561268357505050505090565b828501915081518181111561269b5750505050505090565b843d87010160208285010111156126b55750505050505090565b6126c460208286010187612575565b509095945050505050565b6001600160a01b038116811461105257600080fd5b6001600160e01b03198116811461105257600080fdfea26469706673582212200f3cafa89d1fb40767c1aee0488901ae45052a208baab42081a4e00f23ab9d9e64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d527874555871413943714879753742725750464b7535324a6756726b72764472646b31574e777641364337592f00000000000000000000

-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmRxtUXqA9CqHyu7BrWPFKu52JgVrkrvDrdk1WNwvA6C7Y/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d527874555871413943714879753742725750464b753532
Arg [3] : 4a6756726b72764472646b31574e777641364337592f00000000000000000000


Deployed Bytecode Sourcemap

50708:5642:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33099:231;;;;;;;;;;-1:-1:-1;33099:231:0;;;;;:::i;:::-;;:::i;:::-;;;13301:25:1;;;13289:2;13274:18;33099:231:0;;;;;;;;32122:310;;;;;;;;;;-1:-1:-1;32122:310:0;;;;;:::i;:::-;;:::i;:::-;;;13128:14:1;;13121:22;13103:41;;13091:2;13076:18;32122:310:0;12963:187:1;51024:96:0;;;;;;;;;;;;;;;;55760:281;;;;;;;;;;-1:-1:-1;55760:281:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;55310:100::-;;;;;;;;;;-1:-1:-1;55381:21:0;55310:100;;51411:30;;;;;;;;;;-1:-1:-1;51411:30:0;;;;;;;;;;;55416:108;;;;;;;;;;;;;:::i;35038:442::-;;;;;;;;;;-1:-1:-1;35038:442:0;;;;;:::i;:::-;;:::i;:::-;;54800:360;;;:::i;33496:524::-;;;;;;;;;;-1:-1:-1;33496:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;49468:122::-;;;;;;;;;;-1:-1:-1;49468:122:0;;;;;:::i;:::-;49525:4;49346:16;;;:12;:16;;;;;;-1:-1:-1;;;49468:122:0;55645:104;;;;;;;;;;-1:-1:-1;55645:104:0;;;;;:::i;:::-;;:::i;51291:40::-;;;;;;;;;;;;;;;;50921:96;;;;;;;;;;;;;;;;51129:21;;;;;;;;;;;;;:::i;11957:103::-;;;;;;;;;;;;;:::i;51203:38::-;;;;;;;;;;;;;;;;51379:25;;;;;;;;;;-1:-1:-1;51379:25:0;;;;;;;;54248:544;;;;;;:::i;:::-;;:::i;11306:87::-;;;;;;;;;;-1:-1:-1;11379:6:0;;11306:87;;-1:-1:-1;;;;;11379:6:0;;;10769:51:1;;10757:2;10742:18;11306:87:0;10623:203:1;55171:133:0;;;;;;;;;;-1:-1:-1;55171:133:0;;;;;:::i;:::-;;:::i;34093:155::-;;;;;;;;;;-1:-1:-1;34093:155:0;;;;;:::i;:::-;;:::i;53444:117::-;;;;;;;;;;-1:-1:-1;53444:117:0;;;;;:::i;:::-;;:::i;53694:546::-;;;;;;:::i;:::-;;:::i;53569:117::-;;;;;;;;;;-1:-1:-1;53569:117:0;;;;;:::i;:::-;;:::i;51248:36::-;;;;;;;;;;;;;;;;51508:46;;;;;;;;;;-1:-1:-1;51508:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;49257:113;;;;;;;;;;-1:-1:-1;49257:113:0;;;;;:::i;:::-;49319:7;49346:16;;;:12;:16;;;;;;;49257:113;51157:37;;;;;;;;;;;;;:::i;53152:102::-;;;;;;;;;;;;;:::i;51340:30::-;;;;;;;;;;;;;;;;51450:49;;;;;;;;;;-1:-1:-1;51450:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34320:168;;;;;;;;;;-1:-1:-1;34320:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;34443:27:0;;;34419:4;34443:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;34320:168;34560:401;;;;;;;;;;-1:-1:-1;34560:401:0;;;;;:::i;:::-;;:::i;12215:201::-;;;;;;;;;;-1:-1:-1;12215:201:0;;;;;:::i;:::-;;:::i;33099:231::-;33185:7;-1:-1:-1;;;;;33213:21:0;;33205:77;;;;-1:-1:-1;;;33205:77:0;;14593:2:1;33205:77:0;;;14575:21:1;14632:2;14612:18;;;14605:30;14671:34;14651:18;;;14644:62;-1:-1:-1;;;14722:18:1;;;14715:41;14773:19;;33205:77:0;;;;;;;;;-1:-1:-1;33300:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;33300:22:0;;;;;;;;;;;;33099:231::o;32122:310::-;32224:4;-1:-1:-1;;;;;;32261:41:0;;-1:-1:-1;;;32261:41:0;;:110;;-1:-1:-1;;;;;;;32319:52:0;;-1:-1:-1;;;32319:52:0;32261:110;:163;;;-1:-1:-1;;;;;;;;;;23327:40:0;;;32388:36;32241:183;32122:310;-1:-1:-1;;32122:310:0:o;55760:281::-;55828:13;55859:28;55890:10;:8;:10::i;:::-;55859:41;;55949:1;55924:14;55918:28;:32;:115;;;;;;;;;;;;;;;;;55977:14;55993:18;:7;:16;:18::i;:::-;56013:13;55960:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55918:115;55911:122;55760:281;-1:-1:-1;;;55760:281:0:o;55416:108::-;55460:7;55491:25;:15;1017:14;;925:114;55491:25;55484:32;;55416:108;:::o;35038:442::-;-1:-1:-1;;;;;35271:20:0;;10057:10;35271:20;;:60;;-1:-1:-1;35295:36:0;35312:4;10057:10;34320:168;:::i;35295:36::-;35249:160;;;;-1:-1:-1;;;35249:160:0;;16228:2:1;35249:160:0;;;16210:21:1;16267:2;16247:18;;;16240:30;16306:34;16286:18;;;16279:62;-1:-1:-1;;;16357:18:1;;;16350:48;16415:19;;35249:160:0;16026:414:1;35249:160:0;35420:52;35443:4;35449:2;35453:3;35458:7;35467:4;35420:22;:52::i;:::-;35038:442;;;;;:::o;54800:360::-;8298:1;8896:7;;:19;;8888:63;;;;-1:-1:-1;;;8888:63:0;;;;;;;:::i;:::-;8298:1;9029:7;:18;53100:10:::1;53114:9;53100:23;53092:32;;;::::0;::::1;;53395:10:::2;::::0;::::2;;::::0;;::::2;;:18;;:10;:18;53387:27;;;::::0;::::2;;54910:11:::3;;54897:9;:24;;54889:33;;;::::0;::::3;;54955:10;54941:25;::::0;;;:13:::3;:25;::::0;;;;;::::3;;:34;54933:43;;;::::0;::::3;;55011:9;;54995:13;:11;:13::i;:::-;:25;54987:34;;;::::0;::::3;;55048:10;55034:25;::::0;;;:13:::3;:25;::::0;;;;:32;;-1:-1:-1;;55034:32:0::3;55062:4;55034:32;::::0;;55077:27:::3;:15;1136:19:::0;;1154:1;1136:19;;;1047:127;55077:27:::3;55115;55121:10;55133:1;55136::::0;55115:27:::3;;;;;;;;;;;::::0;:5:::3;:27::i;:::-;8254:1:::0;9208:7;:22;54800:360::o;33496:524::-;33652:16;33713:3;:10;33694:8;:15;:29;33686:83;;;;-1:-1:-1;;;33686:83:0;;18581:2:1;33686:83:0;;;18563:21:1;18620:2;18600:18;;;18593:30;18659:34;18639:18;;;18632:62;-1:-1:-1;;;18710:18:1;;;18703:39;18759:19;;33686:83:0;18379:405:1;33686:83:0;33782:30;33829:8;:15;33815:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33815:30:0;;33782:63;;33863:9;33858:122;33882:8;:15;33878:1;:19;33858:122;;;33938:30;33948:8;33957:1;33948:11;;;;;;;;:::i;:::-;;;;;;;33961:3;33965:1;33961:6;;;;;;;;:::i;:::-;;;;;;;33938:9;:30::i;:::-;33919:13;33933:1;33919:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;33899:3;;;:::i;:::-;;;33858:122;;;-1:-1:-1;33999:13:0;33496:524;-1:-1:-1;;;33496:524:0:o;55645:104::-;11379:6;;-1:-1:-1;;;;;11379:6:0;10057:10;11526:23;11518:68;;;;-1:-1:-1;;;11518:68:0;;;;;;;:::i;:::-;55720:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;55645:104:::0;:::o;51129:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11957:103::-;11379:6;;-1:-1:-1;;;;;11379:6:0;10057:10;11526:23;11518:68;;;;-1:-1:-1;;;11518:68:0;;;;;;;:::i;:::-;12022:30:::1;12049:1;12022:18;:30::i;:::-;11957:103::o:0;54248:544::-;8298:1;8896:7;;:19;;8888:63;;;;-1:-1:-1;;;8888:63:0;;;;;;;:::i;:::-;8298:1;9029:7;:18;53100:10:::1;53114:9;53100:23;53092:32;;;::::0;::::1;;53305:6:::2;::::0;::::2;;:14;;:6:::0;:14:::2;53297:23;;;::::0;::::2;;54390:28:::3;::::0;-1:-1:-1;;54407:10:0::3;9006:2:1::0;9002:15;8998:53;54390:28:0::3;::::0;::::3;8986:66:1::0;54365:12:0::3;::::0;9068::1;;54390:28:0::3;;;;;;;;;;;;54380:39;;;;;;54365:54;;54438:52;54457:12;;54438:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;;54471:12:0::3;::::0;;-1:-1:-1;54485:4:0;;-1:-1:-1;54438:18:0::3;:52::i;:::-;54430:79;;;::::0;-1:-1:-1;;;54430:79:0;;17828:2:1;54430:79:0::3;::::0;::::3;17810:21:1::0;17867:2;17847:18;;;17840:30;-1:-1:-1;;;17886:18:1;;;17879:44;17940:18;;54430:79:0::3;17626:338:1::0;54430:79:0::3;54545:10;54528:28;::::0;;;:16:::3;:28;::::0;;;;;::::3;;:37;54520:46;;;::::0;::::3;;54601:9;;54585:13;:11;:13::i;:::-;:25;54577:34;;;::::0;::::3;;54643:7;;54630:9;:20;;54622:29;;;::::0;::::3;;54689:10;54672:28;::::0;;;:16:::3;:28;::::0;;;;:35;;-1:-1:-1;;54672:35:0::3;54703:4;54672:35;::::0;;54718:27:::3;:15;1136:19:::0;;1154:1;1136:19;;;1047:127;54718:27:::3;54756;54762:10;54774:1;54777::::0;54756:27:::3;;;;;;;;;;;::::0;:5:::3;:27::i;:::-;-1:-1:-1::0;;8254:1:0;9208:7;:22;-1:-1:-1;54248:544:0:o;55171:133::-;11379:6;;-1:-1:-1;;;;;11379:6:0;10057:10;11526:23;11518:68;;;;-1:-1:-1;;;11518:68:0;;;;;;;:::i;:::-;55264:32:::1;::::0;-1:-1:-1;;;;;55264:18:0;::::1;::::0;55381:21;55264:32;::::1;;;::::0;::::1;::::0;;;55381:21;55264:18;:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;34093:155:::0;34188:52;10057:10;34221:8;34231;34188:18;:52::i;53444:117::-;11379:6;;-1:-1:-1;;;;;11379:6:0;10057:10;11526:23;11518:68;;;;-1:-1:-1;;;11518:68:0;;;;;;;:::i;:::-;53525:12:::1;:28:::0;53444:117::o;53694:546::-;8298:1;8896:7;;:19;;8888:63;;;;-1:-1:-1;;;8888:63:0;;;;;;;:::i;:::-;8298:1;9029:7;:18;53100:10:::1;53114:9;53100:23;53092:32;;;::::0;::::1;;53305:6:::2;::::0;::::2;;:14;;:6:::0;:14:::2;53297:23;;;::::0;::::2;;53836:28:::3;::::0;-1:-1:-1;;53853:10:0::3;9006:2:1::0;9002:15;8998:53;53836:28:0::3;::::0;::::3;8986:66:1::0;53811:12:0::3;::::0;9068::1;;53836:28:0::3;;;;;;;;;;;;53826:39;;;;;;53811:54;;53884:52;53903:12;;53884:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;;53917:12:0::3;::::0;;-1:-1:-1;53931:4:0;;-1:-1:-1;53884:18:0::3;:52::i;:::-;53876:79;;;::::0;-1:-1:-1;;;53876:79:0;;17828:2:1;53876:79:0::3;::::0;::::3;17810:21:1::0;17867:2;17847:18;;;17840:30;-1:-1:-1;;;17886:18:1;;;17879:44;17940:18;;53876:79:0::3;17626:338:1::0;53876:79:0::3;53991:10;53974:28;::::0;;;:16:::3;:28;::::0;;;;;::::3;;:37;53966:46;;;::::0;::::3;;54047:9;;54031:13;:11;:13::i;:::-;:25;54023:34;;;::::0;::::3;;54089:9;;54076;:22;;54068:31;;;::::0;::::3;53569:117:::0;11379:6;;-1:-1:-1;;;;;11379:6:0;10057:10;11526:23;11518:68;;;;-1:-1:-1;;;11518:68:0;;;;;;;:::i;:::-;53650:12:::1;:28:::0;53569:117::o;51157:37::-;;;;;;;:::i;53152:102::-;11379:6;;-1:-1:-1;;;;;11379:6:0;10057:10;11526:23;11518:68;;;;-1:-1:-1;;;11518:68:0;;;;;;;:::i;:::-;53204:6:::1;:14:::0;;-1:-1:-1;;53229:17:0;53204:14:::1;53229:17;::::0;;53152:102::o;34560:401::-;-1:-1:-1;;;;;34768:20:0;;10057:10;34768:20;;:60;;-1:-1:-1;34792:36:0;34809:4;10057:10;34320:168;:::i;34792:36::-;34746:151;;;;-1:-1:-1;;;34746:151:0;;15412:2:1;34746:151:0;;;15394:21:1;15451:2;15431:18;;;15424:30;15490:34;15470:18;;;15463:62;-1:-1:-1;;;15541:18:1;;;15534:39;15590:19;;34746:151:0;15210:405:1;34746:151:0;34908:45;34926:4;34932:2;34936;34940:6;34948:4;34908:17;:45::i;12215:201::-;11379:6;;-1:-1:-1;;;;;11379:6:0;10057:10;11526:23;11518:68;;;;-1:-1:-1;;;11518:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12304:22:0;::::1;12296:73;;;::::0;-1:-1:-1;;;12296:73:0;;15005:2:1;12296:73:0::1;::::0;::::1;14987:21:1::0;15044:2;15024:18;;;15017:30;15083:34;15063:18;;;15056:62;-1:-1:-1;;;15134:18:1;;;15127:36;15180:19;;12296:73:0::1;14803:402:1::0;12296:73:0::1;12380:28;12399:8;12380:18;:28::i;:::-;12215:201:::0;:::o;1047:127::-;1136:19;;1154:1;1136:19;;;1047:127::o;49665:931::-;-1:-1:-1;;;;;49987:18:0;;49983:160;;50027:9;50022:110;50046:3;:10;50042:1;:14;50022:110;;;50106:7;50114:1;50106:10;;;;;;;;:::i;:::-;;;;;;;50082:12;:20;50095:3;50099:1;50095:6;;;;;;;;:::i;:::-;;;;;;;50082:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;50058:3:0;;-1:-1:-1;50058:3:0;;:::i;:::-;;;50022:110;;;;49983:160;-1:-1:-1;;;;;50159:16:0;;50155:434;;50197:9;50192:386;50216:3;:10;50212:1;:14;50192:386;;;50252:10;50265:3;50269:1;50265:6;;;;;;;;:::i;:::-;;;;;;;50252:19;;50290:14;50307:7;50315:1;50307:10;;;;;;;;:::i;:::-;;;;;;;50290:27;;50336:14;50353:12;:16;50366:2;50353:16;;;;;;;;;;;;50336:33;;50406:6;50396;:16;;50388:69;;;;-1:-1:-1;;;50388:69:0;;17419:2:1;50388:69:0;;;17401:21:1;17458:2;17438:18;;;17431:30;17497:34;17477:18;;;17470:62;-1:-1:-1;;;17548:18:1;;;17541:38;17596:19;;50388:69:0;17217:404:1;50388:69:0;50509:16;;;;:12;:16;;;;;;50528:15;;50509:34;;50228:3;;;:::i;:::-;;;50192:386;;;;50155:434;49665:931;;;;;;:::o;14060:326::-;-1:-1:-1;;;;;14355:19:0;;:23;;;14060:326::o;55535:99::-;55586:13;55619:7;55612:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55535:99;:::o;4674:723::-;4730:13;4951:10;4947:53;;-1:-1:-1;;4978:10:0;;;;;;;;;;;;-1:-1:-1;;;4978:10:0;;;;;4674:723::o;4947:53::-;5025:5;5010:12;5066:78;5073:9;;5066:78;;5099:8;;;;:::i;:::-;;-1:-1:-1;5122:10:0;;-1:-1:-1;5130:2:0;5122:10;;:::i;:::-;;;5066:78;;;5154:19;5186:6;5176:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5176:17:0;;5154:39;;5204:154;5211:10;;5204:154;;5238:11;5248:1;5238:11;;:::i;:::-;;-1:-1:-1;5307:10:0;5315:2;5307:5;:10;:::i;:::-;5294:24;;:2;:24;:::i;:::-;5281:39;;5264:6;5271;5264:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5264:56:0;;;;;;;;-1:-1:-1;5335:11:0;5344:2;5335:11;;:::i;:::-;;;5204:154;;;5382:6;4674:723;-1:-1:-1;;;;4674:723:0:o;37276:1146::-;37503:7;:14;37489:3;:10;:28;37481:81;;;;-1:-1:-1;;;37481:81:0;;18991:2:1;37481:81:0;;;18973:21:1;19030:2;19010:18;;;19003:30;19069:34;19049:18;;;19042:62;-1:-1:-1;;;19120:18:1;;;19113:38;19168:19;;37481:81:0;18789:404:1;37481:81:0;-1:-1:-1;;;;;37581:16:0;;37573:66;;;;-1:-1:-1;;;37573:66:0;;;;;;;:::i;:::-;10057:10;37696:60;10057:10;37727:4;37733:2;37737:3;37742:7;37751:4;37696:20;:60::i;:::-;37774:9;37769:421;37793:3;:10;37789:1;:14;37769:421;;;37825:10;37838:3;37842:1;37838:6;;;;;;;;:::i;:::-;;;;;;;37825:19;;37859:14;37876:7;37884:1;37876:10;;;;;;;;:::i;:::-;;;;;;;;;;;;37903:19;37925:13;;;;;;;;;;-1:-1:-1;;;;;37925:19:0;;;;;;;;;;;;37876:10;;-1:-1:-1;37967:21:0;;;;37959:76;;;;-1:-1:-1;;;37959:76:0;;;;;;;:::i;:::-;38079:9;:13;;;;;;;;;;;-1:-1:-1;;;;;38079:19:0;;;;;;;;;;38101:20;;;38079:42;;38151:17;;;;;;;:27;;38101:20;;38079:9;38151:27;;38101:20;;38151:27;:::i;:::-;;;;;;;;37810:380;;;37805:3;;;;:::i;:::-;;;37769:421;;;;38237:2;-1:-1:-1;;;;;38207:47:0;38231:4;-1:-1:-1;;;;;38207:47:0;38221:8;-1:-1:-1;;;;;38207:47:0;;38241:3;38246:7;38207:47;;;;;;;:::i;:::-;;;;;;;;38339:75;38375:8;38385:4;38391:2;38395:3;38400:7;38409:4;38339:35;:75::i;39740:729::-;-1:-1:-1;;;;;39893:16:0;;39885:62;;;;-1:-1:-1;;;39885:62:0;;19400:2:1;39885:62:0;;;19382:21:1;19439:2;19419:18;;;19412:30;19478:34;19458:18;;;19451:62;-1:-1:-1;;;19529:18:1;;;19522:31;19570:19;;39885:62:0;19198:397:1;39885:62:0;10057:10;39960:16;40025:21;40043:2;40025:17;:21::i;:::-;40002:44;;40057:24;40084:25;40102:6;40084:17;:25::i;:::-;40057:52;;40122:66;40143:8;40161:1;40165:2;40169:3;40174:7;40183:4;40122:20;:66::i;:::-;40201:9;:13;;;;;;;;;;;-1:-1:-1;;;;;40201:17:0;;;;;;;;;:27;;40222:6;;40201:9;:27;;40222:6;;40201:27;:::i;:::-;;;;-1:-1:-1;;40244:52:0;;;20316:25:1;;;20372:2;20357:18;;20350:34;;;-1:-1:-1;;;;;40244:52:0;;;;40277:1;;40244:52;;;;;;20289:18:1;40244:52:0;;;;;;;40387:74;40418:8;40436:1;40440:2;40444;40448:6;40456:4;40387:30;:74::i;12576:191::-;12669:6;;;-1:-1:-1;;;;;12686:17:0;;;-1:-1:-1;;;;;;12686:17:0;;;;;;;12719:40;;12669:6;;;12686:17;12669:6;;12719:40;;12650:16;;12719:40;12639:128;12576:191;:::o;2791:190::-;2916:4;2969;2940:25;2953:5;2960:4;2940:12;:25::i;:::-;:33;;2791:190;-1:-1:-1;;;;2791:190:0:o;44010:331::-;44165:8;-1:-1:-1;;;;;44156:17:0;:5;-1:-1:-1;;;;;44156:17:0;;;44148:71;;;;-1:-1:-1;;;44148:71:0;;18171:2:1;44148:71:0;;;18153:21:1;18210:2;18190:18;;;18183:30;18249:34;18229:18;;;18222:62;-1:-1:-1;;;18300:18:1;;;18293:39;18349:19;;44148:71:0;17969:405:1;44148:71:0;-1:-1:-1;;;;;44230:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;44230:46:0;;;;;;;;;;44292:41;;13103::1;;;44292::0;;13076:18:1;44292:41:0;;;;;;;44010:331;;;:::o;35944:974::-;-1:-1:-1;;;;;36132:16:0;;36124:66;;;;-1:-1:-1;;;36124:66:0;;;;;;;:::i;:::-;10057:10;36203:16;36268:21;36286:2;36268:17;:21::i;:::-;36245:44;;36300:24;36327:25;36345:6;36327:17;:25::i;:::-;36300:52;;36365:60;36386:8;36396:4;36402:2;36406:3;36411:7;36420:4;36365:20;:60::i;:::-;36438:19;36460:13;;;;;;;;;;;-1:-1:-1;;;;;36460:19:0;;;;;;;;;;36498:21;;;;36490:76;;;;-1:-1:-1;;;36490:76:0;;;;;;;:::i;:::-;36602:9;:13;;;;;;;;;;;-1:-1:-1;;;;;36602:19:0;;;;;;;;;;36624:20;;;36602:42;;36666:17;;;;;;;:27;;36624:20;;36602:9;36666:27;;36624:20;;36666:27;:::i;:::-;;;;-1:-1:-1;;36711:46:0;;;20316:25:1;;;20372:2;20357:18;;20350:34;;;-1:-1:-1;;;;;36711:46:0;;;;;;;;;;;;;;20289:18:1;36711:46:0;;;;;;;36842:68;36873:8;36883:4;36889:2;36893;36897:6;36905:4;36842:30;:68::i;:::-;36113:805;;;;35944:974;;;;;:::o;56049:291::-;56266:66;56293:8;56303:4;56309:2;56313:3;56318:7;56327:4;56266:26;:66::i;47453:813::-;-1:-1:-1;;;;;47693:13:0;;14355:19;:23;47689:570;;47729:79;;-1:-1:-1;;;47729:79:0;;-1:-1:-1;;;;;47729:43:0;;;;;:79;;47773:8;;47783:4;;47789:3;;47794:7;;47803:4;;47729:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47729:79:0;;;;;;;;-1:-1:-1;;47729:79:0;;;;;;;;;;;;:::i;:::-;;;47725:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;48121:6;48114:14;;-1:-1:-1;;;48114:14:0;;;;;;;;:::i;47725:523::-;;;48170:62;;-1:-1:-1;;;48170:62:0;;13763:2:1;48170:62:0;;;13745:21:1;13802:2;13782:18;;;13775:30;13841:34;13821:18;;;13814:62;-1:-1:-1;;;13892:18:1;;;13885:50;13952:19;;48170:62:0;13561:416:1;47725:523:0;-1:-1:-1;;;;;;47890:60:0;;-1:-1:-1;;;47890:60:0;47886:159;;47975:50;;-1:-1:-1;;;47975:50:0;;;;;;;:::i;48274:198::-;48394:16;;;48408:1;48394:16;;;;;;;;;48340;;48369:22;;48394:16;;;;;;;;;;;;-1:-1:-1;48394:16:0;48369:41;;48432:7;48421:5;48427:1;48421:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;48459:5;48274:198;-1:-1:-1;;48274:198:0:o;46701:744::-;-1:-1:-1;;;;;46916:13:0;;14355:19;:23;46912:526;;46952:72;;-1:-1:-1;;;46952:72:0;;-1:-1:-1;;;;;46952:38:0;;;;;:72;;46991:8;;47001:4;;47007:2;;47011:6;;47019:4;;46952:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46952:72:0;;;;;;;;-1:-1:-1;;46952:72:0;;;;;;;;;;;;:::i;:::-;;;46948:479;;;;:::i;:::-;-1:-1:-1;;;;;;47074:55:0;;-1:-1:-1;;;47074:55:0;47070:154;;47154:50;;-1:-1:-1;;;47154:50:0;;;;;;;:::i;3342:675::-;3425:7;3468:4;3425:7;3483:497;3507:5;:12;3503:1;:16;3483:497;;;3541:20;3564:5;3570:1;3564:8;;;;;;;;:::i;:::-;;;;;;;3541:31;;3607:12;3591;:28;3587:382;;4093:13;4143:15;;;4179:4;4172:15;;;4226:4;4210:21;;3719:57;;3587:382;;;4093:13;4143:15;;;4179:4;4172:15;;;4226:4;4210:21;;3896:57;;3587:382;-1:-1:-1;3521:3:0;;;;:::i;:::-;;;;3483:497;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:735::-;541:5;594:3;587:4;579:6;575:17;571:27;561:55;;612:1;609;602:12;561:55;648:6;635:20;674:4;697:43;737:2;697:43;:::i;:::-;769:2;763:9;781:31;809:2;801:6;781:31;:::i;:::-;847:18;;;881:15;;;;-1:-1:-1;916:15:1;;;966:1;962:10;;;950:23;;946:32;;943:41;-1:-1:-1;940:61:1;;;997:1;994;987:12;940:61;1019:1;1029:163;1043:2;1040:1;1037:9;1029:163;;;1100:17;;1088:30;;1138:12;;;;1170;;;;1061:1;1054:9;1029:163;;;-1:-1:-1;1210:6:1;;487:735;-1:-1:-1;;;;;;;487:735:1:o;1227:220::-;1269:5;1322:3;1315:4;1307:6;1303:17;1299:27;1289:55;;1340:1;1337;1330:12;1289:55;1362:79;1437:3;1428:6;1415:20;1408:4;1400:6;1396:17;1362:79;:::i;1452:247::-;1511:6;1564:2;1552:9;1543:7;1539:23;1535:32;1532:52;;;1580:1;1577;1570:12;1532:52;1619:9;1606:23;1638:31;1663:5;1638:31;:::i;1964:388::-;2032:6;2040;2093:2;2081:9;2072:7;2068:23;2064:32;2061:52;;;2109:1;2106;2099:12;2061:52;2148:9;2135:23;2167:31;2192:5;2167:31;:::i;:::-;2217:5;-1:-1:-1;2274:2:1;2259:18;;2246:32;2287:33;2246:32;2287:33;:::i;:::-;2339:7;2329:17;;;1964:388;;;;;:::o;2357:1071::-;2511:6;2519;2527;2535;2543;2596:3;2584:9;2575:7;2571:23;2567:33;2564:53;;;2613:1;2610;2603:12;2564:53;2652:9;2639:23;2671:31;2696:5;2671:31;:::i;:::-;2721:5;-1:-1:-1;2778:2:1;2763:18;;2750:32;2791:33;2750:32;2791:33;:::i;:::-;2843:7;-1:-1:-1;2901:2:1;2886:18;;2873:32;2924:18;2954:14;;;2951:34;;;2981:1;2978;2971:12;2951:34;3004:61;3057:7;3048:6;3037:9;3033:22;3004:61;:::i;:::-;2994:71;;3118:2;3107:9;3103:18;3090:32;3074:48;;3147:2;3137:8;3134:16;3131:36;;;3163:1;3160;3153:12;3131:36;3186:63;3241:7;3230:8;3219:9;3215:24;3186:63;:::i;:::-;3176:73;;3302:3;3291:9;3287:19;3274:33;3258:49;;3332:2;3322:8;3319:16;3316:36;;;3348:1;3345;3338:12;3316:36;;3371:51;3414:7;3403:8;3392:9;3388:24;3371:51;:::i;:::-;3361:61;;;2357:1071;;;;;;;;:::o;3433:734::-;3537:6;3545;3553;3561;3569;3622:3;3610:9;3601:7;3597:23;3593:33;3590:53;;;3639:1;3636;3629:12;3590:53;3678:9;3665:23;3697:31;3722:5;3697:31;:::i;:::-;3747:5;-1:-1:-1;3804:2:1;3789:18;;3776:32;3817:33;3776:32;3817:33;:::i;:::-;3869:7;-1:-1:-1;3923:2:1;3908:18;;3895:32;;-1:-1:-1;3974:2:1;3959:18;;3946:32;;-1:-1:-1;4029:3:1;4014:19;;4001:33;4057:18;4046:30;;4043:50;;;4089:1;4086;4079:12;4043:50;4112:49;4153:7;4144:6;4133:9;4129:22;4112:49;:::i;4172:416::-;4237:6;4245;4298:2;4286:9;4277:7;4273:23;4269:32;4266:52;;;4314:1;4311;4304:12;4266:52;4353:9;4340:23;4372:31;4397:5;4372:31;:::i;:::-;4422:5;-1:-1:-1;4479:2:1;4464:18;;4451:32;4521:15;;4514:23;4502:36;;4492:64;;4552:1;4549;4542:12;4593:315;4661:6;4669;4722:2;4710:9;4701:7;4697:23;4693:32;4690:52;;;4738:1;4735;4728:12;4690:52;4777:9;4764:23;4796:31;4821:5;4796:31;:::i;:::-;4846:5;4898:2;4883:18;;;;4870:32;;-1:-1:-1;;;4593:315:1:o;4913:1288::-;5031:6;5039;5092:2;5080:9;5071:7;5067:23;5063:32;5060:52;;;5108:1;5105;5098:12;5060:52;5148:9;5135:23;5177:18;5218:2;5210:6;5207:14;5204:34;;;5234:1;5231;5224:12;5204:34;5272:6;5261:9;5257:22;5247:32;;5317:7;5310:4;5306:2;5302:13;5298:27;5288:55;;5339:1;5336;5329:12;5288:55;5375:2;5362:16;5397:4;5420:43;5460:2;5420:43;:::i;:::-;5492:2;5486:9;5504:31;5532:2;5524:6;5504:31;:::i;:::-;5570:18;;;5604:15;;;;-1:-1:-1;5639:11:1;;;5681:1;5677:10;;;5669:19;;5665:28;;5662:41;-1:-1:-1;5659:61:1;;;5716:1;5713;5706:12;5659:61;5738:1;5729:10;;5748:238;5762:2;5759:1;5756:9;5748:238;;;5833:3;5820:17;5850:31;5875:5;5850:31;:::i;:::-;5894:18;;5780:1;5773:9;;;;;5932:12;;;;5964;;5748:238;;;-1:-1:-1;6005:6:1;-1:-1:-1;;6049:18:1;;6036:32;;-1:-1:-1;;6080:16:1;;;6077:36;;;6109:1;6106;6099:12;6077:36;;6132:63;6187:7;6176:8;6165:9;6161:24;6132:63;:::i;:::-;6122:73;;;4913:1288;;;;;:::o;6206:615::-;6292:6;6300;6353:2;6341:9;6332:7;6328:23;6324:32;6321:52;;;6369:1;6366;6359:12;6321:52;6409:9;6396:23;6438:18;6479:2;6471:6;6468:14;6465:34;;;6495:1;6492;6485:12;6465:34;6533:6;6522:9;6518:22;6508:32;;6578:7;6571:4;6567:2;6563:13;6559:27;6549:55;;6600:1;6597;6590:12;6549:55;6640:2;6627:16;6666:2;6658:6;6655:14;6652:34;;;6682:1;6679;6672:12;6652:34;6735:7;6730:2;6720:6;6717:1;6713:14;6709:2;6705:23;6701:32;6698:45;6695:65;;;6756:1;6753;6746:12;6695:65;6787:2;6779:11;;;;;6809:6;;-1:-1:-1;6206:615:1;;-1:-1:-1;;;;6206:615:1:o;6826:180::-;6885:6;6938:2;6926:9;6917:7;6913:23;6909:32;6906:52;;;6954:1;6951;6944:12;6906:52;-1:-1:-1;6977:23:1;;6826:180;-1:-1:-1;6826:180:1:o;7011:245::-;7069:6;7122:2;7110:9;7101:7;7097:23;7093:32;7090:52;;;7138:1;7135;7128:12;7090:52;7177:9;7164:23;7196:30;7220:5;7196:30;:::i;7261:249::-;7330:6;7383:2;7371:9;7362:7;7358:23;7354:32;7351:52;;;7399:1;7396;7389:12;7351:52;7431:9;7425:16;7450:30;7474:5;7450:30;:::i;7515:450::-;7584:6;7637:2;7625:9;7616:7;7612:23;7608:32;7605:52;;;7653:1;7650;7643:12;7605:52;7693:9;7680:23;7726:18;7718:6;7715:30;7712:50;;;7758:1;7755;7748:12;7712:50;7781:22;;7834:4;7826:13;;7822:27;-1:-1:-1;7812:55:1;;7863:1;7860;7853:12;7812:55;7886:73;7951:7;7946:2;7933:16;7928:2;7924;7920:11;7886:73;:::i;8155:435::-;8208:3;8246:5;8240:12;8273:6;8268:3;8261:19;8299:4;8328:2;8323:3;8319:12;8312:19;;8365:2;8358:5;8354:14;8386:1;8396:169;8410:6;8407:1;8404:13;8396:169;;;8471:13;;8459:26;;8505:12;;;;8540:15;;;;8432:1;8425:9;8396:169;;;-1:-1:-1;8581:3:1;;8155:435;-1:-1:-1;;;;;8155:435:1:o;8595:257::-;8636:3;8674:5;8668:12;8701:6;8696:3;8689:19;8717:63;8773:6;8766:4;8761:3;8757:14;8750:4;8743:5;8739:16;8717:63;:::i;:::-;8834:2;8813:15;-1:-1:-1;;8809:29:1;8800:39;;;;8841:4;8796:50;;8595:257;-1:-1:-1;;8595:257:1:o;9091:1527::-;9315:3;9353:6;9347:13;9379:4;9392:51;9436:6;9431:3;9426:2;9418:6;9414:15;9392:51;:::i;:::-;9506:13;;9465:16;;;;9528:55;9506:13;9465:16;9550:15;;;9528:55;:::i;:::-;9672:13;;9605:20;;;9645:1;;9732;9754:18;;;;9807;;;;9834:93;;9912:4;9902:8;9898:19;9886:31;;9834:93;9975:2;9965:8;9962:16;9942:18;9939:40;9936:167;;;-1:-1:-1;;;10002:33:1;;10058:4;10055:1;10048:15;10088:4;10009:3;10076:17;9936:167;10119:18;10146:110;;;;10270:1;10265:328;;;;10112:481;;10146:110;-1:-1:-1;;10181:24:1;;10167:39;;10226:20;;;;-1:-1:-1;10146:110:1;;10265:328;20656:1;20649:14;;;20693:4;20680:18;;10360:1;10374:169;10388:8;10385:1;10382:15;10374:169;;;10470:14;;10455:13;;;10448:37;10513:16;;;;10405:10;;10374:169;;;10378:3;;10574:8;10567:5;10563:20;10556:27;;10112:481;-1:-1:-1;10609:3:1;;9091:1527;-1:-1:-1;;;;;;;;;;;9091:1527:1:o;10831:826::-;-1:-1:-1;;;;;11228:15:1;;;11210:34;;11280:15;;11275:2;11260:18;;11253:43;11190:3;11327:2;11312:18;;11305:31;;;11153:4;;11359:57;;11396:19;;11388:6;11359:57;:::i;:::-;11464:9;11456:6;11452:22;11447:2;11436:9;11432:18;11425:50;11498:44;11535:6;11527;11498:44;:::i;:::-;11484:58;;11591:9;11583:6;11579:22;11573:3;11562:9;11558:19;11551:51;11619:32;11644:6;11636;11619:32;:::i;:::-;11611:40;10831:826;-1:-1:-1;;;;;;;;10831:826:1:o;11662:560::-;-1:-1:-1;;;;;11959:15:1;;;11941:34;;12011:15;;12006:2;11991:18;;11984:43;12058:2;12043:18;;12036:34;;;12101:2;12086:18;;12079:34;;;11921:3;12144;12129:19;;12122:32;;;11884:4;;12171:45;;12196:19;;12188:6;12171:45;:::i;:::-;12163:53;11662:560;-1:-1:-1;;;;;;;11662:560:1:o;12227:261::-;12406:2;12395:9;12388:21;12369:4;12426:56;12478:2;12467:9;12463:18;12455:6;12426:56;:::i;12493:465::-;12750:2;12739:9;12732:21;12713:4;12776:56;12828:2;12817:9;12813:18;12805:6;12776:56;:::i;:::-;12880:9;12872:6;12868:22;12863:2;12852:9;12848:18;12841:50;12908:44;12945:6;12937;12908:44;:::i;:::-;12900:52;12493:465;-1:-1:-1;;;;;12493:465:1:o;13337:219::-;13486:2;13475:9;13468:21;13449:4;13506:44;13546:2;13535:9;13531:18;13523:6;13506:44;:::i;13982:404::-;14184:2;14166:21;;;14223:2;14203:18;;;14196:30;14262:34;14257:2;14242:18;;14235:62;-1:-1:-1;;;14328:2:1;14313:18;;14306:38;14376:3;14361:19;;13982:404::o;15620:401::-;15822:2;15804:21;;;15861:2;15841:18;;;15834:30;15900:34;15895:2;15880:18;;15873:62;-1:-1:-1;;;15966:2:1;15951:18;;15944:35;16011:3;15996:19;;15620:401::o;16445:406::-;16647:2;16629:21;;;16686:2;16666:18;;;16659:30;16725:34;16720:2;16705:18;;16698:62;-1:-1:-1;;;16791:2:1;16776:18;;16769:40;16841:3;16826:19;;16445:406::o;16856:356::-;17058:2;17040:21;;;17077:18;;;17070:30;17136:34;17131:2;17116:18;;17109:62;17203:2;17188:18;;16856:356::o;19600:355::-;19802:2;19784:21;;;19841:2;19821:18;;;19814:30;19880:33;19875:2;19860:18;;19853:61;19946:2;19931:18;;19600:355::o;20395:183::-;20455:4;20488:18;20480:6;20477:30;20474:56;;;20510:18;;:::i;:::-;-1:-1:-1;20555:1:1;20551:14;20567:4;20547:25;;20395:183::o;20709:128::-;20749:3;20780:1;20776:6;20773:1;20770:13;20767:39;;;20786:18;;:::i;:::-;-1:-1:-1;20822:9:1;;20709:128::o;20842:120::-;20882:1;20908;20898:35;;20913:18;;:::i;:::-;-1:-1:-1;20947:9:1;;20842:120::o;20967:125::-;21007:4;21035:1;21032;21029:8;21026:34;;;21040:18;;:::i;:::-;-1:-1:-1;21077:9:1;;20967:125::o;21097:258::-;21169:1;21179:113;21193:6;21190:1;21187:13;21179:113;;;21269:11;;;21263:18;21250:11;;;21243:39;21215:2;21208:10;21179:113;;;21310:6;21307:1;21304:13;21301:48;;;21345:1;21336:6;21331:3;21327:16;21320:27;21301:48;;21097:258;;;:::o;21360:380::-;21439:1;21435:12;;;;21482;;;21503:61;;21557:4;21549:6;21545:17;21535:27;;21503:61;21610:2;21602:6;21599:14;21579:18;21576:38;21573:161;;;21656:10;21651:3;21647:20;21644:1;21637:31;21691:4;21688:1;21681:15;21719:4;21716:1;21709:15;21573:161;;21360:380;;;:::o;21745:249::-;21855:2;21836:13;;-1:-1:-1;;21832:27:1;21820:40;;21890:18;21875:34;;21911:22;;;21872:62;21869:88;;;21937:18;;:::i;:::-;21973:2;21966:22;-1:-1:-1;;21745:249:1:o;21999:135::-;22038:3;-1:-1:-1;;22059:17:1;;22056:43;;;22079:18;;:::i;:::-;-1:-1:-1;22126:1:1;22115:13;;21999:135::o;22139:112::-;22171:1;22197;22187:35;;22202:18;;:::i;:::-;-1:-1:-1;22236:9:1;;22139:112::o;22256:127::-;22317:10;22312:3;22308:20;22305:1;22298:31;22348:4;22345:1;22338:15;22372:4;22369:1;22362:15;22388:127;22449:10;22444:3;22440:20;22437:1;22430:31;22480:4;22477:1;22470:15;22504:4;22501:1;22494:15;22520:127;22581:10;22576:3;22572:20;22569:1;22562:31;22612:4;22609:1;22602:15;22636:4;22633:1;22626:15;22652:127;22713:10;22708:3;22704:20;22701:1;22694:31;22744:4;22741:1;22734:15;22768:4;22765:1;22758:15;22784:179;22819:3;22861:1;22843:16;22840:23;22837:120;;;22907:1;22904;22901;22886:23;-1:-1:-1;22944:1:1;22938:8;22933:3;22929:18;22837:120;22784:179;:::o;22968:671::-;23007:3;23049:4;23031:16;23028:26;23025:39;;;22968:671;:::o;23025:39::-;23091:2;23085:9;-1:-1:-1;;23156:16:1;23152:25;;23149:1;23085:9;23128:50;23207:4;23201:11;23231:16;23266:18;23337:2;23330:4;23322:6;23318:17;23315:25;23310:2;23302:6;23299:14;23296:45;23293:58;;;23344:5;;;;;22968:671;:::o;23293:58::-;23381:6;23375:4;23371:17;23360:28;;23417:3;23411:10;23444:2;23436:6;23433:14;23430:27;;;23450:5;;;;;;22968:671;:::o;23430:27::-;23534:2;23515:16;23509:4;23505:27;23501:36;23494:4;23485:6;23480:3;23476:16;23472:27;23469:69;23466:82;;;23541:5;;;;;;22968:671;:::o;23466:82::-;23557:57;23608:4;23599:6;23591;23587:19;23583:30;23577:4;23557:57;:::i;:::-;-1:-1:-1;23630:3:1;;22968:671;-1:-1:-1;;;;;22968:671:1:o;23644:131::-;-1:-1:-1;;;;;23719:31:1;;23709:42;;23699:70;;23765:1;23762;23755:12;23780:131;-1:-1:-1;;;;;;23854:32:1;;23844:43;;23834:71;;23901:1;23898;23891:12

Swarm Source

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