ETH Price: $3,317.92 (-2.11%)
 

Overview

Max Total Supply

2,429,676,485.5886223635 PAWN

Holders

6

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
67,955.889495502025789139 PAWN

Value
$0.00
0xa1011483dd03626f8c718e5a60e4070210e9018d
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
PIXEL_PAWN

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-17
*/

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


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


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

pragma solidity ^0.8.0;

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

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases 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: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts v4.4.1 (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.
        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. 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: @openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol


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

pragma solidity ^0.8.0;



/**
 * @dev _Available since v3.1._
 */
abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }
}

// File: @openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol


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

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
contract ERC1155Holder is ERC1155Receiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] memory,
        uint256[] memory,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155BatchReceived.selector;
    }
}

// File: @openzeppelin/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: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


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

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: contracts/pixelPawn.sol

//  SPDX-License-Identifier: MIT
pragma solidity 0.8.7;









contract PIXEL_PAWN is ERC20, IERC721Receiver, ERC1155Holder, Ownable, ReentrancyGuard  {
    event SoldToShop721(uint256 indexed txId, address indexed nftAddress, uint256 tokenId, uint256 value);
    event BoughtFromShop721(uint256 indexed txId, address indexed nftAddress, uint256 tokenId, uint256 value);

    event SoldToShop1155(uint256 indexed txId, address indexed nftAddress, uint256 indexed tokenId, uint256 value);
    event BoughtFromShop1155(uint256 indexed txId, address indexed nftAddress, uint256 indexed tokenId, uint256 value);

    struct Status721{
      uint256 reserves; // reserves for the ERC721
    }

    struct Status1155{
      mapping(uint256 => uint256) reserves; // reserves for the ERC1155 specific tokenId
    }

    mapping(address => Status721) _status721;
    mapping(address => Status1155) _status1155;

    mapping(address => bool) public _claimed;

    bytes32 constant public root = 0xb861f2ff2bbffd05e4a8852c7a8a367d91e6117b0cfeb4c76679e9ffe109e4e7;//bytes32(0);

    uint256 constant _reserveSaleMultiplier = 100;
    uint256 constant _reserveDerpMultiplier = 1;
    uint256 constant _reserveBurnMultiplier = 1;
    uint256 constant _reserveAvimeMultiplier = 1;
    uint256 constant _reserveProfitMultiplier = 5;
    uint256 constant _reserveBuyMultiplier = 108;
    uint256 constant _reserveDivisor = 2500;

    address constant _derpAddress = 0xF7a26a24eb5dd146Ea00D7fC9dC4Ec1c474eeF03; //DerpDAO Address
    address constant _avimeFusionAddress = 0xd92Cc219AcF2199DeadAC2b965B35B9e84FA7F0A; // Avime Fusion Address
    uint256 _txId = 1;
    uint256 _claimTotal = 0;
    uint8 _lockGeneration = 0;

    string constant _reserveFailed = "PAWN Transfer Failed";
    string constant _priceTooHigh = "Buy price higher than max price";
    string constant _priceTooLow = "Sell price lower than min price";

    uint256 constant initialSupply = 1*(10**27);

    constructor() ERC20("Pixel Pawn", "PAWN") {
        _mint(msg.sender, initialSupply);
    }

    receive() external payable {}
    fallback() external payable {}

    function deposit() public payable {

    }

    function withdraw(uint256 amount) public onlyOwner {
      (bool success, ) = payable(msg.sender).call{value: amount}("");
      require(success);
    }

    function lockGeneration(uint8 lock) public onlyOwner{
      require(lock == 1);
      _lockGeneration = 1;
    }

    function get721Reserves(address contractAddress) public view  returns(uint256){
      return _status721[contractAddress].reserves;
    }

    function get721BuyPrice(address contractAddress) public view returns(uint256){
      return _status721[contractAddress].reserves*_reserveBuyMultiplier/_reserveDivisor;
    }

    function get721SellPrice(address contractAddress) public view returns(uint256){
      return _status721[contractAddress].reserves*_reserveSaleMultiplier/_reserveDivisor;
    }

    function get1155Reserves(address contractAddress, uint256 tokenId) public view returns(uint256){
      return _status1155[contractAddress].reserves[tokenId];
    }

    function get1155BuyPrice(address contractAddress, uint256 tokenId) public view returns(uint256){
      return _status1155[contractAddress].reserves[tokenId]*_reserveBuyMultiplier/_reserveDivisor;
    }

    function get1155SellPrice(address contractAddress, uint256 tokenId) public view returns(uint256){
      return _status1155[contractAddress].reserves[tokenId]*_reserveSaleMultiplier/_reserveDivisor;
    }

    function generate721Reserves(address[] calldata contractAddresses, uint256[] calldata amount) public onlyOwner{
      require(_lockGeneration == 0, "L");
      uint256 totalAmount = 0;
      uint i = 0;
      for(i=0; i<contractAddresses.length; i++){
        totalAmount += amount[i];
        _status721[contractAddresses[i]].reserves+= amount[i];
      }
      _mint(address(this), totalAmount);
    }

    function generate1155Reserves(address[] calldata contractAddresses, uint256[] calldata tokenIds, uint256[] calldata amount) public onlyOwner{
      require(_lockGeneration == 0, "L");
      uint256 totalAmount = 0;
      uint i = 0;
      for(i=0; i<contractAddresses.length; i++){
        totalAmount += amount[i];
        _status1155[contractAddresses[i]].reserves[tokenIds[i]]+= amount[i];
      }
      _mint(address(this), totalAmount);
    }

    function add721Reserve(address contractAddress, uint256 amount) public returns (bool){
      _transfer(msg.sender, address(this), amount);
      _status721[contractAddress].reserves += amount;
      return true;
    }

    function add1155Reserve(address contractAddress, uint256 tokenId, uint256 amount) public returns (bool){
      _transfer(msg.sender, address(this), amount);
      _status1155[contractAddress].reserves[tokenId] += amount;
      return true;
    }


    function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) public virtual nonReentrant override returns (bytes4) {
        uint256 salePrice = _status721[msg.sender].reserves*_reserveSaleMultiplier/_reserveDivisor;
        uint256 minPrice = abi.decode(data, (uint256));
        require(salePrice >= minPrice, _priceTooLow);
        _status721[msg.sender].reserves -= salePrice;
        _transfer(address(this), from , salePrice);
        emit SoldToShop721(_txId, msg.sender, tokenId, salePrice);
        _txId +=1;
        return this.onERC721Received.selector;
    }


    function onERC1155Received(address operator, address from, uint256 tokenId, uint256 value, bytes calldata data) public virtual nonReentrant override returns (bytes4) {
        require(value == 1, "One token at a time!");
        uint256 salePrice = _status1155[msg.sender].reserves[tokenId]*_reserveSaleMultiplier/_reserveDivisor;
        uint256 minPrice = abi.decode(data, (uint256));
        require(salePrice >= minPrice, _priceTooLow);
        _status1155[msg.sender].reserves[tokenId] -= salePrice;
        _transfer(address(this), from , salePrice);
        emit SoldToShop1155(_txId, msg.sender, tokenId , salePrice);
        _txId +=1;
        return this.onERC1155Received.selector;
    }

    function buy721(address nftAddress, uint256 tokenId, uint256 maxPrice) public nonReentrant {
        uint256 buyPrice = _status721[nftAddress].reserves*_reserveBuyMultiplier/_reserveDivisor;
        require(buyPrice <= maxPrice, _priceTooHigh);
        _transfer(msg.sender, address(this), buyPrice);
        _status721[_derpAddress].reserves += _status721[nftAddress].reserves*(_reserveDerpMultiplier)/_reserveDivisor;
        _status721[_avimeFusionAddress].reserves += _status721[nftAddress].reserves*(_reserveAvimeMultiplier)/_reserveDivisor;
        _burn(address(this),_status721[nftAddress].reserves*(_reserveBurnMultiplier)/_reserveDivisor);
        _status721[nftAddress].reserves += _status721[nftAddress].reserves*(_reserveSaleMultiplier+_reserveProfitMultiplier)/_reserveDivisor;
        IERC721(nftAddress).safeTransferFrom(address(this), msg.sender ,tokenId);
        emit BoughtFromShop721(_txId, nftAddress, tokenId, buyPrice);
        _txId +=1;
    }

    function buy1155(address nftAddress, uint256 tokenId, uint256 maxPrice) public nonReentrant{
        uint256 buyPrice = _status1155[nftAddress].reserves[tokenId]*_reserveBuyMultiplier/_reserveDivisor;
        require(buyPrice <= maxPrice, _priceTooHigh);
        _transfer(msg.sender, address(this), buyPrice);
        _status721[_derpAddress].reserves += _status1155[nftAddress].reserves[tokenId]*(_reserveDerpMultiplier)/_reserveDivisor;
        _status721[_avimeFusionAddress].reserves += _status1155[nftAddress].reserves[tokenId]*(_reserveAvimeMultiplier)/_reserveDivisor;
        _burn(address(this), _status1155[nftAddress].reserves[tokenId]*(_reserveBurnMultiplier)/_reserveDivisor);
        _status1155[nftAddress].reserves[tokenId] += _status1155[nftAddress].reserves[tokenId]*(_reserveSaleMultiplier+_reserveProfitMultiplier)/_reserveDivisor;
        IERC1155(nftAddress).safeTransferFrom(address(this), msg.sender, tokenId, 1,"");
        emit BoughtFromShop1155(_txId, nftAddress, tokenId, buyPrice);
        _txId +=1;
    }

    function claim(uint256 amount, bytes32[] calldata proof) external {
        require(block.number < 14612300, "Claim has ended"); // apr 17 2022
        require(_claimed[msg.sender] == false, "Already Claimed!");
        _claimed[msg.sender] = true;
        require(_verify(_leaf(msg.sender, amount), proof), "Invalid proof");
        amount = amount*10**18; // add the zeros
        if(_claimTotal < 10000)
          _mint(msg.sender, amount*125/100);
        else
          _mint(msg.sender, amount);
        _claimTotal +=1;
    }

    function _leaf(address account, uint256 amount) internal pure returns (bytes32){
        return keccak256(abi.encodePacked(account, amount));
    }

    function _verify(bytes32 leaf, bytes32[] memory proof) internal pure returns (bool){
        return MerkleProof.verify(proof, root, leaf);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":true,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BoughtFromShop1155","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":true,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BoughtFromShop721","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":"uint256","name":"txId","type":"uint256"},{"indexed":true,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SoldToShop1155","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":true,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SoldToShop721","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"add1155Reserve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"add721Reserve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"name":"buy1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"name":"buy721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"contractAddresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"generate1155Reserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"contractAddresses","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"generate721Reserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"get1155BuyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"get1155Reserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"get1155SellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"get721BuyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"get721Reserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"get721SellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"lock","type":"uint8"}],"name":"lockGeneration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600a556000600b55600c805460ff191690553480156200002557600080fd5b50604080518082018252600a8152692834bc32b6102830bbb760b11b6020808301918252835180850190945260048452632820aba760e11b908401528151919291620000749160039162000208565b5080516200008a90600490602084019062000208565b505050620000a7620000a1620000ca60201b60201c565b620000ce565b6001600655620000c4336b033b2e3c9fd0803ce800000062000120565b62000312565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200017b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200018f9190620002ae565b90915550506001600160a01b03821660009081526020819052604081208054839290620001be908490620002ae565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200021690620002d5565b90600052602060002090601f0160209004810192826200023a576000855562000285565b82601f106200025557805160ff191683800117855562000285565b8280016001018555821562000285579182015b828111156200028557825182559160200191906001019062000268565b506200029392915062000297565b5090565b5b8082111562000293576000815560010162000298565b60008219821115620002d057634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620002ea57607f821691505b602082108114156200030c57634e487b7160e01b600052602260045260246000fd5b50919050565b61293680620003226000396000f3fe6080604052600436106101fb5760003560e01c80639b0941bd1161010c578063dd896a1c1161009a578063e8e11fd51161006c578063e8e11fd514610672578063ebf0c71714610692578063f23a6e61146106c6578063f2fde38b146106e6578063f4d2098a1461070657005b8063dd896a1c146105e2578063df5a19ac14610612578063e6371c9214610632578063e72ebcc81461065257005b8063b3e16626116100de578063b3e166261461051a578063b81809ce14610550578063bc197c8114610570578063d0e30db014610202578063dd62ed3e1461059c57005b80639b0941bd1461049a578063a457c2d7146104ba578063a9059cbb146104da578063ab820ec7146104fa57005b80632f52ebb7116101895780636502feb21161015b5780636502feb2146103f257806370a0823114610412578063715018a6146104485780638da5cb5b1461045d57806395d89b411461048557005b80632f52ebb714610376578063313ce5671461039657806339509351146103b25780635eced2c5146103d257005b806318160ddd116101cd57806318160ddd146102b45780631c8bb536146102d357806323b872dd146103165780632aae5a30146103365780632e1a7d4d1461035657005b806301ffc9a71461020457806306fdde0314610239578063095ea7b31461025b578063150b7a021461027b57005b3661020257005b005b34801561021057600080fd5b5061022461021f366004612654565b610726565b60405190151581526020015b60405180910390f35b34801561024557600080fd5b5061024e61075d565b6040516102309190612706565b34801561026757600080fd5b50610224610276366004612503565b6107ef565b34801561028757600080fd5b5061029b61029636600461241c565b610805565b6040516001600160e01b03199091168152602001610230565b3480156102c057600080fd5b506002545b604051908152602001610230565b3480156102df57600080fd5b506102c56102ee366004612503565b6001600160a01b03919091166000908152600860209081526040808320938352929052205490565b34801561032257600080fd5b506102246103313660046123e0565b61096d565b34801561034257600080fd5b5061020261035136600461252d565b610a17565b34801561036257600080fd5b5061020261037136600461267e565b610db6565b34801561038257600080fd5b50610202610391366004612697565b610e39565b3480156103a257600080fd5b5060405160128152602001610230565b3480156103be57600080fd5b506102246103cd366004612503565b61101b565b3480156103de57600080fd5b506102026103ed366004612560565b611057565b3480156103fe57600080fd5b506102c561040d366004612503565b61118a565b34801561041e57600080fd5b506102c561042d366004612292565b6001600160a01b031660009081526020819052604090205490565b34801561045457600080fd5b506102026111cf565b34801561046957600080fd5b506005546040516001600160a01b039091168152602001610230565b34801561049157600080fd5b5061024e611205565b3480156104a657600080fd5b506102c56104b5366004612292565b611214565b3480156104c657600080fd5b506102246104d5366004612503565b611247565b3480156104e657600080fd5b506102246104f5366004612503565b6112e0565b34801561050657600080fd5b5061020261051536600461252d565b6112ed565b34801561052657600080fd5b506102c5610535366004612292565b6001600160a01b031660009081526007602052604090205490565b34801561055c57600080fd5b5061020261056b3660046126e3565b61161e565b34801561057c57600080fd5b5061029b61058b3660046122e0565b63bc197c8160e01b95945050505050565b3480156105a857600080fd5b506102c56105b73660046122ad565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105ee57600080fd5b506102246105fd366004612292565b60096020526000908152604090205460ff1681565b34801561061e57600080fd5b5061022461062d366004612503565b611668565b34801561063e57600080fd5b506102c561064d366004612503565b6116ab565b34801561065e57600080fd5b506102c561066d366004612292565b6116df565b34801561067e57600080fd5b5061020261068d3660046125cc565b611708565b34801561069e57600080fd5b506102c57fb861f2ff2bbffd05e4a8852c7a8a367d91e6117b0cfeb4c76679e9ffe109e4e781565b3480156106d257600080fd5b5061029b6106e136600461248b565b611866565b3480156106f257600080fd5b50610202610701366004612292565b611a1e565b34801561071257600080fd5b5061022461072136600461252d565b611ab9565b60006001600160e01b03198216630271189760e51b148061075757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461076c90612868565b80601f016020809104026020016040519081016040528092919081815260200182805461079890612868565b80156107e55780601f106107ba576101008083540402835291602001916107e5565b820191906000526020600020905b8154815290600101906020018083116107c857829003601f168201915b5050505050905090565b60006107fc338484611b08565b50600192915050565b6000600260065414156108335760405162461bcd60e51b815260040161082a90612790565b60405180910390fd5b6002600655336000908152600760205260408120546109c49061085890606490612832565b6108629190612810565b905060006108728486018661267e565b9050808210156040518060400160405280601f81526020017f53656c6c207072696365206c6f776572207468616e206d696e20707269636500815250906108cc5760405162461bcd60e51b815260040161082a9190612706565b5033600090815260076020526040812080548492906108ec908490612851565b909155506108fd9050308884611c2d565b600a5460408051888152602081018590523392917fbf96c45bc9c09ee6b01d80ba3b5ad223cf2af32d404bfff502c081efe98ad75a910160405180910390a36001600a600082825461094f91906127f8565b9091555050600160065550630a85bd0160e11b979650505050505050565b600061097a848484611c2d565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156109ff5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161082a565b610a0c8533858403611b08565b506001949350505050565b60026006541415610a3a5760405162461bcd60e51b815260040161082a90612790565b60026006556001600160a01b03831660009081526008602090815260408083208584529091528120546109c490610a7390606c90612832565b610a7d9190612810565b9050818111156040518060400160405280601f81526020017f42757920707269636520686967686572207468616e206d61782070726963650081525090610ad75760405162461bcd60e51b815260040161082a9190612706565b50610ae3333083611c2d565b6001600160a01b03841660009081526008602090815260408083208684529091529020546109c490610b1790600190612832565b610b219190612810565b73f7a26a24eb5dd146ea00d7fc9dc4ec1c474eef03600090815260076020527fd59372c86258cbcc30c85009531acbfb114149e8f84cacb9ee1a995d9e884ef58054909190610b719084906127f8565b90915550506001600160a01b03841660009081526008602090815260408083208684529091529020546109c490610baa90600190612832565b610bb49190612810565b73d92cc219acf2199deadac2b965b35b9e84fa7f0a600090815260076020527fa7ec782b73e0bf58fa670252ad900930ea09336c4825799d0eb7231719e2008e8054909190610c049084906127f8565b90915550506001600160a01b0384166000908152600860209081526040808320868452909152902054610c529030906109c490610c4390600190612832565b610c4d9190612810565b611dfc565b6109c4610c61600560646127f8565b6001600160a01b0386166000908152600860209081526040808320888452909152902054610c8f9190612832565b610c999190612810565b6001600160a01b038516600090815260086020908152604080832087845290915281208054909190610ccc9084906127f8565b9091555050604051637921219560e11b8152306004820152336024820152604481018490526001606482015260a06084820152600060a48201526001600160a01b0385169063f242432a9060c401600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b5050505082846001600160a01b0316600a547fd5620c806b0bbf473004cbbb64489e81ed880ce0a6f4635a0e5c23f505109f2984604051610d8b91815260200190565b60405180910390a46001600a6000828254610da691906127f8565b9091555050600160065550505050565b6005546001600160a01b03163314610de05760405162461bcd60e51b815260040161082a9061275b565b604051600090339083908381818185875af1925050503d8060008114610e22576040519150601f19603f3d011682016040523d82523d6000602084013e610e27565b606091505b5050905080610e3557600080fd5b5050565b62def74c4310610e7d5760405162461bcd60e51b815260206004820152600f60248201526e10db185a5b481a185cc8195b991959608a1b604482015260640161082a565b3360009081526009602052604090205460ff1615610ed05760405162461bcd60e51b815260206004820152601060248201526f416c726561647920436c61696d65642160801b604482015260640161082a565b336000818152600960205260409020805460ff19166001179055610f7390610f3a90856040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260009060540160405160208183030381529060405280519060200120905092915050565b838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611f4292505050565b610faf5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640161082a565b610fc183670de0b6b3a7640000612832565b9250612710600b541015610ff457610fef336064610fe086607d612832565b610fea9190612810565b611f6f565b610ffe565b610ffe3384611f6f565b6001600b600082825461101191906127f8565b9091555050505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107fc9185906110529086906127f8565b611b08565b6005546001600160a01b031633146110815760405162461bcd60e51b815260040161082a9061275b565b600c5460ff16156110b85760405162461bcd60e51b81526020600482015260016024820152601360fa1b604482015260640161082a565b6000805b84811015611178578383828181106110d6576110d66128d4565b90506020020135826110e891906127f8565b91508383828181106110fc576110fc6128d4565b9050602002013560076000888885818110611119576111196128d4565b905060200201602081019061112e9190612292565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001600082825461116091906127f8565b90915550819050611170816128a3565b9150506110bc565b6111823083611f6f565b505050505050565b6001600160a01b03821660009081526008602090815260408083208484529091528120546109c4906111be90606c90612832565b6111c89190612810565b9392505050565b6005546001600160a01b031633146111f95760405162461bcd60e51b815260040161082a9061275b565b611203600061204e565b565b60606004805461076c90612868565b6001600160a01b0381166000908152600760205260408120546109c49061123d90606c90612832565b6107579190612810565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112c95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161082a565b6112d63385858403611b08565b5060019392505050565b60006107fc338484611c2d565b600260065414156113105760405162461bcd60e51b815260040161082a90612790565b60026006556001600160a01b0383166000908152600760205260408120546109c49061133e90606c90612832565b6113489190612810565b9050818111156040518060400160405280601f81526020017f42757920707269636520686967686572207468616e206d617820707269636500815250906113a25760405162461bcd60e51b815260040161082a9190612706565b506113ae333083611c2d565b6001600160a01b0384166000908152600760205260409020546109c4906113d790600190612832565b6113e19190612810565b73f7a26a24eb5dd146ea00d7fc9dc4ec1c474eef03600090815260076020527fd59372c86258cbcc30c85009531acbfb114149e8f84cacb9ee1a995d9e884ef580549091906114319084906127f8565b90915550506001600160a01b0384166000908152600760205260409020546109c49061145f90600190612832565b6114699190612810565b73d92cc219acf2199deadac2b965b35b9e84fa7f0a600090815260076020527fa7ec782b73e0bf58fa670252ad900930ea09336c4825799d0eb7231719e2008e80549091906114b99084906127f8565b90915550506001600160a01b0384166000908152600760205260409020546114ed9030906109c490610c4390600190612832565b6109c46114fc600560646127f8565b6001600160a01b03861660009081526007602052604090205461151f9190612832565b6115299190612810565b6001600160a01b038516600090815260076020526040812080549091906115519084906127f8565b9091555050604051632142170760e11b8152306004820152336024820152604481018490526001600160a01b038516906342842e0e90606401600060405180830381600087803b1580156115a457600080fd5b505af11580156115b8573d6000803e3d6000fd5b50505050836001600160a01b0316600a547fecdefd68fd1fe23104fd643d18e0b4e765183c7d72540b3159d6c50320997f1b8584604051611603929190918252602082015260400190565b60405180910390a36001600a6000828254610da691906127f8565b6005546001600160a01b031633146116485760405162461bcd60e51b815260040161082a9061275b565b8060ff1660011461165857600080fd5b50600c805460ff19166001179055565b6000611675333084611c2d565b6001600160a01b0383166000908152600760205260408120805484929061169d9084906127f8565b909155506001949350505050565b6001600160a01b03821660009081526008602090815260408083208484529091528120546109c4906111be90606490612832565b6001600160a01b0381166000908152600760205260408120546109c49061123d90606490612832565b6005546001600160a01b031633146117325760405162461bcd60e51b815260040161082a9061275b565b600c5460ff16156117695760405162461bcd60e51b81526020600482015260016024820152601360fa1b604482015260640161082a565b6000805b8681101561185257838382818110611787576117876128d4565b905060200201358261179991906127f8565b91508383828181106117ad576117ad6128d4565b90506020020135600860008a8a858181106117ca576117ca6128d4565b90506020020160208101906117df9190612292565b6001600160a01b03166001600160a01b031681526020019081526020016000206000016000888885818110611816576118166128d4565b905060200201358152602001908152602001600020600082825461183a91906127f8565b9091555081905061184a816128a3565b91505061176d565b61185c3083611f6f565b5050505050505050565b60006002600654141561188b5760405162461bcd60e51b815260040161082a90612790565b6002600655600184146118d75760405162461bcd60e51b81526020600482015260146024820152734f6e6520746f6b656e20617420612074696d652160601b604482015260640161082a565b3360009081526008602090815260408083208884529091528120546109c49061190290606490612832565b61190c9190612810565b9050600061191c8486018661267e565b9050808210156040518060400160405280601f81526020017f53656c6c207072696365206c6f776572207468616e206d696e20707269636500815250906119765760405162461bcd60e51b815260040161082a9190612706565b503360009081526008602090815260408083208a8452909152812080548492906119a1908490612851565b909155506119b29050308984611c2d565b600a54604051838152889133917fcce829e633ced3393fbd760b93112220adaf923f2a59f4cd08585491ee46b4fd9060200160405180910390a46001600a60008282546119ff91906127f8565b909155505060016006555063f23a6e6160e01b98975050505050505050565b6005546001600160a01b03163314611a485760405162461bcd60e51b815260040161082a9061275b565b6001600160a01b038116611aad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082a565b611ab68161204e565b50565b6000611ac6333084611c2d565b6001600160a01b038416600090815260086020908152604080832086845290915281208054849290611af99084906127f8565b90915550600195945050505050565b6001600160a01b038316611b6a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082a565b6001600160a01b038216611bcb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c915760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161082a565b6001600160a01b038216611cf35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161082a565b6001600160a01b03831660009081526020819052604090205481811015611d6b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161082a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611da29084906127f8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dee91815260200190565b60405180910390a350505050565b6001600160a01b038216611e5c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161082a565b6001600160a01b03821660009081526020819052604090205481811015611ed05760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161082a565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611eff908490612851565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611c20565b60006111c8827fb861f2ff2bbffd05e4a8852c7a8a367d91e6117b0cfeb4c76679e9ffe109e4e7856120a0565b6001600160a01b038216611fc55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161082a565b8060026000828254611fd791906127f8565b90915550506001600160a01b038216600090815260208190526040812080548392906120049084906127f8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826120ad85846120b6565b14949350505050565b600081815b845181101561215a5760008582815181106120d8576120d86128d4565b6020026020010151905080831161211a576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612147565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080612152816128a3565b9150506120bb565b509392505050565b80356001600160a01b038116811461217957600080fd5b919050565b60008083601f84011261219057600080fd5b50813567ffffffffffffffff8111156121a857600080fd5b6020830191508360208260051b85010111156121c357600080fd5b9250929050565b600082601f8301126121db57600080fd5b8135602067ffffffffffffffff8211156121f7576121f76128ea565b8160051b6122068282016127c7565b83815282810190868401838801850189101561222157600080fd5b600093505b85841015612244578035835260019390930192918401918401612226565b50979650505050505050565b60008083601f84011261226257600080fd5b50813567ffffffffffffffff81111561227a57600080fd5b6020830191508360208285010111156121c357600080fd5b6000602082840312156122a457600080fd5b6111c882612162565b600080604083850312156122c057600080fd5b6122c983612162565b91506122d760208401612162565b90509250929050565b600080600080600060a086880312156122f857600080fd5b61230186612162565b94506020612310818801612162565b9450604087013567ffffffffffffffff8082111561232d57600080fd5b6123398a838b016121ca565b9550606089013591508082111561234f57600080fd5b61235b8a838b016121ca565b9450608089013591508082111561237157600080fd5b818901915089601f83011261238557600080fd5b813581811115612397576123976128ea565b6123a9601f8201601f191685016127c7565b91508082528a848285010111156123bf57600080fd5b80848401858401376000848284010152508093505050509295509295909350565b6000806000606084860312156123f557600080fd5b6123fe84612162565b925061240c60208501612162565b9150604084013590509250925092565b60008060008060006080868803121561243457600080fd5b61243d86612162565b945061244b60208701612162565b935060408601359250606086013567ffffffffffffffff81111561246e57600080fd5b61247a88828901612250565b969995985093965092949392505050565b60008060008060008060a087890312156124a457600080fd5b6124ad87612162565b95506124bb60208801612162565b94506040870135935060608701359250608087013567ffffffffffffffff8111156124e557600080fd5b6124f189828a01612250565b979a9699509497509295939492505050565b6000806040838503121561251657600080fd5b61251f83612162565b946020939093013593505050565b60008060006060848603121561254257600080fd5b61254b84612162565b95602085013595506040909401359392505050565b6000806000806040858703121561257657600080fd5b843567ffffffffffffffff8082111561258e57600080fd5b61259a8883890161217e565b909650945060208701359150808211156125b357600080fd5b506125c08782880161217e565b95989497509550505050565b600080600080600080606087890312156125e557600080fd5b863567ffffffffffffffff808211156125fd57600080fd5b6126098a838b0161217e565b9098509650602089013591508082111561262257600080fd5b61262e8a838b0161217e565b9096509450604089013591508082111561264757600080fd5b506124f189828a0161217e565b60006020828403121561266657600080fd5b81356001600160e01b0319811681146111c857600080fd5b60006020828403121561269057600080fd5b5035919050565b6000806000604084860312156126ac57600080fd5b83359250602084013567ffffffffffffffff8111156126ca57600080fd5b6126d68682870161217e565b9497909650939450505050565b6000602082840312156126f557600080fd5b813560ff811681146111c857600080fd5b600060208083528351808285015260005b8181101561273357858101830151858201604001528201612717565b81811115612745576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b604051601f8201601f1916810167ffffffffffffffff811182821017156127f0576127f06128ea565b604052919050565b6000821982111561280b5761280b6128be565b500190565b60008261282d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561284c5761284c6128be565b500290565b600082821015612863576128636128be565b500390565b600181811c9082168061287c57607f821691505b6020821081141561289d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128b7576128b76128be565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220ba15e9bde98c3e0fc78ac09da3d154776e26850609ee2274b3e5f79653c0236664736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101fb5760003560e01c80639b0941bd1161010c578063dd896a1c1161009a578063e8e11fd51161006c578063e8e11fd514610672578063ebf0c71714610692578063f23a6e61146106c6578063f2fde38b146106e6578063f4d2098a1461070657005b8063dd896a1c146105e2578063df5a19ac14610612578063e6371c9214610632578063e72ebcc81461065257005b8063b3e16626116100de578063b3e166261461051a578063b81809ce14610550578063bc197c8114610570578063d0e30db014610202578063dd62ed3e1461059c57005b80639b0941bd1461049a578063a457c2d7146104ba578063a9059cbb146104da578063ab820ec7146104fa57005b80632f52ebb7116101895780636502feb21161015b5780636502feb2146103f257806370a0823114610412578063715018a6146104485780638da5cb5b1461045d57806395d89b411461048557005b80632f52ebb714610376578063313ce5671461039657806339509351146103b25780635eced2c5146103d257005b806318160ddd116101cd57806318160ddd146102b45780631c8bb536146102d357806323b872dd146103165780632aae5a30146103365780632e1a7d4d1461035657005b806301ffc9a71461020457806306fdde0314610239578063095ea7b31461025b578063150b7a021461027b57005b3661020257005b005b34801561021057600080fd5b5061022461021f366004612654565b610726565b60405190151581526020015b60405180910390f35b34801561024557600080fd5b5061024e61075d565b6040516102309190612706565b34801561026757600080fd5b50610224610276366004612503565b6107ef565b34801561028757600080fd5b5061029b61029636600461241c565b610805565b6040516001600160e01b03199091168152602001610230565b3480156102c057600080fd5b506002545b604051908152602001610230565b3480156102df57600080fd5b506102c56102ee366004612503565b6001600160a01b03919091166000908152600860209081526040808320938352929052205490565b34801561032257600080fd5b506102246103313660046123e0565b61096d565b34801561034257600080fd5b5061020261035136600461252d565b610a17565b34801561036257600080fd5b5061020261037136600461267e565b610db6565b34801561038257600080fd5b50610202610391366004612697565b610e39565b3480156103a257600080fd5b5060405160128152602001610230565b3480156103be57600080fd5b506102246103cd366004612503565b61101b565b3480156103de57600080fd5b506102026103ed366004612560565b611057565b3480156103fe57600080fd5b506102c561040d366004612503565b61118a565b34801561041e57600080fd5b506102c561042d366004612292565b6001600160a01b031660009081526020819052604090205490565b34801561045457600080fd5b506102026111cf565b34801561046957600080fd5b506005546040516001600160a01b039091168152602001610230565b34801561049157600080fd5b5061024e611205565b3480156104a657600080fd5b506102c56104b5366004612292565b611214565b3480156104c657600080fd5b506102246104d5366004612503565b611247565b3480156104e657600080fd5b506102246104f5366004612503565b6112e0565b34801561050657600080fd5b5061020261051536600461252d565b6112ed565b34801561052657600080fd5b506102c5610535366004612292565b6001600160a01b031660009081526007602052604090205490565b34801561055c57600080fd5b5061020261056b3660046126e3565b61161e565b34801561057c57600080fd5b5061029b61058b3660046122e0565b63bc197c8160e01b95945050505050565b3480156105a857600080fd5b506102c56105b73660046122ad565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105ee57600080fd5b506102246105fd366004612292565b60096020526000908152604090205460ff1681565b34801561061e57600080fd5b5061022461062d366004612503565b611668565b34801561063e57600080fd5b506102c561064d366004612503565b6116ab565b34801561065e57600080fd5b506102c561066d366004612292565b6116df565b34801561067e57600080fd5b5061020261068d3660046125cc565b611708565b34801561069e57600080fd5b506102c57fb861f2ff2bbffd05e4a8852c7a8a367d91e6117b0cfeb4c76679e9ffe109e4e781565b3480156106d257600080fd5b5061029b6106e136600461248b565b611866565b3480156106f257600080fd5b50610202610701366004612292565b611a1e565b34801561071257600080fd5b5061022461072136600461252d565b611ab9565b60006001600160e01b03198216630271189760e51b148061075757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461076c90612868565b80601f016020809104026020016040519081016040528092919081815260200182805461079890612868565b80156107e55780601f106107ba576101008083540402835291602001916107e5565b820191906000526020600020905b8154815290600101906020018083116107c857829003601f168201915b5050505050905090565b60006107fc338484611b08565b50600192915050565b6000600260065414156108335760405162461bcd60e51b815260040161082a90612790565b60405180910390fd5b6002600655336000908152600760205260408120546109c49061085890606490612832565b6108629190612810565b905060006108728486018661267e565b9050808210156040518060400160405280601f81526020017f53656c6c207072696365206c6f776572207468616e206d696e20707269636500815250906108cc5760405162461bcd60e51b815260040161082a9190612706565b5033600090815260076020526040812080548492906108ec908490612851565b909155506108fd9050308884611c2d565b600a5460408051888152602081018590523392917fbf96c45bc9c09ee6b01d80ba3b5ad223cf2af32d404bfff502c081efe98ad75a910160405180910390a36001600a600082825461094f91906127f8565b9091555050600160065550630a85bd0160e11b979650505050505050565b600061097a848484611c2d565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156109ff5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161082a565b610a0c8533858403611b08565b506001949350505050565b60026006541415610a3a5760405162461bcd60e51b815260040161082a90612790565b60026006556001600160a01b03831660009081526008602090815260408083208584529091528120546109c490610a7390606c90612832565b610a7d9190612810565b9050818111156040518060400160405280601f81526020017f42757920707269636520686967686572207468616e206d61782070726963650081525090610ad75760405162461bcd60e51b815260040161082a9190612706565b50610ae3333083611c2d565b6001600160a01b03841660009081526008602090815260408083208684529091529020546109c490610b1790600190612832565b610b219190612810565b73f7a26a24eb5dd146ea00d7fc9dc4ec1c474eef03600090815260076020527fd59372c86258cbcc30c85009531acbfb114149e8f84cacb9ee1a995d9e884ef58054909190610b719084906127f8565b90915550506001600160a01b03841660009081526008602090815260408083208684529091529020546109c490610baa90600190612832565b610bb49190612810565b73d92cc219acf2199deadac2b965b35b9e84fa7f0a600090815260076020527fa7ec782b73e0bf58fa670252ad900930ea09336c4825799d0eb7231719e2008e8054909190610c049084906127f8565b90915550506001600160a01b0384166000908152600860209081526040808320868452909152902054610c529030906109c490610c4390600190612832565b610c4d9190612810565b611dfc565b6109c4610c61600560646127f8565b6001600160a01b0386166000908152600860209081526040808320888452909152902054610c8f9190612832565b610c999190612810565b6001600160a01b038516600090815260086020908152604080832087845290915281208054909190610ccc9084906127f8565b9091555050604051637921219560e11b8152306004820152336024820152604481018490526001606482015260a06084820152600060a48201526001600160a01b0385169063f242432a9060c401600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b5050505082846001600160a01b0316600a547fd5620c806b0bbf473004cbbb64489e81ed880ce0a6f4635a0e5c23f505109f2984604051610d8b91815260200190565b60405180910390a46001600a6000828254610da691906127f8565b9091555050600160065550505050565b6005546001600160a01b03163314610de05760405162461bcd60e51b815260040161082a9061275b565b604051600090339083908381818185875af1925050503d8060008114610e22576040519150601f19603f3d011682016040523d82523d6000602084013e610e27565b606091505b5050905080610e3557600080fd5b5050565b62def74c4310610e7d5760405162461bcd60e51b815260206004820152600f60248201526e10db185a5b481a185cc8195b991959608a1b604482015260640161082a565b3360009081526009602052604090205460ff1615610ed05760405162461bcd60e51b815260206004820152601060248201526f416c726561647920436c61696d65642160801b604482015260640161082a565b336000818152600960205260409020805460ff19166001179055610f7390610f3a90856040516bffffffffffffffffffffffff19606084901b1660208201526034810182905260009060540160405160208183030381529060405280519060200120905092915050565b838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611f4292505050565b610faf5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b604482015260640161082a565b610fc183670de0b6b3a7640000612832565b9250612710600b541015610ff457610fef336064610fe086607d612832565b610fea9190612810565b611f6f565b610ffe565b610ffe3384611f6f565b6001600b600082825461101191906127f8565b9091555050505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107fc9185906110529086906127f8565b611b08565b6005546001600160a01b031633146110815760405162461bcd60e51b815260040161082a9061275b565b600c5460ff16156110b85760405162461bcd60e51b81526020600482015260016024820152601360fa1b604482015260640161082a565b6000805b84811015611178578383828181106110d6576110d66128d4565b90506020020135826110e891906127f8565b91508383828181106110fc576110fc6128d4565b9050602002013560076000888885818110611119576111196128d4565b905060200201602081019061112e9190612292565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001600082825461116091906127f8565b90915550819050611170816128a3565b9150506110bc565b6111823083611f6f565b505050505050565b6001600160a01b03821660009081526008602090815260408083208484529091528120546109c4906111be90606c90612832565b6111c89190612810565b9392505050565b6005546001600160a01b031633146111f95760405162461bcd60e51b815260040161082a9061275b565b611203600061204e565b565b60606004805461076c90612868565b6001600160a01b0381166000908152600760205260408120546109c49061123d90606c90612832565b6107579190612810565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112c95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161082a565b6112d63385858403611b08565b5060019392505050565b60006107fc338484611c2d565b600260065414156113105760405162461bcd60e51b815260040161082a90612790565b60026006556001600160a01b0383166000908152600760205260408120546109c49061133e90606c90612832565b6113489190612810565b9050818111156040518060400160405280601f81526020017f42757920707269636520686967686572207468616e206d617820707269636500815250906113a25760405162461bcd60e51b815260040161082a9190612706565b506113ae333083611c2d565b6001600160a01b0384166000908152600760205260409020546109c4906113d790600190612832565b6113e19190612810565b73f7a26a24eb5dd146ea00d7fc9dc4ec1c474eef03600090815260076020527fd59372c86258cbcc30c85009531acbfb114149e8f84cacb9ee1a995d9e884ef580549091906114319084906127f8565b90915550506001600160a01b0384166000908152600760205260409020546109c49061145f90600190612832565b6114699190612810565b73d92cc219acf2199deadac2b965b35b9e84fa7f0a600090815260076020527fa7ec782b73e0bf58fa670252ad900930ea09336c4825799d0eb7231719e2008e80549091906114b99084906127f8565b90915550506001600160a01b0384166000908152600760205260409020546114ed9030906109c490610c4390600190612832565b6109c46114fc600560646127f8565b6001600160a01b03861660009081526007602052604090205461151f9190612832565b6115299190612810565b6001600160a01b038516600090815260076020526040812080549091906115519084906127f8565b9091555050604051632142170760e11b8152306004820152336024820152604481018490526001600160a01b038516906342842e0e90606401600060405180830381600087803b1580156115a457600080fd5b505af11580156115b8573d6000803e3d6000fd5b50505050836001600160a01b0316600a547fecdefd68fd1fe23104fd643d18e0b4e765183c7d72540b3159d6c50320997f1b8584604051611603929190918252602082015260400190565b60405180910390a36001600a6000828254610da691906127f8565b6005546001600160a01b031633146116485760405162461bcd60e51b815260040161082a9061275b565b8060ff1660011461165857600080fd5b50600c805460ff19166001179055565b6000611675333084611c2d565b6001600160a01b0383166000908152600760205260408120805484929061169d9084906127f8565b909155506001949350505050565b6001600160a01b03821660009081526008602090815260408083208484529091528120546109c4906111be90606490612832565b6001600160a01b0381166000908152600760205260408120546109c49061123d90606490612832565b6005546001600160a01b031633146117325760405162461bcd60e51b815260040161082a9061275b565b600c5460ff16156117695760405162461bcd60e51b81526020600482015260016024820152601360fa1b604482015260640161082a565b6000805b8681101561185257838382818110611787576117876128d4565b905060200201358261179991906127f8565b91508383828181106117ad576117ad6128d4565b90506020020135600860008a8a858181106117ca576117ca6128d4565b90506020020160208101906117df9190612292565b6001600160a01b03166001600160a01b031681526020019081526020016000206000016000888885818110611816576118166128d4565b905060200201358152602001908152602001600020600082825461183a91906127f8565b9091555081905061184a816128a3565b91505061176d565b61185c3083611f6f565b5050505050505050565b60006002600654141561188b5760405162461bcd60e51b815260040161082a90612790565b6002600655600184146118d75760405162461bcd60e51b81526020600482015260146024820152734f6e6520746f6b656e20617420612074696d652160601b604482015260640161082a565b3360009081526008602090815260408083208884529091528120546109c49061190290606490612832565b61190c9190612810565b9050600061191c8486018661267e565b9050808210156040518060400160405280601f81526020017f53656c6c207072696365206c6f776572207468616e206d696e20707269636500815250906119765760405162461bcd60e51b815260040161082a9190612706565b503360009081526008602090815260408083208a8452909152812080548492906119a1908490612851565b909155506119b29050308984611c2d565b600a54604051838152889133917fcce829e633ced3393fbd760b93112220adaf923f2a59f4cd08585491ee46b4fd9060200160405180910390a46001600a60008282546119ff91906127f8565b909155505060016006555063f23a6e6160e01b98975050505050505050565b6005546001600160a01b03163314611a485760405162461bcd60e51b815260040161082a9061275b565b6001600160a01b038116611aad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082a565b611ab68161204e565b50565b6000611ac6333084611c2d565b6001600160a01b038416600090815260086020908152604080832086845290915281208054849290611af99084906127f8565b90915550600195945050505050565b6001600160a01b038316611b6a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082a565b6001600160a01b038216611bcb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611c915760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161082a565b6001600160a01b038216611cf35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161082a565b6001600160a01b03831660009081526020819052604090205481811015611d6b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161082a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611da29084906127f8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dee91815260200190565b60405180910390a350505050565b6001600160a01b038216611e5c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161082a565b6001600160a01b03821660009081526020819052604090205481811015611ed05760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161082a565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611eff908490612851565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611c20565b60006111c8827fb861f2ff2bbffd05e4a8852c7a8a367d91e6117b0cfeb4c76679e9ffe109e4e7856120a0565b6001600160a01b038216611fc55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161082a565b8060026000828254611fd791906127f8565b90915550506001600160a01b038216600090815260208190526040812080548392906120049084906127f8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826120ad85846120b6565b14949350505050565b600081815b845181101561215a5760008582815181106120d8576120d86128d4565b6020026020010151905080831161211a576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612147565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080612152816128a3565b9150506120bb565b509392505050565b80356001600160a01b038116811461217957600080fd5b919050565b60008083601f84011261219057600080fd5b50813567ffffffffffffffff8111156121a857600080fd5b6020830191508360208260051b85010111156121c357600080fd5b9250929050565b600082601f8301126121db57600080fd5b8135602067ffffffffffffffff8211156121f7576121f76128ea565b8160051b6122068282016127c7565b83815282810190868401838801850189101561222157600080fd5b600093505b85841015612244578035835260019390930192918401918401612226565b50979650505050505050565b60008083601f84011261226257600080fd5b50813567ffffffffffffffff81111561227a57600080fd5b6020830191508360208285010111156121c357600080fd5b6000602082840312156122a457600080fd5b6111c882612162565b600080604083850312156122c057600080fd5b6122c983612162565b91506122d760208401612162565b90509250929050565b600080600080600060a086880312156122f857600080fd5b61230186612162565b94506020612310818801612162565b9450604087013567ffffffffffffffff8082111561232d57600080fd5b6123398a838b016121ca565b9550606089013591508082111561234f57600080fd5b61235b8a838b016121ca565b9450608089013591508082111561237157600080fd5b818901915089601f83011261238557600080fd5b813581811115612397576123976128ea565b6123a9601f8201601f191685016127c7565b91508082528a848285010111156123bf57600080fd5b80848401858401376000848284010152508093505050509295509295909350565b6000806000606084860312156123f557600080fd5b6123fe84612162565b925061240c60208501612162565b9150604084013590509250925092565b60008060008060006080868803121561243457600080fd5b61243d86612162565b945061244b60208701612162565b935060408601359250606086013567ffffffffffffffff81111561246e57600080fd5b61247a88828901612250565b969995985093965092949392505050565b60008060008060008060a087890312156124a457600080fd5b6124ad87612162565b95506124bb60208801612162565b94506040870135935060608701359250608087013567ffffffffffffffff8111156124e557600080fd5b6124f189828a01612250565b979a9699509497509295939492505050565b6000806040838503121561251657600080fd5b61251f83612162565b946020939093013593505050565b60008060006060848603121561254257600080fd5b61254b84612162565b95602085013595506040909401359392505050565b6000806000806040858703121561257657600080fd5b843567ffffffffffffffff8082111561258e57600080fd5b61259a8883890161217e565b909650945060208701359150808211156125b357600080fd5b506125c08782880161217e565b95989497509550505050565b600080600080600080606087890312156125e557600080fd5b863567ffffffffffffffff808211156125fd57600080fd5b6126098a838b0161217e565b9098509650602089013591508082111561262257600080fd5b61262e8a838b0161217e565b9096509450604089013591508082111561264757600080fd5b506124f189828a0161217e565b60006020828403121561266657600080fd5b81356001600160e01b0319811681146111c857600080fd5b60006020828403121561269057600080fd5b5035919050565b6000806000604084860312156126ac57600080fd5b83359250602084013567ffffffffffffffff8111156126ca57600080fd5b6126d68682870161217e565b9497909650939450505050565b6000602082840312156126f557600080fd5b813560ff811681146111c857600080fd5b600060208083528351808285015260005b8181101561273357858101830151858201604001528201612717565b81811115612745576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b604051601f8201601f1916810167ffffffffffffffff811182821017156127f0576127f06128ea565b604052919050565b6000821982111561280b5761280b6128be565b500190565b60008261282d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561284c5761284c6128be565b500290565b600082821015612863576128636128be565b500390565b600181811c9082168061287c57607f821691505b6020821081141561289d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128b7576128b76128be565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220ba15e9bde98c3e0fc78ac09da3d154776e26850609ee2274b3e5f79653c0236664736f6c63430008070033

Deployed Bytecode Sourcemap

40065:9182:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10773:223;;;;;;;;;;-1:-1:-1;10773:223:0;;;;;:::i;:::-;;:::i;:::-;;;11005:14:1;;10998:22;10980:41;;10968:2;10953:18;10773:223:0;;;;;;;;29992:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32159:169::-;;;;;;;;;;-1:-1:-1;32159:169:0;;;;;:::i;:::-;;:::i;45002:617::-;;;;;;;;;;-1:-1:-1;45002:617:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;11376:33:1;;;11358:52;;11346:2;11331:18;45002:617:0;11214:202:1;31112:108:0;;;;;;;;;;-1:-1:-1;31200:12:0;;31112:108;;;11178:25:1;;;11166:2;11151:18;31112:108:0;11032:177:1;43033:165:0;;;;;;;;;;-1:-1:-1;43033:165:0;;;;;:::i;:::-;-1:-1:-1;;;;;43144:28:0;;;;43120:7;43144:28;;;:11;:28;;;;;;;;:46;;;;;;;;;43033:165;32810:492;;;;;;;;;;-1:-1:-1;32810:492:0;;;;;:::i;:::-;;:::i;47332:1048::-;;;;;;;;;;-1:-1:-1;47332:1048:0;;;;;:::i;:::-;;:::i;42233:155::-;;;;;;;;;;-1:-1:-1;42233:155:0;;;;;:::i;:::-;;:::i;48388:543::-;;;;;;;;;;-1:-1:-1;48388:543:0;;;;;:::i;:::-;;:::i;30954:93::-;;;;;;;;;;-1:-1:-1;30954:93:0;;31037:2;19442:36:1;;19430:2;19415:18;30954:93:0;19300:184:1;33711:215:0;;;;;;;;;;-1:-1:-1;33711:215:0;;;;;:::i;:::-;;:::i;43630:412::-;;;;;;;;;;-1:-1:-1;43630:412:0;;;;;:::i;:::-;;:::i;43206:203::-;;;;;;;;;;-1:-1:-1;43206:203:0;;;;;:::i;:::-;;:::i;31283:127::-;;;;;;;;;;-1:-1:-1;31283:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;31384:18:0;31357:7;31384:18;;;;;;;;;;;;31283:127;23413:103;;;;;;;;;;;;;:::i;22762:87::-;;;;;;;;;;-1:-1:-1;22835:6:0;;22762:87;;-1:-1:-1;;;;;22835:6:0;;;9758:51:1;;9746:2;9731:18;22762:87:0;9612:203:1;30211:104:0;;;;;;;;;;;;;:::i;42665:175::-;;;;;;;;;;-1:-1:-1;42665:175:0;;;;;:::i;:::-;;:::i;34429:413::-;;;;;;;;;;-1:-1:-1;34429:413:0;;;;;:::i;:::-;;:::i;31623:175::-;;;;;;;;;;-1:-1:-1;31623:175:0;;;;;:::i;:::-;;:::i;46345:979::-;;;;;;;;;;-1:-1:-1;46345:979:0;;;;;:::i;:::-;;:::i;42519:138::-;;;;;;;;;;-1:-1:-1;42519:138:0;;;;;:::i;:::-;-1:-1:-1;;;;;42613:27:0;42589:7;42613:27;;;:10;:27;;;;;:36;;42519:138;42396:115;;;;;;;;;;-1:-1:-1;42396:115:0;;;;;:::i;:::-;;:::i;11511:255::-;;;;;;;;;;-1:-1:-1;11511:255:0;;;;;:::i;:::-;-1:-1:-1;;;11511:255:0;;;;;;;;31861:151;;;;;;;;;;-1:-1:-1;31861:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;31977:18:0;;;31950:7;31977:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31861:151;40927:40;;;;;;;;;;-1:-1:-1;40927:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44514:221;;;;;;;;;;-1:-1:-1;44514:221:0;;;;;:::i;:::-;;:::i;43417:205::-;;;;;;;;;;-1:-1:-1;43417:205:0;;;;;:::i;:::-;;:::i;42848:177::-;;;;;;;;;;-1:-1:-1;42848:177:0;;;;;:::i;:::-;;:::i;44050:456::-;;;;;;;;;;-1:-1:-1;44050:456:0;;;;;:::i;:::-;;:::i;40976:97::-;;;;;;;;;;-1:-1:-1;40976:97:0;41007:66;40976:97;;45629:708;;;;;;;;;;-1:-1:-1;45629:708:0;;;;;:::i;:::-;;:::i;23671:201::-;;;;;;;;;;-1:-1:-1;23671:201:0;;;;;:::i;:::-;;:::i;44743:249::-;;;;;;;;;;-1:-1:-1;44743:249:0;;;;;:::i;:::-;;:::i;10773:223::-;10875:4;-1:-1:-1;;;;;;10899:49:0;;-1:-1:-1;;;10899:49:0;;:89;;-1:-1:-1;;;;;;;;;;7849:40:0;;;10952:36;10892:96;10773:223;-1:-1:-1;;10773:223:0:o;29992:100::-;30046:13;30079:5;30072:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29992:100;:::o;32159:169::-;32242:4;32259:39;21566:10;32282:7;32291:6;32259:8;:39::i;:::-;-1:-1:-1;32316:4:0;32159:169;;;;:::o;45002:617::-;45146:6;3980:1;4578:7;;:19;;4570:63;;;;-1:-1:-1;;;4570:63:0;;;;;;;:::i;:::-;;;;;;;;;3980:1;4711:7;:18;45196:10:::1;45165:17;45185:22:::0;;;:10:::1;:22;::::0;;;;:31;41436:4:::1;::::0;45185:54:::1;::::0;41137:3:::1;::::0;45185:54:::1;:::i;:::-;:70;;;;:::i;:::-;45165:90:::0;-1:-1:-1;45266:16:0::1;45285:27;::::0;;::::1;45296:4:::0;45285:27:::1;:::i;:::-;45266:46;;45344:8;45331:9;:21;;45354:12;;;;;;;;;;;;;;;;::::0;45323:44:::1;;;;;-1:-1:-1::0;;;45323:44:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;45389:10:0::1;45378:22;::::0;;;:10:::1;:22;::::0;;;;:44;;45413:9;;45378:22;:44:::1;::::0;45413:9;;45378:44:::1;:::i;:::-;::::0;;;-1:-1:-1;45433:42:0::1;::::0;-1:-1:-1;45451:4:0::1;45458::::0;45465:9;45433::::1;:42::i;:::-;45505:5;::::0;45491:52:::1;::::0;;19221:25:1;;;19277:2;19262:18;;19255:34;;;45512:10:0::1;::::0;45505:5;45491:52:::1;::::0;19194:18:1;45491:52:0::1;;;;;;;45562:1;45554:5;;:9;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;3936:1:0;4890:7;:22;-1:-1:-1;;;;45581:30:0;45002:617;-1:-1:-1;;;;;;;45002:617:0:o;32810:492::-;32950:4;32967:36;32977:6;32985:9;32996:6;32967:9;:36::i;:::-;-1:-1:-1;;;;;33043:19:0;;33016:24;33043:19;;;:11;:19;;;;;;;;21566:10;33043:33;;;;;;;;33095:26;;;;33087:79;;;;-1:-1:-1;;;33087:79:0;;14927:2:1;33087:79:0;;;14909:21:1;14966:2;14946:18;;;14939:30;15005:34;14985:18;;;14978:62;-1:-1:-1;;;15056:18:1;;;15049:38;15104:19;;33087:79:0;14725:404:1;33087:79:0;33202:57;33211:6;21566:10;33252:6;33233:16;:25;33202:8;:57::i;:::-;-1:-1:-1;33290:4:0;;32810:492;-1:-1:-1;;;;32810:492:0:o;47332:1048::-;3980:1;4578:7;;:19;;4570:63;;;;-1:-1:-1;;;4570:63:0;;;;;;;:::i;:::-;3980:1;4711:7;:18;-1:-1:-1;;;;;47453:23:0;::::1;47434:16;47453:23:::0;;;:11:::1;:23;::::0;;;;;;;:41;;;;;;;;;41436:4:::1;::::0;47453:63:::1;::::0;41391:3:::1;::::0;47453:63:::1;:::i;:::-;:79;;;;:::i;:::-;47434:98;;47563:8;47551;:20;;47573:13;;;;;;;;;;;;;;;;::::0;47543:44:::1;;;;;-1:-1:-1::0;;;47543:44:0::1;;;;;;;;:::i;:::-;;47598:46;47608:10;47628:4;47635:8;47598:9;:46::i;:::-;-1:-1:-1::0;;;;;47692:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;;;;:41;;;;;;;;;41436:4:::1;::::0;47692:66:::1;::::0;41189:1:::1;::::0;47692:66:::1;:::i;:::-;:82;;;;:::i;:::-;41481:42;47655:24;::::0;;;:10:::1;:24;::::0;;:119;;:24;;;:119:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;47829:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;;;;:41;;;;;;;;;41436:4:::1;::::0;47829:67:::1;::::0;41290:1:::1;::::0;47829:67:::1;:::i;:::-;:83;;;;:::i;:::-;41587:42;47785:31;::::0;;;:10:::1;:31;::::0;;:127;;:31;;;:127:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;47944:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;;;;:41;;;;;;;;;47923:104:::1;::::0;47937:4:::1;::::0;41436::::1;::::0;47944:66:::1;::::0;41239:1:::1;::::0;47944:66:::1;:::i;:::-;:82;;;;:::i;:::-;47923:5;:104::i;:::-;41436:4;48126:47;41342:1;41137:3;48126:47;:::i;:::-;-1:-1:-1::0;;;;;48083:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;;;;:41;;;;;;;;;:91:::1;::::0;;::::1;:::i;:::-;:107;;;;:::i;:::-;-1:-1:-1::0;;;;;48038:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;;;;:41;;;;;;;;:152;;:41;;:23;:152:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;48201:79:0::1;::::0;-1:-1:-1;;;48201:79:0;;48247:4:::1;48201:79;::::0;::::1;10541:34:1::0;48254:10:0::1;10591:18:1::0;;;10584:43;10643:18;;;10636:34;;;48275:1:0::1;10686:18:1::0;;;10679:34;10521:3;10729:19;;;10722:32;-1:-1:-1;10770:19:1;;;10763:30;-1:-1:-1;;;;;48201:37:0;::::1;::::0;::::1;::::0;10810:19:1;;48201:79:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;48334:7;48322:10;-1:-1:-1::0;;;;;48296:56:0::1;48315:5;;48296:56;48343:8;48296:56;;;;11178:25:1::0;;11166:2;11151:18;;11032:177;48296:56:0::1;;;;;;;;48371:1;48363:5;;:9;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;3936:1:0;4890:7;:22;-1:-1:-1;;;;47332:1048:0:o;42233:155::-;22835:6;;-1:-1:-1;;;;;22835:6:0;21566:10;22982:23;22974:68;;;;-1:-1:-1;;;22974:68:0;;;;;;;:::i;:::-;42312:43:::1;::::0;42294:12:::1;::::0;42320:10:::1;::::0;42344:6;;42294:12;42312:43;42294:12;42312:43;42344:6;42320:10;42312:43:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42293:62;;;42372:7;42364:16;;;::::0;::::1;;42284:104;42233:155:::0;:::o;48388:543::-;48488:8;48473:12;:23;48465:51;;;;-1:-1:-1;;;48465:51:0;;15697:2:1;48465:51:0;;;15679:21:1;15736:2;15716:18;;;15709:30;-1:-1:-1;;;15755:18:1;;;15748:45;15810:18;;48465:51:0;15495:339:1;48465:51:0;48559:10;48550:20;;;;:8;:20;;;;;;;;:29;48542:58;;;;-1:-1:-1;;;48542:58:0;;17596:2:1;48542:58:0;;;17578:21:1;17635:2;17615:18;;;17608:30;-1:-1:-1;;;17654:18:1;;;17647:46;17710:18;;48542:58:0;17394:340:1;48542:58:0;48620:10;48611:20;;;;:8;:20;;;;;:27;;-1:-1:-1;;48611:27:0;48634:4;48611:27;;;48657:41;;48665:25;;48683:6;49046:33;;-1:-1:-1;;9028:2:1;9024:15;;;9020:53;49046:33:0;;;9008:66:1;9090:12;;;9083:28;;;49010:7:0;;9127:12:1;;49046:33:0;;;;;;;;;;;;49036:44;;;;;;49029:51;;48939:149;;;;;48665:25;48692:5;;48657:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48657:7:0;;-1:-1:-1;;;48657:41:0:i;:::-;48649:67;;;;-1:-1:-1;;;48649:67:0;;17254:2:1;48649:67:0;;;17236:21:1;17293:2;17273:18;;;17266:30;-1:-1:-1;;;17312:18:1;;;17305:43;17365:18;;48649:67:0;17052:337:1;48649:67:0;48736:13;:6;48743;48736:13;:::i;:::-;48727:22;;48794:5;48780:11;;:19;48777:120;;;48812:33;48818:10;48841:3;48830:10;:6;48837:3;48830:10;:::i;:::-;:14;;;;:::i;:::-;48812:5;:33::i;:::-;48777:120;;;48872:25;48878:10;48890:6;48872:5;:25::i;:::-;48922:1;48908:11;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;48388:543:0:o;33711:215::-;21566:10;33799:4;33848:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;33848:34:0;;;;;;;;;;33799:4;;33816:80;;33839:7;;33848:47;;33885:10;;33848:47;:::i;:::-;33816:8;:80::i;43630:412::-;22835:6;;-1:-1:-1;;;;;22835:6:0;21566:10;22982:23;22974:68;;;;-1:-1:-1;;;22974:68:0;;;;;;;:::i;:::-;43757:15:::1;::::0;::::1;;:20:::0;43749:34:::1;;;::::0;-1:-1:-1;;;43749:34:0;;14598:2:1;43749:34:0::1;::::0;::::1;14580:21:1::0;14637:1;14617:18;;;14610:29;-1:-1:-1;;;14655:18:1;;;14648:31;14696:18;;43749:34:0::1;14396:324:1::0;43749:34:0::1;43792:19;::::0;43843:150:::1;43852:26:::0;;::::1;43843:150;;;43910:6;;43917:1;43910:9;;;;;;;:::i;:::-;;;;;;;43895:24;;;;;:::i;:::-;;;43974:6;;43981:1;43974:9;;;;;;;:::i;:::-;;;;;;;43930:10;:32;43941:17;;43959:1;43941:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43930:32:0::1;-1:-1:-1::0;;;;;43930:32:0::1;;;;;;;;;;;;:41;;;:53;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;43880:3:0;;-1:-1:-1;43880:3:0::1;::::0;::::1;:::i;:::-;;;;43843:150;;;44001:33;44015:4;44022:11;44001:5;:33::i;:::-;43740:302;;43630:412:::0;;;;:::o;43206:203::-;-1:-1:-1;;;;;43317:28:0;;43293:7;43317:28;;;:11;:28;;;;;;;;:46;;;;;;;;;41436:4;;43317:68;;41391:3;;43317:68;:::i;:::-;:84;;;;:::i;:::-;43310:91;43206:203;-1:-1:-1;;;43206:203:0:o;23413:103::-;22835:6;;-1:-1:-1;;;;;22835:6:0;21566:10;22982:23;22974:68;;;;-1:-1:-1;;;22974:68:0;;;;;;;:::i;:::-;23478:30:::1;23505:1;23478:18;:30::i;:::-;23413:103::o:0;30211:104::-;30267:13;30300:7;30293:14;;;;;:::i;42665:175::-;-1:-1:-1;;;;;42758:27:0;;42734:7;42758:27;;;:10;:27;;;;;:36;41436:4;;42758:58;;41391:3;;42758:58;:::i;:::-;:74;;;;:::i;34429:413::-;21566:10;34522:4;34566:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;34566:34:0;;;;;;;;;;34619:35;;;;34611:85;;;;-1:-1:-1;;;34611:85:0;;18301:2:1;34611:85:0;;;18283:21:1;18340:2;18320:18;;;18313:30;18379:34;18359:18;;;18352:62;-1:-1:-1;;;18430:18:1;;;18423:35;18475:19;;34611:85:0;18099:401:1;34611:85:0;34732:67;21566:10;34755:7;34783:15;34764:16;:34;34732:8;:67::i;:::-;-1:-1:-1;34830:4:0;;34429:413;-1:-1:-1;;;34429:413:0:o;31623:175::-;31709:4;31726:42;21566:10;31750:9;31761:6;31726:9;:42::i;46345:979::-;3980:1;4578:7;;:19;;4570:63;;;;-1:-1:-1;;;4570:63:0;;;;;;;:::i;:::-;3980:1;4711:7;:18;-1:-1:-1;;;;;46466:22:0;::::1;46447:16;46466:22:::0;;;:10:::1;:22;::::0;;;;:31;41436:4:::1;::::0;46466:53:::1;::::0;41391:3:::1;::::0;46466:53:::1;:::i;:::-;:69;;;;:::i;:::-;46447:88;;46566:8;46554;:20;;46576:13;;;;;;;;;;;;;;;;::::0;46546:44:::1;;;;;-1:-1:-1::0;;;46546:44:0::1;;;;;;;;:::i;:::-;;46601:46;46611:10;46631:4;46638:8;46601:9;:46::i;:::-;-1:-1:-1::0;;;;;46695:22:0;::::1;;::::0;;;:10:::1;:22;::::0;;;;:31;41436:4:::1;::::0;46695:56:::1;::::0;41189:1:::1;::::0;46695:56:::1;:::i;:::-;:72;;;;:::i;:::-;41481:42;46658:24;::::0;;;:10:::1;:24;::::0;;:109;;:24;;;:109:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;46822:22:0;::::1;;::::0;;;:10:::1;:22;::::0;;;;:31;41436:4:::1;::::0;46822:57:::1;::::0;41290:1:::1;::::0;46822:57:::1;:::i;:::-;:73;;;;:::i;:::-;41587:42;46778:31;::::0;;;:10:::1;:31;::::0;;:117;;:31;;;:117:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;46926:22:0;::::1;;::::0;;;:10:::1;:22;::::0;;;;:31;46906:93:::1;::::0;46920:4:::1;::::0;41436::::1;::::0;46926:56:::1;::::0;41239:1:::1;::::0;46926:56:::1;:::i;46906:93::-;41436:4;47078:47;41342:1;41137:3;47078:47;:::i;:::-;-1:-1:-1::0;;;;;47045:22:0;::::1;;::::0;;;:10:::1;:22;::::0;;;;:31;:81:::1;::::0;;::::1;:::i;:::-;:97;;;;:::i;:::-;-1:-1:-1::0;;;;;47010:22:0;::::1;;::::0;;;:10:::1;:22;::::0;;;;:132;;:22;;;:132:::1;::::0;;;::::1;:::i;:::-;::::0;;;-1:-1:-1;;47153:72:0::1;::::0;-1:-1:-1;;;47153:72:0;;47198:4:::1;47153:72;::::0;::::1;10060:34:1::0;47205:10:0::1;10110:18:1::0;;;10103:43;10162:18;;;10155:34;;;-1:-1:-1;;;;;47153:36:0;::::1;::::0;::::1;::::0;9995:18:1;;47153:72:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47266:10;-1:-1:-1::0;;;;;47241:55:0::1;47259:5;;47241:55;47278:7;47287:8;47241:55;;;;;;19221:25:1::0;;;19277:2;19262:18;;19255:34;19209:2;19194:18;;19047:248;47241:55:0::1;;;;;;;;47315:1;47307:5;;:9;;;;;;;:::i;42396:115::-:0;22835:6;;-1:-1:-1;;;;;22835:6:0;21566:10;22982:23;22974:68;;;;-1:-1:-1;;;22974:68:0;;;;;;;:::i;:::-;42465:4:::1;:9;;42473:1;42465:9;42457:18;;;::::0;::::1;;-1:-1:-1::0;42484:15:0::1;:19:::0;;-1:-1:-1;;42484:19:0::1;42502:1;42484:19;::::0;;42396:115::o;44514:221::-;44594:4;44608:44;44618:10;44638:4;44645:6;44608:9;:44::i;:::-;-1:-1:-1;;;;;44661:27:0;;;;;;:10;:27;;;;;:46;;44701:6;;44661:27;:46;;44701:6;;44661:46;:::i;:::-;;;;-1:-1:-1;44723:4:0;;44514:221;-1:-1:-1;;;;44514:221:0:o;43417:205::-;-1:-1:-1;;;;;43529:28:0;;43505:7;43529:28;;;:11;:28;;;;;;;;:46;;;;;;;;;41436:4;;43529:69;;41137:3;;43529:69;:::i;42848:177::-;-1:-1:-1;;;;;42942:27:0;;42918:7;42942:27;;;:10;:27;;;;;:36;41436:4;;42942:59;;41137:3;;42942:59;:::i;44050:456::-;22835:6;;-1:-1:-1;;;;;22835:6:0;21566:10;22982:23;22974:68;;;;-1:-1:-1;;;22974:68:0;;;;;;;:::i;:::-;44207:15:::1;::::0;::::1;;:20:::0;44199:34:::1;;;::::0;-1:-1:-1;;;44199:34:0;;14598:2:1;44199:34:0::1;::::0;::::1;14580:21:1::0;14637:1;14617:18;;;14610:29;-1:-1:-1;;;14655:18:1;;;14648:31;14696:18;;44199:34:0::1;14396:324:1::0;44199:34:0::1;44242:19;::::0;44293:164:::1;44302:26:::0;;::::1;44293:164;;;44360:6;;44367:1;44360:9;;;;;;;:::i;:::-;;;;;;;44345:24;;;;;:::i;:::-;;;44438:6;;44445:1;44438:9;;;;;;;:::i;:::-;;;;;;;44380:11;:33;44392:17;;44410:1;44392:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44380:33:0::1;-1:-1:-1::0;;;;;44380:33:0::1;;;;;;;;;;;;:42;;:55;44423:8;;44432:1;44423:11;;;;;;;:::i;:::-;;;;;;;44380:55;;;;;;;;;;;;:67;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;44330:3:0;;-1:-1:-1;44330:3:0::1;::::0;::::1;:::i;:::-;;;;44293:164;;;44465:33;44479:4;44486:11;44465:5;:33::i;:::-;44190:316;;44050:456:::0;;;;;;:::o;45629:708::-;45787:6;3980:1;4578:7;;:19;;4570:63;;;;-1:-1:-1;;;4570:63:0;;;;;;;:::i;:::-;3980:1;4711:7;:18;45823:1:::1;45814:10:::0;::::1;45806:43;;;::::0;-1:-1:-1;;;45806:43:0;;14249:2:1;45806:43:0::1;::::0;::::1;14231:21:1::0;14288:2;14268:18;;;14261:30;-1:-1:-1;;;14307:18:1;;;14300:50;14367:18;;45806:43:0::1;14047:344:1::0;45806:43:0::1;45892:10;45860:17;45880:23:::0;;;:11:::1;:23;::::0;;;;;;;:41;;;;;;;;;41436:4:::1;::::0;45880:64:::1;::::0;41137:3:::1;::::0;45880:64:::1;:::i;:::-;:80;;;;:::i;:::-;45860:100:::0;-1:-1:-1;45971:16:0::1;45990:27;::::0;;::::1;46001:4:::0;45990:27:::1;:::i;:::-;45971:46;;46049:8;46036:9;:21;;46059:12;;;;;;;;;;;;;;;;::::0;46028:44:::1;;;;;-1:-1:-1::0;;;46028:44:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;46095:10:0::1;46083:23;::::0;;;:11:::1;:23;::::0;;;;;;;:41;;;;;;;;:54;;46128:9;;46083:23;:54:::1;::::0;46128:9;;46083:54:::1;:::i;:::-;::::0;;;-1:-1:-1;46148:42:0::1;::::0;-1:-1:-1;46166:4:0::1;46173::::0;46180:9;46148::::1;:42::i;:::-;46221:5;::::0;46206:54:::1;::::0;11178:25:1;;;46240:7:0;;46228:10:::1;::::0;46206:54:::1;::::0;11166:2:1;11151:18;46206:54:0::1;;;;;;;46279:1;46271:5;;:9;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;3936:1:0;4890:7;:22;-1:-1:-1;;;;46298:31:0;45629:708;-1:-1:-1;;;;;;;;45629:708:0:o;23671:201::-;22835:6;;-1:-1:-1;;;;;22835:6:0;21566:10;22982:23;22974:68;;;;-1:-1:-1;;;22974:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23760:22:0;::::1;23752:73;;;::::0;-1:-1:-1;;;23752:73:0;;13032:2:1;23752:73:0::1;::::0;::::1;13014:21:1::0;13071:2;13051:18;;;13044:30;13110:34;13090:18;;;13083:62;-1:-1:-1;;;13161:18:1;;;13154:36;13207:19;;23752:73:0::1;12830:402:1::0;23752:73:0::1;23836:28;23855:8;23836:18;:28::i;:::-;23671:201:::0;:::o;44743:249::-;44841:4;44855:44;44865:10;44885:4;44892:6;44855:9;:44::i;:::-;-1:-1:-1;;;;;44908:28:0;;;;;;:11;:28;;;;;;;;:46;;;;;;;;:56;;44958:6;;44908:28;:56;;44958:6;;44908:56;:::i;:::-;;;;-1:-1:-1;44980:4:0;;44743:249;-1:-1:-1;;;;;44743:249:0:o;38113:380::-;-1:-1:-1;;;;;38249:19:0;;38241:68;;;;-1:-1:-1;;;38241:68:0;;16849:2:1;38241:68:0;;;16831:21:1;16888:2;16868:18;;;16861:30;16927:34;16907:18;;;16900:62;-1:-1:-1;;;16978:18:1;;;16971:34;17022:19;;38241:68:0;16647:400:1;38241:68:0;-1:-1:-1;;;;;38328:21:0;;38320:68;;;;-1:-1:-1;;;38320:68:0;;13439:2:1;38320:68:0;;;13421:21:1;13478:2;13458:18;;;13451:30;13517:34;13497:18;;;13490:62;-1:-1:-1;;;13568:18:1;;;13561:32;13610:19;;38320:68:0;13237:398:1;38320:68:0;-1:-1:-1;;;;;38401:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;38453:32;;11178:25:1;;;38453:32:0;;11151:18:1;38453:32:0;;;;;;;;38113:380;;;:::o;35332:733::-;-1:-1:-1;;;;;35472:20:0;;35464:70;;;;-1:-1:-1;;;35464:70:0;;16443:2:1;35464:70:0;;;16425:21:1;16482:2;16462:18;;;16455:30;16521:34;16501:18;;;16494:62;-1:-1:-1;;;16572:18:1;;;16565:35;16617:19;;35464:70:0;16241:401:1;35464:70:0;-1:-1:-1;;;;;35553:23:0;;35545:71;;;;-1:-1:-1;;;35545:71:0;;12225:2:1;35545:71:0;;;12207:21:1;12264:2;12244:18;;;12237:30;12303:34;12283:18;;;12276:62;-1:-1:-1;;;12354:18:1;;;12347:33;12397:19;;35545:71:0;12023:399:1;35545:71:0;-1:-1:-1;;;;;35713:17:0;;35689:21;35713:17;;;;;;;;;;;35749:23;;;;35741:74;;;;-1:-1:-1;;;35741:74:0;;13842:2:1;35741:74:0;;;13824:21:1;13881:2;13861:18;;;13854:30;13920:34;13900:18;;;13893:62;-1:-1:-1;;;13971:18:1;;;13964:36;14017:19;;35741:74:0;13640:402:1;35741:74:0;-1:-1:-1;;;;;35851:17:0;;;:9;:17;;;;;;;;;;;35871:22;;;35851:42;;35915:20;;;;;;;;:30;;35887:6;;35851:9;35915:30;;35887:6;;35915:30;:::i;:::-;;;;;;;;35980:9;-1:-1:-1;;;;;35963:35:0;35972:6;-1:-1:-1;;;;;35963:35:0;;35991:6;35963:35;;;;11178:25:1;;11166:2;11151:18;;11032:177;35963:35:0;;;;;;;;35453:612;35332:733;;;:::o;37084:591::-;-1:-1:-1;;;;;37168:21:0;;37160:67;;;;-1:-1:-1;;;37160:67:0;;16041:2:1;37160:67:0;;;16023:21:1;16080:2;16060:18;;;16053:30;16119:34;16099:18;;;16092:62;-1:-1:-1;;;16170:18:1;;;16163:31;16211:19;;37160:67:0;15839:397:1;37160:67:0;-1:-1:-1;;;;;37327:18:0;;37302:22;37327:18;;;;;;;;;;;37364:24;;;;37356:71;;;;-1:-1:-1;;;37356:71:0;;12629:2:1;37356:71:0;;;12611:21:1;12668:2;12648:18;;;12641:30;12707:34;12687:18;;;12680:62;-1:-1:-1;;;12758:18:1;;;12751:32;12800:19;;37356:71:0;12427:398:1;37356:71:0;-1:-1:-1;;;;;37463:18:0;;:9;:18;;;;;;;;;;37484:23;;;37463:44;;37529:12;:22;;37501:6;;37463:9;37529:22;;37501:6;;37529:22;:::i;:::-;;;;-1:-1:-1;;37569:37:0;;11178:25:1;;;37595:1:0;;-1:-1:-1;;;;;37569:37:0;;;;;11166:2:1;11151:18;37569:37:0;11032:177:1;49096:146:0;49174:4;49197:37;49216:5;41007:66;49229:4;49197:18;:37::i;36352:399::-;-1:-1:-1;;;;;36436:21:0;;36428:65;;;;-1:-1:-1;;;36428:65:0;;18707:2:1;36428:65:0;;;18689:21:1;18746:2;18726:18;;;18719:30;18785:33;18765:18;;;18758:61;18836:18;;36428:65:0;18505:355:1;36428:65:0;36584:6;36568:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;36601:18:0;;:9;:18;;;;;;;;;;:28;;36623:6;;36601:9;:28;;36623:6;;36601:28;:::i;:::-;;;;-1:-1:-1;;36645:37:0;;11178:25:1;;;-1:-1:-1;;;;;36645:37:0;;;36662:1;;36645:37;;11166:2:1;11151:18;36645:37:0;;;;;;;42284:104:::1;42233:155:::0;:::o;24032:191::-;24125:6;;;-1:-1:-1;;;;;24142:17:0;;;-1:-1:-1;;;;;;24142:17:0;;;;;;;24175:40;;24125:6;;;24142:17;24125:6;;24175:40;;24106:16;;24175:40;24095:128;24032:191;:::o;908:190::-;1033:4;1086;1057:25;1070:5;1077:4;1057:12;:25::i;:::-;:33;;908:190;-1:-1:-1;;;;908:190:0:o;1460:701::-;1543:7;1586:4;1543:7;1601:523;1625:5;:12;1621:1;:16;1601:523;;;1659:20;1682:5;1688:1;1682:8;;;;;;;;:::i;:::-;;;;;;;1659:31;;1725:12;1709;:28;1705:408;;1862:44;;;;;;9307:19:1;;;9342:12;;;9335:28;;;9379:12;;1862:44:0;;;;;;;;;;;;1852:55;;;;;;1837:70;;1705:408;;;2052:44;;;;;;9307:19:1;;;9342:12;;;9335:28;;;9379:12;;2052:44:0;;;;;;;;;;;;2042:55;;;;;;2027:70;;1705:408;-1:-1:-1;1639:3:0;;;;:::i;:::-;;;;1601:523;;;-1:-1:-1;2141:12:0;1460:701;-1:-1:-1;;;1460:701:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:367::-;255:8;265:6;319:3;312:4;304:6;300:17;296:27;286:55;;337:1;334;327:12;286:55;-1:-1:-1;360:20:1;;403:18;392:30;;389:50;;;435:1;432;425:12;389:50;472:4;464:6;460:17;448:29;;532:3;525:4;515:6;512:1;508:14;500:6;496:27;492:38;489:47;486:67;;;549:1;546;539:12;486:67;192:367;;;;;:::o;564:723::-;618:5;671:3;664:4;656:6;652:17;648:27;638:55;;689:1;686;679:12;638:55;725:6;712:20;751:4;774:18;770:2;767:26;764:52;;;796:18;;:::i;:::-;842:2;839:1;835:10;865:28;889:2;885;881:11;865:28;:::i;:::-;927:15;;;958:12;;;;990:15;;;1024;;;1020:24;;1017:33;-1:-1:-1;1014:53:1;;;1063:1;1060;1053:12;1014:53;1085:1;1076:10;;1095:163;1109:2;1106:1;1103:9;1095:163;;;1166:17;;1154:30;;1127:1;1120:9;;;;;1204:12;;;;1236;;1095:163;;;-1:-1:-1;1276:5:1;564:723;-1:-1:-1;;;;;;;564:723:1:o;1292:347::-;1343:8;1353:6;1407:3;1400:4;1392:6;1388:17;1384:27;1374:55;;1425:1;1422;1415:12;1374:55;-1:-1:-1;1448:20:1;;1491:18;1480:30;;1477:50;;;1523:1;1520;1513:12;1477:50;1560:4;1552:6;1548:17;1536:29;;1612:3;1605:4;1596:6;1588;1584:19;1580:30;1577:39;1574:59;;;1629:1;1626;1619:12;1644:186;1703:6;1756:2;1744:9;1735:7;1731:23;1727:32;1724:52;;;1772:1;1769;1762:12;1724:52;1795:29;1814:9;1795:29;:::i;1835:260::-;1903:6;1911;1964:2;1952:9;1943:7;1939:23;1935:32;1932:52;;;1980:1;1977;1970:12;1932:52;2003:29;2022:9;2003:29;:::i;:::-;1993:39;;2051:38;2085:2;2074:9;2070:18;2051:38;:::i;:::-;2041:48;;1835:260;;;;;:::o;2100:1365::-;2254:6;2262;2270;2278;2286;2339:3;2327:9;2318:7;2314:23;2310:33;2307:53;;;2356:1;2353;2346:12;2307:53;2379:29;2398:9;2379:29;:::i;:::-;2369:39;;2427:2;2448:38;2482:2;2471:9;2467:18;2448:38;:::i;:::-;2438:48;;2537:2;2526:9;2522:18;2509:32;2560:18;2601:2;2593:6;2590:14;2587:34;;;2617:1;2614;2607:12;2587:34;2640:61;2693:7;2684:6;2673:9;2669:22;2640:61;:::i;:::-;2630:71;;2754:2;2743:9;2739:18;2726:32;2710:48;;2783:2;2773:8;2770:16;2767:36;;;2799:1;2796;2789:12;2767:36;2822:63;2877:7;2866:8;2855:9;2851:24;2822:63;:::i;:::-;2812:73;;2938:3;2927:9;2923:19;2910:33;2894:49;;2968:2;2958:8;2955:16;2952:36;;;2984:1;2981;2974:12;2952:36;3022:8;3011:9;3007:24;2997:34;;3069:7;3062:4;3058:2;3054:13;3050:27;3040:55;;3091:1;3088;3081:12;3040:55;3127:2;3114:16;3149:2;3145;3142:10;3139:36;;;3155:18;;:::i;:::-;3197:53;3240:2;3221:13;;-1:-1:-1;;3217:27:1;3213:36;;3197:53;:::i;:::-;3184:66;;3273:2;3266:5;3259:17;3313:7;3308:2;3303;3299;3295:11;3291:20;3288:33;3285:53;;;3334:1;3331;3324:12;3285:53;3389:2;3384;3380;3376:11;3371:2;3364:5;3360:14;3347:45;3433:1;3428:2;3423;3416:5;3412:14;3408:23;3401:34;;3454:5;3444:15;;;;;2100:1365;;;;;;;;:::o;3470:328::-;3547:6;3555;3563;3616:2;3604:9;3595:7;3591:23;3587:32;3584:52;;;3632:1;3629;3622:12;3584:52;3655:29;3674:9;3655:29;:::i;:::-;3645:39;;3703:38;3737:2;3726:9;3722:18;3703:38;:::i;:::-;3693:48;;3788:2;3777:9;3773:18;3760:32;3750:42;;3470:328;;;;;:::o;3803:626::-;3900:6;3908;3916;3924;3932;3985:3;3973:9;3964:7;3960:23;3956:33;3953:53;;;4002:1;3999;3992:12;3953:53;4025:29;4044:9;4025:29;:::i;:::-;4015:39;;4073:38;4107:2;4096:9;4092:18;4073:38;:::i;:::-;4063:48;;4158:2;4147:9;4143:18;4130:32;4120:42;;4213:2;4202:9;4198:18;4185:32;4240:18;4232:6;4229:30;4226:50;;;4272:1;4269;4262:12;4226:50;4311:58;4361:7;4352:6;4341:9;4337:22;4311:58;:::i;:::-;3803:626;;;;-1:-1:-1;3803:626:1;;-1:-1:-1;4388:8:1;;4285:84;3803:626;-1:-1:-1;;;3803:626:1:o;4434:695::-;4540:6;4548;4556;4564;4572;4580;4633:3;4621:9;4612:7;4608:23;4604:33;4601:53;;;4650:1;4647;4640:12;4601:53;4673:29;4692:9;4673:29;:::i;:::-;4663:39;;4721:38;4755:2;4744:9;4740:18;4721:38;:::i;:::-;4711:48;;4806:2;4795:9;4791:18;4778:32;4768:42;;4857:2;4846:9;4842:18;4829:32;4819:42;;4912:3;4901:9;4897:19;4884:33;4940:18;4932:6;4929:30;4926:50;;;4972:1;4969;4962:12;4926:50;5011:58;5061:7;5052:6;5041:9;5037:22;5011:58;:::i;:::-;4434:695;;;;-1:-1:-1;4434:695:1;;-1:-1:-1;4434:695:1;;5088:8;;4434:695;-1:-1:-1;;;4434:695:1:o;5134:254::-;5202:6;5210;5263:2;5251:9;5242:7;5238:23;5234:32;5231:52;;;5279:1;5276;5269:12;5231:52;5302:29;5321:9;5302:29;:::i;:::-;5292:39;5378:2;5363:18;;;;5350:32;;-1:-1:-1;;;5134:254:1:o;5393:322::-;5470:6;5478;5486;5539:2;5527:9;5518:7;5514:23;5510:32;5507:52;;;5555:1;5552;5545:12;5507:52;5578:29;5597:9;5578:29;:::i;:::-;5568:39;5654:2;5639:18;;5626:32;;-1:-1:-1;5705:2:1;5690:18;;;5677:32;;5393:322;-1:-1:-1;;;5393:322:1:o;5720:773::-;5842:6;5850;5858;5866;5919:2;5907:9;5898:7;5894:23;5890:32;5887:52;;;5935:1;5932;5925:12;5887:52;5975:9;5962:23;6004:18;6045:2;6037:6;6034:14;6031:34;;;6061:1;6058;6051:12;6031:34;6100:70;6162:7;6153:6;6142:9;6138:22;6100:70;:::i;:::-;6189:8;;-1:-1:-1;6074:96:1;-1:-1:-1;6277:2:1;6262:18;;6249:32;;-1:-1:-1;6293:16:1;;;6290:36;;;6322:1;6319;6312:12;6290:36;;6361:72;6425:7;6414:8;6403:9;6399:24;6361:72;:::i;:::-;5720:773;;;;-1:-1:-1;6452:8:1;-1:-1:-1;;;;5720:773:1:o;6498:1088::-;6656:6;6664;6672;6680;6688;6696;6749:2;6737:9;6728:7;6724:23;6720:32;6717:52;;;6765:1;6762;6755:12;6717:52;6805:9;6792:23;6834:18;6875:2;6867:6;6864:14;6861:34;;;6891:1;6888;6881:12;6861:34;6930:70;6992:7;6983:6;6972:9;6968:22;6930:70;:::i;:::-;7019:8;;-1:-1:-1;6904:96:1;-1:-1:-1;7107:2:1;7092:18;;7079:32;;-1:-1:-1;7123:16:1;;;7120:36;;;7152:1;7149;7142:12;7120:36;7191:72;7255:7;7244:8;7233:9;7229:24;7191:72;:::i;:::-;7282:8;;-1:-1:-1;7165:98:1;-1:-1:-1;7370:2:1;7355:18;;7342:32;;-1:-1:-1;7386:16:1;;;7383:36;;;7415:1;7412;7405:12;7383:36;;7454:72;7518:7;7507:8;7496:9;7492:24;7454:72;:::i;7591:286::-;7649:6;7702:2;7690:9;7681:7;7677:23;7673:32;7670:52;;;7718:1;7715;7708:12;7670:52;7744:23;;-1:-1:-1;;;;;;7796:32:1;;7786:43;;7776:71;;7843:1;7840;7833:12;7882:180;7941:6;7994:2;7982:9;7973:7;7969:23;7965:32;7962:52;;;8010:1;8007;8000:12;7962:52;-1:-1:-1;8033:23:1;;7882:180;-1:-1:-1;7882:180:1:o;8067:505::-;8162:6;8170;8178;8231:2;8219:9;8210:7;8206:23;8202:32;8199:52;;;8247:1;8244;8237:12;8199:52;8283:9;8270:23;8260:33;;8344:2;8333:9;8329:18;8316:32;8371:18;8363:6;8360:30;8357:50;;;8403:1;8400;8393:12;8357:50;8442:70;8504:7;8495:6;8484:9;8480:22;8442:70;:::i;:::-;8067:505;;8531:8;;-1:-1:-1;8416:96:1;;-1:-1:-1;;;;8067:505:1:o;8577:269::-;8634:6;8687:2;8675:9;8666:7;8662:23;8658:32;8655:52;;;8703:1;8700;8693:12;8655:52;8742:9;8729:23;8792:4;8785:5;8781:16;8774:5;8771:27;8761:55;;8812:1;8809;8802:12;11421:597;11533:4;11562:2;11591;11580:9;11573:21;11623:6;11617:13;11666:6;11661:2;11650:9;11646:18;11639:34;11691:1;11701:140;11715:6;11712:1;11709:13;11701:140;;;11810:14;;;11806:23;;11800:30;11776:17;;;11795:2;11772:26;11765:66;11730:10;;11701:140;;;11859:6;11856:1;11853:13;11850:91;;;11929:1;11924:2;11915:6;11904:9;11900:22;11896:31;11889:42;11850:91;-1:-1:-1;12002:2:1;11981:15;-1:-1:-1;;11977:29:1;11962:45;;;;12009:2;11958:54;;11421:597;-1:-1:-1;;;11421:597:1:o;15134:356::-;15336:2;15318:21;;;15355:18;;;15348:30;15414:34;15409:2;15394:18;;15387:62;15481:2;15466:18;;15134:356::o;17739:355::-;17941:2;17923:21;;;17980:2;17960:18;;;17953:30;18019:33;18014:2;17999:18;;17992:61;18085:2;18070:18;;17739:355::o;19489:275::-;19560:2;19554:9;19625:2;19606:13;;-1:-1:-1;;19602:27:1;19590:40;;19660:18;19645:34;;19681:22;;;19642:62;19639:88;;;19707:18;;:::i;:::-;19743:2;19736:22;19489:275;;-1:-1:-1;19489:275:1:o;19769:128::-;19809:3;19840:1;19836:6;19833:1;19830:13;19827:39;;;19846:18;;:::i;:::-;-1:-1:-1;19882:9:1;;19769:128::o;19902:217::-;19942:1;19968;19958:132;;20012:10;20007:3;20003:20;20000:1;19993:31;20047:4;20044:1;20037:15;20075:4;20072:1;20065:15;19958:132;-1:-1:-1;20104:9:1;;19902:217::o;20124:168::-;20164:7;20230:1;20226;20222:6;20218:14;20215:1;20212:21;20207:1;20200:9;20193:17;20189:45;20186:71;;;20237:18;;:::i;:::-;-1:-1:-1;20277:9:1;;20124:168::o;20297:125::-;20337:4;20365:1;20362;20359:8;20356:34;;;20370:18;;:::i;:::-;-1:-1:-1;20407:9:1;;20297:125::o;20427:380::-;20506:1;20502:12;;;;20549;;;20570:61;;20624:4;20616:6;20612:17;20602:27;;20570:61;20677:2;20669:6;20666:14;20646:18;20643:38;20640:161;;;20723:10;20718:3;20714:20;20711:1;20704:31;20758:4;20755:1;20748:15;20786:4;20783:1;20776:15;20640:161;;20427:380;;;:::o;20812:135::-;20851:3;-1:-1:-1;;20872:17:1;;20869:43;;;20892:18;;:::i;:::-;-1:-1:-1;20939:1:1;20928:13;;20812:135::o;20952:127::-;21013:10;21008:3;21004:20;21001:1;20994:31;21044:4;21041:1;21034:15;21068:4;21065:1;21058:15;21084:127;21145:10;21140:3;21136:20;21133:1;21126:31;21176:4;21173:1;21166:15;21200:4;21197:1;21190:15;21216:127;21277:10;21272:3;21268:20;21265:1;21258:31;21308:4;21305:1;21298:15;21332:4;21329:1;21322:15

Swarm Source

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