ETH Price: $1,598.13 (+0.90%)

Contract

0xB426742139a18f7b9CCaA9Bb5c4D3a550b1b0Fcd

Overview

ETH Balance

49.525 ETH

ETH Value

$79,147.61 (@ $1,598.13/ETH)

Token Holdings

Transaction Hash
Method
Block
From
To
Mint WL270838382025-04-19 10:18:169 secs ago1745057896IN
0xB4267421...50b1b0Fcd
0 ETH0.000005190.04525
Mint WL170838102025-04-19 10:17:4837 secs ago1745057868IN
0xB4267421...50b1b0Fcd
0.025 ETH0.000006810.04525
Mint WL370838012025-04-19 10:17:3946 secs ago1745057859IN
0xB4267421...50b1b0Fcd
0 ETH0.000006690.04525
Mint WL270837592025-04-19 10:16:571 min ago1745057817IN
0xB4267421...50b1b0Fcd
0 ETH0.000006490.04525
Mint WL170836992025-04-19 10:15:572 mins ago1745057757IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000005450.04525
Mint WL170836962025-04-19 10:15:542 mins ago1745057754IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000005040.04525
Mint WL270836832025-04-19 10:15:412 mins ago1745057741IN
0xB4267421...50b1b0Fcd
0 ETH0.000006740.04525
Mint WL170836792025-04-19 10:15:372 mins ago1745057737IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000005040.04525
Mint WL370836782025-04-19 10:15:362 mins ago1745057736IN
0xB4267421...50b1b0Fcd
0 ETH0.000006710.04525
Mint WL170836712025-04-19 10:15:292 mins ago1745057729IN
0xB4267421...50b1b0Fcd
0.025 ETH0.00000780.04525
Mint WL170836662025-04-19 10:15:243 mins ago1745057724IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000005040.04525
Mint WL170836482025-04-19 10:15:063 mins ago1745057706IN
0xB4267421...50b1b0Fcd
0.005 ETH0.00000530.04525
Mint WL270836442025-04-19 10:15:023 mins ago1745057702IN
0xB4267421...50b1b0Fcd
0 ETH0.00000550.04525
Mint WL170836342025-04-19 10:14:523 mins ago1745057692IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000005910.04525
Mint WL370836222025-04-19 10:14:403 mins ago1745057680IN
0xB4267421...50b1b0Fcd
0 ETH0.000008120.04525
Mint WL270836212025-04-19 10:14:393 mins ago1745057679IN
0xB4267421...50b1b0Fcd
0 ETH0.000007190.04525
Mint WL170836052025-04-19 10:14:234 mins ago1745057663IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000007330.04525
Mint WL170836042025-04-19 10:14:224 mins ago1745057662IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000008730.04525
Mint WL170835672025-04-19 10:13:284 mins ago1745057608IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000005320.04525
Mint WL170835472025-04-19 10:13:085 mins ago1745057588IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000006270.04525
Mint WL170835042025-04-19 10:12:256 mins ago1745057545IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000005450.04525
Mint WL270835012025-04-19 10:12:226 mins ago1745057542IN
0xB4267421...50b1b0Fcd
0 ETH0.000004960.04525
Mint WL170834942025-04-19 10:12:156 mins ago1745057535IN
0xB4267421...50b1b0Fcd
0.02 ETH0.000006150.04525
Mint WL170834772025-04-19 10:11:586 mins ago1745057518IN
0xB4267421...50b1b0Fcd
0.005 ETH0.000006330.04525
Mint WL270834682025-04-19 10:11:496 mins ago1745057509IN
0xB4267421...50b1b0Fcd
0 ETH0.000005280.04525
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
70838102025-04-19 10:17:4837 secs ago1745057868
0xB4267421...50b1b0Fcd
0.025 ETH
70836992025-04-19 10:15:572 mins ago1745057757
0xB4267421...50b1b0Fcd
0.005 ETH
70836962025-04-19 10:15:542 mins ago1745057754
0xB4267421...50b1b0Fcd
0.005 ETH
70836792025-04-19 10:15:372 mins ago1745057737
0xB4267421...50b1b0Fcd
0.005 ETH
70836712025-04-19 10:15:292 mins ago1745057729
0xB4267421...50b1b0Fcd
0.025 ETH
70836662025-04-19 10:15:243 mins ago1745057724
0xB4267421...50b1b0Fcd
0.005 ETH
70836482025-04-19 10:15:063 mins ago1745057706
0xB4267421...50b1b0Fcd
0.005 ETH
70836342025-04-19 10:14:523 mins ago1745057692
0xB4267421...50b1b0Fcd
0.005 ETH
70836052025-04-19 10:14:234 mins ago1745057663
0xB4267421...50b1b0Fcd
0.005 ETH
70836042025-04-19 10:14:224 mins ago1745057662
0xB4267421...50b1b0Fcd
0.005 ETH
70835672025-04-19 10:13:284 mins ago1745057608
0xB4267421...50b1b0Fcd
0.005 ETH
70835472025-04-19 10:13:085 mins ago1745057588
0xB4267421...50b1b0Fcd
0.005 ETH
70835042025-04-19 10:12:256 mins ago1745057545
0xB4267421...50b1b0Fcd
0.005 ETH
70834942025-04-19 10:12:156 mins ago1745057535
0xB4267421...50b1b0Fcd
0.02 ETH
70834772025-04-19 10:11:586 mins ago1745057518
0xB4267421...50b1b0Fcd
0.005 ETH
70834662025-04-19 10:11:476 mins ago1745057507
0xB4267421...50b1b0Fcd
0.02 ETH
70834532025-04-19 10:11:346 mins ago1745057494
0xB4267421...50b1b0Fcd
0.1 ETH
70834362025-04-19 10:11:177 mins ago1745057477
0xB4267421...50b1b0Fcd
0.005 ETH
70834062025-04-19 10:10:477 mins ago1745057447
0xB4267421...50b1b0Fcd
0.1 ETH
70833672025-04-19 10:10:088 mins ago1745057408
0xB4267421...50b1b0Fcd
0.005 ETH
70833672025-04-19 10:10:088 mins ago1745057408
0xB4267421...50b1b0Fcd
0.1 ETH
70833382025-04-19 10:09:398 mins ago1745057379
0xB4267421...50b1b0Fcd
0.1 ETH
70833132025-04-19 10:09:149 mins ago1745057354
0xB4267421...50b1b0Fcd
0.045 ETH
70833092025-04-19 10:09:109 mins ago1745057350
0xB4267421...50b1b0Fcd
0.05 ETH
70832812025-04-19 10:08:309 mins ago1745057310
0xB4267421...50b1b0Fcd
0.05 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LootBox

Compiler Version
v0.8.24+commit.e11b9ed9

ZkSolc Version
v1.4.1

Optimization Enabled:
Yes with Mode 3

Other Settings:
paris EvmVersion
File 1 of 2 : LootBox.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import {ERC1155} from "./Utils.sol";
import {Ownable} from "./Utils.sol";
import {MerkleProof} from "./Utils.sol";
import {IERC1155Receiver} from "./Utils.sol";

contract LootBox is ERC1155, Ownable {
    uint256 private _entropyNonce;

    uint256[] public tokenIdPool = [1, 2, 3, 4, 5, 6, 7];
    uint256[] public tokenProbabilities = [32, 32, 15, 10, 4, 6, 1];

    enum MintType {
        WL1,
        WL2,
        WL3
    }

    struct MintConfig {
        uint256 price;
        uint256 startTime;
        uint256 endTime;
        uint8 freeMintsAllowed;
        bytes32 merkleRoot;
    }

    mapping(MintType => MintConfig) public mintConfigs;
    mapping(address => mapping(MintType => uint256)) public userMints;
    mapping(uint256 => uint256) public tokenIdSupply;

    event URIUpdated(string newURI);
    event Minted(
        address indexed minter,
        uint256 indexed tokenId,
        MintType indexed mintType
    );
    event MintConfigUpdated(
        MintType indexed mintType,
        uint256 price,
        uint256 startTime,
        uint256 endTime,
        bytes32 merkleRoot,
        uint8 freeMints
    );
    event OddsUpdated(uint256[] newProbabilities);

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status = _NOT_ENTERED;

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }

    constructor() ERC1155("77-Bit Origin Skins", "77OS", "https://api.ipfs.metadata/") {}

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal override {
        super._mint(to, id, amount, data);
        emit TransferSingle(_msgSender(), address(0), to, id, amount);
    }

    function updateMintConfig(
        MintType mintType,
        uint256 price,
        uint256 startTime,
        uint256 endTime,
        bytes32 merkleRoot,
        uint8 freeMints
    ) external onlyOwner {
        require(startTime < endTime, "Invalid mint time");
        mintConfigs[mintType] = MintConfig(
            price,
            startTime,
            endTime,
            freeMints,
            merkleRoot
        );
        emit MintConfigUpdated(
            mintType,
            price,
            startTime,
            endTime,
            merkleRoot,
            freeMints
        );
    }

    function setURI(string memory newURI) external onlyOwner {
        _setURI(newURI);
        emit URIUpdated(newURI);
    }

    function withdraw() external onlyOwner {
        (bool success, ) = owner().call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function updateOdds(
        uint256[] calldata newProbabilities
    ) external onlyOwner {
        uint256 len = newProbabilities.length;
        require(len == tokenProbabilities.length, "Length mismatch");

        uint256 sum;
        for (uint256 i = 0; i < len; ) {
            require(newProbabilities[i] > 0, "Probability cannot be zero");
            sum += newProbabilities[i];
            unchecked {
                ++i;
            }
        }
        require(sum == 100, "Probabilities must sum to 100");
        tokenProbabilities = newProbabilities;
        emit OddsUpdated(newProbabilities);
    }

    function mintWL1(
        uint256 quantity,
        bytes32[] calldata proof
    ) external payable nonReentrant {
        _mintTokens(quantity, MintType.WL1, proof);
    }

    function mintWL2(
        uint256 quantity,
        bytes32[] calldata proof
    ) external payable nonReentrant {
        _mintTokens(quantity, MintType.WL2, proof);
    }

    function mintWL3(
        uint256 quantity,
        bytes32[] calldata proof
    ) external payable nonReentrant {
        _mintTokens(quantity, MintType.WL3, proof);
    }

    function _mintTokens(
        uint256 quantity,
        MintType mintType,
        bytes32[] memory proof
    ) internal {
        require(quantity > 0, "Must mint at least 1 NFT");

        MintConfig memory config = mintConfigs[mintType];
        require(
            block.timestamp >= config.startTime &&
                block.timestamp <= config.endTime,
            "Mint not active"
        );
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(
            MerkleProof.verify(proof, config.merkleRoot, leaf),
            "Not whitelisted"
        );

        // Free vs paid calculation
        uint256 freeMintsUsed = userMints[msg.sender][mintType];
        uint256 freeRemaining = config.freeMintsAllowed > freeMintsUsed
            ? config.freeMintsAllowed - freeMintsUsed
            : 0;
        uint256 freeQuantity = quantity > freeRemaining
            ? freeRemaining
            : quantity;
        uint256 paidQuantity = quantity - freeQuantity;

        if (freeQuantity > 0) {
            userMints[msg.sender][mintType] += freeQuantity;
        }

        require(msg.value == paidQuantity * config.price, "Incorrect ETH sent");
        for (uint256 i = 0; i < quantity; i++) {
            uint256 tokenId = _getRandomTokenId();
            tokenIdSupply[tokenId]++;
            emit Minted(msg.sender, tokenId, mintType);
            _mint(msg.sender, tokenId, 1, "");
        }
    }

    function _getRandomTokenId() internal returns (uint256) {
        // Increment nonce for each generation
        _entropyNonce++;
        uint256 rand = uint256(
            keccak256(
                abi.encodePacked(
                    msg.sender,
                    tx.gasprice,
                    block.timestamp,
                    blockhash(block.number),
                    _entropyNonce
                )
            )
        ) % 100;
        uint256 cumulative;
        for (uint256 i = 0; i < tokenProbabilities.length; i++) {
            cumulative += tokenProbabilities[i];
            if (rand < cumulative) {
                return tokenIdPool[i];
            }
        }
        return tokenIdPool[tokenIdPool.length - 1];
    }
}

File 2 of 2 : Utils.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

library Hashes {
    function commutativeKeccak256(
        bytes32 a,
        bytes32 b
    ) internal pure returns (bytes32) {
        return a < b ? efficientKeccak256(a, b) : efficientKeccak256(b, a);
    }

    /**
     * @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory.
     */
    function efficientKeccak256(
        bytes32 a,
        bytes32 b
    ) internal pure returns (bytes32 value) {
        assembly ("memory-safe") {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

library MerkleProof {
    /**
     *@dev The multiproof provided is not valid.
     */
    error MerkleProofInvalidMultiproof();

    /**
     * @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.
     *
     * This version handles proofs in memory with the default hashing function.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leaves & pre-images are assumed to be sorted.
     *
     * This version handles proofs in memory with the default hashing function.
     */
    function processProof(
        bytes32[] memory proof,
        bytes32 leaf
    ) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = Hashes.commutativeKeccak256(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @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.
     *
     * This version handles proofs in memory with a custom hashing function.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bool) {
        return processProof(proof, leaf, hasher) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leaves & pre-images are assumed to be sorted.
     *
     * This version handles proofs in memory with a custom hashing function.
     */
    function processProof(
        bytes32[] memory proof,
        bytes32 leaf,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = hasher(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @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.
     *
     * This version handles proofs in calldata with the default hashing function.
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leaves & pre-images are assumed to be sorted.
     *
     * This version handles proofs in calldata with the default hashing function.
     */
    function processProofCalldata(
        bytes32[] calldata proof,
        bytes32 leaf
    ) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = Hashes.commutativeKeccak256(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @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.
     *
     * This version handles proofs in calldata with a custom hashing function.
     */
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bool) {
        return processProofCalldata(proof, leaf, hasher) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leaves & pre-images are assumed to be sorted.
     *
     * This version handles proofs in calldata with a custom hashing function.
     */
    function processProofCalldata(
        bytes32[] calldata proof,
        bytes32 leaf,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = hasher(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * This version handles multiproofs in memory with the default hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
     * The `leaves` must be validated independently. See {processMultiProof}.
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * This version handles multiproofs in memory with the default hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
     * validating the leaves elsewhere.
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofFlagsLen = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proof.length != proofFlagsLen + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](proofFlagsLen);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < proofFlagsLen; i++) {
            bytes32 a = leafPos < leavesLen
                ? leaves[leafPos++]
                : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = Hashes.commutativeKeccak256(a, b);
        }

        if (proofFlagsLen > 0) {
            if (proofPos != proof.length) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[proofFlagsLen - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * This version handles multiproofs in memory with a custom hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
     * The `leaves` must be validated independently. See {processMultiProof}.
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bool) {
        return processMultiProof(proof, proofFlags, leaves, hasher) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * This version handles multiproofs in memory with a custom hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
     * validating the leaves elsewhere.
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofFlagsLen = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proof.length != proofFlagsLen + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](proofFlagsLen);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < proofFlagsLen; i++) {
            bytes32 a = leafPos < leavesLen
                ? leaves[leafPos++]
                : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = hasher(a, b);
        }

        if (proofFlagsLen > 0) {
            if (proofPos != proof.length) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[proofFlagsLen - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * This version handles multiproofs in calldata with the default hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
     * The `leaves` must be validated independently. See {processMultiProofCalldata}.
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * This version handles multiproofs in calldata with the default hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
     * validating the leaves elsewhere.
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofFlagsLen = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proof.length != proofFlagsLen + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](proofFlagsLen);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < proofFlagsLen; i++) {
            bytes32 a = leafPos < leavesLen
                ? leaves[leafPos++]
                : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = Hashes.commutativeKeccak256(a, b);
        }

        if (proofFlagsLen > 0) {
            if (proofPos != proof.length) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[proofFlagsLen - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * This version handles multiproofs in calldata with a custom hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`.
     * The `leaves` must be validated independently. See {processMultiProofCalldata}.
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bool) {
        return
            processMultiProofCalldata(proof, proofFlags, leaves, hasher) ==
            root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * This version handles multiproofs in calldata with a custom hashing function.
     *
     * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op,
     * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not
     * validating the leaves elsewhere.
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves,
        function(bytes32, bytes32) view returns (bytes32) hasher
    ) internal view returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the Merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofFlagsLen = proofFlags.length;

        // Check proof validity.
        if (leavesLen + proof.length != proofFlagsLen + 1) {
            revert MerkleProofInvalidMultiproof();
        }

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](proofFlagsLen);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < proofFlagsLen; i++) {
            bytes32 a = leafPos < leavesLen
                ? leaves[leafPos++]
                : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = hasher(a, b);
        }

        if (proofFlagsLen > 0) {
            if (proofPos != proof.length) {
                revert MerkleProofInvalidMultiproof();
            }
            unchecked {
                return hashes[proofFlagsLen - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC1155 is IERC165 {
    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 value
    );
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );
    event ApprovalForAll(
        address indexed account,
        address indexed operator,
        bool approved
    );
    event URI(string value, uint256 indexed id);

    function balanceOf(
        address account,
        uint256 id
    ) external view returns (uint256);

    function balanceOfBatch(
        address[] calldata accounts,
        uint256[] calldata ids
    ) external view returns (uint256[] memory);

    function setApprovalForAll(address operator, bool approved) external;

    function isApprovedForAll(
        address account,
        address operator
    ) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external;
}

interface IERC1155MetadataURI is IERC1155 {
    function uri(uint256 id) external view returns (string memory);
}

interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(
        bytes4 interfaceId
    ) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {

    using Strings for uint256;

    // Token metadata
    string public name;
    string public symbol;
    string private _uri;

    // Balances and approvals
    mapping(uint256 => mapping(address => uint256)) private _balances;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Total supply tracking
    mapping(uint256 => uint256) private _totalSupply;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory uri_
    ) {
        name = _name;
        symbol = _symbol;
        _setURI(uri_);
    }

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

    // ERC1155MetadataURI
    function uri(
        uint256 tokenId
    ) public view virtual override returns (string memory) {
        return string(abi.encodePacked(_uri, tokenId.toString()));
    }

    // ERC1155
    function balanceOf(
        address account,
        uint256 id
    ) public view virtual override returns (uint256) {
        return _balances[id][account];
    }

    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory ids
    ) public view virtual override returns (uint256[] memory) {
        require(
            accounts.length == ids.length,
            "ERC1155: accounts and ids length mismatch"
        );

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

    function setApprovalForAll(
        address operator,
        bool approved
    ) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(
        address account,
        address operator
    ) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 value,
        bytes memory data
    ) public virtual override {
        revert("Soulbound: Transfers are disabled");
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory values,
        bytes memory data
    ) public virtual override {
        revert("Soulbound: Transfers are disabled");
    }

    // Internal functions
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    function _mint(
        address to,
        uint256 id,
        uint256 value,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        _balances[id][to] += value;
        _totalSupply[id] += value;

        emit TransferSingle(_msgSender(), address(0), to, id, value);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 value,
        bytes memory data
    ) internal virtual {
        if (to.code.length > 0) {
            try
                IERC1155Receiver(to).onERC1155Received(
                    operator,
                    from,
                    id,
                    value,
                    data
                )
            returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

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

    function totalSupply(uint256 id) public view returns (uint256) {
        return _totalSupply[id];
    }

    function exists(uint256 id) public view returns (bool) {
        return _totalSupply[id] > 0;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "mode": "3"
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "abi"
      ]
    }
  },
  "libraries": {},
  "isSystem": false,
  "forceEvmla": false
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum LootBox.MintType","name":"mintType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"indexed":false,"internalType":"uint8","name":"freeMints","type":"uint8"}],"name":"MintConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"enum LootBox.MintType","name":"mintType","type":"uint8"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"newProbabilities","type":"uint256[]"}],"name":"OddsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newURI","type":"string"}],"name":"URIUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum LootBox.MintType","name":"","type":"uint8"}],"name":"mintConfigs","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint8","name":"freeMintsAllowed","type":"uint8"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWL1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWL2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWL3","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenProbabilities","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum LootBox.MintType","name":"mintType","type":"uint8"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint8","name":"freeMints","type":"uint8"}],"name":"updateMintConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newProbabilities","type":"uint256[]"}],"name":"updateOdds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"enum LootBox.MintType","name":"","type":"uint8"}],"name":"userMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

9c4d535b00000000000000000000000000000000000000000000000000000000000000000100046d7263757f600235d35eeaecb5945230db2a90380a7ef8823eb337ebe900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x0003000000000002000a000000000002000000000302001900000000020100190000006002200270000003f402200197000200000021035500010000000103550000008005000039000000400050043f00000001033001900000003d0000c13d000000040320008c00000ee60000413d000000000301043b000000e004300270000004020340009c0000005e0000213d000000000321034f000004140540009c000000ae0000a13d000004150540009c000001790000a13d000004160540009c000004320000213d000004190340009c0000046b0000613d0000041a0140009c00000ee60000c13d0000000001000416000000000101004b00000ee60000c13d0000000601000039000000000101041a000003fe011001970000000002000411000000000121004b000008c40000c13d000a00000002001d0000045501000041000000000010043900000000010004100000000400100443000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043f011001c70000800a020000390fcb0fc60000040f000000010220019000000d780000613d000000000301043b00000000010004140000000a05000029000000040250008c0000098a0000c13d0000000102000039000000000100003100000af10000013d0000000001000416000000000101004b00000ee60000c13d0000001301000039000000800010043f000003f501000041000000a00010043f0000000407000039000000c00070043f000003f601000041000000e00010043f0000014001000039000000400010043f0000001a01000039000001000010043f000003f701000041000001200010043f000000000100041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000000112004b000000860000613d000004610100004100000000001004350000002201000039000000040010043f000004620100004100000fcd00010430000004030340009c000001230000a13d000004040340009c000001df0000a13d000004050340009c0000044a0000213d000004080340009c000004780000613d000004090340009c00000ee60000c13d0000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000003fe0320009c00000ee60000213d0000002401100370000000000101043b000a00000001001d000003fe0110009c00000ee60000213d00000000002004350000000401000039000000200010043f0000004002000039000900000002001d00000000010000190fcb0fab0000040f0000000a020000290000000000200435000000200010043f000000000100001900000009020000290fcb0fab0000040f000000000101041a000000ff01100190000004450000013d000000200130008c000000a10000413d000900000003001d000a00000007001d0000000000000435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000009020000290000001f0220003900000005022002700000000002210019000000000321004b0000000a07000029000000a10000813d000000000001041b0000000101100039000000000321004b0000009d0000413d000000a00100043d000003f90110019700000026011001bf000000000010041b000000c00400043d000003fa0140009c000001340000413d000004610100004100000000001004350000004101000039000000040010043f000004620100004100000fcd000104300000041e0540009c000001ef0000213d000004220340009c000004850000613d000004230340009c000004940000613d000004240340009c00000ee60000c13d0000000003000416000000240420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000503043b000003fb0350009c00000ee60000213d0000002303500039000000000323004b00000ee60000813d0000000406500039000000000361034f000000000403043b000003fb0340009c000000a80000213d0000001f07400039000000200300008a000000000737016f0000003f07700039000000000737016f000004370870009c000000a80000213d00000024055000390000008007700039000000400070043f000000800040043f0000000005540019000000000225004b00000ee60000213d0000002002600039000000000121034f0000001f0240018f0000000505400272000000e30000613d00000000060000190000000507600210000000000871034f000000000808043b000000a00770003900000000008704350000000106600039000000000756004b000000db0000413d000000000602004b000000f20000613d0000000505500210000000000151034f0000000302200210000000a005500039000000000605043300000000062601cf000000000626022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000161019f0000000000150435000000a00140003900000000000104350000000601000039000000000101041a000003fe011001970000000002000411000000000121004b00000b380000c13d000000800200043d000003fb0120009c000000a80000213d0000000201000039000000000501041a000000010450019000000001065002700000007f0460018f000000000406c0190000001f0640008c00000000060000190000000106002039000000000565013f0000000105500190000000580000c13d000000200540008c0000011b0000413d0000001f05200039000000050550027000000465065000410000046505000041000000200720008c000000000506801900000000001004350000001f0440003900000005044002700000046504400041000000000645004b0000011b0000813d000000000005041b0000000105500039000000000645004b000001170000413d0000001f0420008c00000d830000a13d0000000000100435000000000532017000000d960000c13d000000a006000039000004650400004100000da30000013d0000040d0340009c000002190000213d000004110340009c000004a70000613d000004120340009c000006bc0000613d000004130140009c00000ee60000c13d0000000001000416000000000101004b00000ee60000c13d0000000601000039000000000101041a000003fe01100197000000800010043f0000042c0100004100000fcc0001042e0000000106000039000000000106041a000000010210019000000001021002700000007f0320018f000000000302c0190000001f0230008c00000000020000190000000102002039000000000121013f0000000101100190000000580000c13d000000200130008c000900000006001d000a00000007001d000001630000413d000700000003001d000800000004001d0000000000600435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000008040000290000001f024000390000000502200270000000200340008c0000000002004019000000000301043b00000007010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b0000000906000029000001630000813d000000000002041b0000000102200039000000000312004b0000015f0000413d0000001f0140008c000008b80000a13d000800000004001d0000000000600435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000200200008a00000008080000290000000003280170000000000101043b000009040000c13d000000200200003900000009060000290000090f0000013d0000041b0340009c000006d50000613d0000041c0340009c000006f90000613d0000041d0340009c00000ee60000c13d0000000003000416000000a40420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000303043b000003fe0330009c00000ee60000213d0000002403100370000000000303043b000003fe0330009c00000ee60000213d0000004403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000504043b000003fb0450009c000000a80000213d00000005045002100000003f064000390000043606600197000004370760009c000000a80000213d0000008006600039000000400060043f000000800050043f00000024033000390000000004340019000000000624004b00000ee60000213d000000000505004b000001ae0000613d0000008005000039000000000631034f000000000606043b000000200550003900000000006504350000002003300039000000000643004b000001a70000413d0000006403100370000000000303043b000003fb0430009c00000ee60000213d00000023043000390000045005000041000000000624004b000000000600001900000000060580190000045004400197000000000704004b0000000005008019000004500440009c000000000506c019000000000405004b00000ee60000c13d0000000404300039000000000441034f000000000504043b000003fb0450009c000000a80000213d00000005065002100000003f046000390000043607400197000000400400043d0000000007740019000000000847004b00000000080000190000000108004039000003fb0970009c000000a80000213d0000000108800190000000a80000c13d000000400070043f000000000054043500000024033000390000000006360019000000000726004b00000ee60000213d000000000505004b0000089d0000613d000000000531034f000000000505043b000000200440003900000000005404350000002003300039000000000563004b000001d70000413d0000089d0000013d0000040a0340009c000007180000613d0000040b0340009c000007390000613d0000040c0340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b00000000001004350000000501000039000004740000013d0000041f0540009c000007a80000613d000004200540009c000007c60000613d000004210340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b000000020210008c00000ee60000213d0fcb0f270000040f0000000302100039000000000202041a0000000103100039000000000303041a0000000204100039000000000404041a000000000501041a0000000401100039000000000101041a000000400600043d000000800760003900000000001704350000004001600039000000000041043500000020016000390000000000310435000000ff0120018f000000600260003900000000001204350000000000560435000003f401000041000003f40260009c000000000601801900000040016002100000045f011001c700000fcc0001042e0000040e0340009c000007f20000613d0000040f0340009c0000081e0000613d000004100340009c00000ee60000c13d000000440320008c00000ee60000413d0000000403100370000000000303043b000800000003001d0000002403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000604043b000003fb0460009c00000ee60000213d000000240330003900000005076002100000000004370019000000000224004b00000ee60000213d0000000d02000039000000000802041a000000020880008c000006ef0000613d0000000208000039000000000082041b0000003f027000390000043602200197000004370720009c000000a80000213d0000008002200039000000400020043f000000800060043f000000000206004b0000024b0000613d000000000231034f000000000202043b000000200550003900000000002504350000002003300039000000000243004b000002440000413d000000080100006b00000ad70000613d000600000008001d00000000008004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000400200043d000500000002001d000004380220009c000000a80000213d000000000101043b0000000504000029000000a002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a000a00000003001d00000000003204350000000202100039000000000302041a0000004002400039000900000003001d00000000003204350000000302100039000000000202041a000000ff0220018f0000006003400039000300000003001d000000000023043500000080024000390000000401100039000000000101041a000400000002001d000000000012043500000439010000410000000000100439000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0210006c00000d8f0000413d000000090110006c00000d8f0000213d000000400100043d000000140200003900000000022104360000000003000411000700000003001d0000006003300210000100000003001d00000000003204350000043b0310009c000000a80000213d0000004003100039000000400030043f000003f403000041000003f40420009c000000000203801900000040022002100000000001010433000003f40410009c00000000010380190000006001100210000000000121019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000004020000290000000002020433000400000002001d000000800200043d000000000202004b000002d20000613d000980100000003d0000000003000019000a00000003001d0000000502300210000000a0022000390000000002020433000000000321004b000002c10000813d0000000000100435000000200020043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000902000029000002c90000013d0000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a030000290000000103300039000000800200043d000000000223004b000002b20000413d000000040110006c00000e2c0000c13d000000070100002900000000001004350000000b01000039000a00000001001d000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000101041a00000003020000290000000002020433000000ff0220018f0000000003120049000000000123004b00000000010000190000000101002039000000000101004b000000000300c019000000080130006b000400000003001d00000000010300190000000801004029000900000001001d000000000101004b00000e740000c13d000000090100002900000008021000690000000501000029000000000301043300000000412300a90000000404000029000000080440006b0000030d0000a13d00000000422100d9000000000223004b00000ee00000c13d0000000002000416000000000112004b00000e6d0000c13d000600070000003d00090001000000920005800b0000003d000200000000001d0000000601000029000000000101041a000000090210006c00000ee00000613d00000001021000390000000601000029000400000002001d000000000021041b000000400100043d000a00000001001d00000020021000390000000101000029000300000002001d00000000001204350000043c0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0200002900000034022000390000000000120435000004390100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a02000029000000540220003900000000001204350000043d0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000043e02000041000000000020043900000004001004430000000001000414000003f40210009c000003f401008041000000c0011002100000043f011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a030000290000009402300039000000040400002900000000004204350000007402300039000000000012043500000094010000390000000000130435000004400130009c0000000002030019000000a80000213d000000c001200039000000400010043f0000000303000029000003f40130009c000003f404000041000000000304801900000040013002100000000002020433000003f40320009c00000000020480190000006002200210000000000112019f0000000002000414000003f40320009c0000000002048019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000902000039000000000202041a000000000302004b0000038f0000613d000000643110011a000000000100001900000000040000190000044105100041000000000505041a0000000004450019000000000554004b00000000050000190000000105004039000000010550019000000ee00000c13d000000000543004b000003950000413d0000000101100039000000000521004b000003820000413d0000000801000039000000000101041a000000000201004b00000ee00000613d00000443011000410000039a0000013d0000000802000039000000000202041a000000000212004b00000e670000a13d0000044201100041000003f403000041000000000101041a000a00000001001d00000000001004350000000c01000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000001000414000003f40210009c000003f401008041000000c001100210000003fd011001c70000800d0200003900000004030000390000000207000039000004440400004100000007050000290000000a060000290fcb0fc10000040f000000010120019000000ee60000613d000000400100043d000004450210009c000000a80000213d0000002002100039000000400020043f0000000000010435000000070100006b000003f40300004100000eea0000613d0000000a0100002900000000001004350000000301000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000007020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000a0100002900000000001004350000000501000039000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b000000400100043d00000020021000390000000103000039000400000003001d00000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d0000002002100039000000040300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d00000002020000290000000102200039000200000002001d000000080120006c000003140000413d00000d730000013d000004170540009c000008370000613d000004180340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b00000000001004350000000501000039000000200010043f000000400200003900000000010000190fcb0fab0000040f000000000101041a000000000101004b0000000001000019000000010100c039000000800010043f0000042c0100004100000fcc0001042e000004060340009c000008900000613d000004070340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000601043b000003fe0160009c00000ee60000213d0000000601000039000000000201041a000003fe032001970000000005000411000000000353004b000008c40000c13d000000000306004b000009920000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000002601000039000000a40010043f0000042601000041000000c40010043f0000042701000041000000e40010043f000004280100004100000fcd000104300000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b00000000001004350000000c01000039000000200010043f00000040020000390000000001000019000007130000013d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b0000000802000039000000000202041a000000000221004b00000ee60000813d0fcb0f9c0000040f000006c80000013d0000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000a00000002001d000003fe0220009c00000ee60000213d0000002401100370000000000101043b00000000001004350000000301000039000007090000013d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000201043b000004680120019800000ee60000c13d0000000101000039000004690320009c000007150000613d0000046a0320009c000007150000613d0000046b0220009c000000000100c019000000800010043f0000042c0100004100000fcc0001042e000000440320008c00000ee60000413d0000000403100370000000000303043b000800000003001d0000002403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000504043b000003fb0450009c00000ee60000213d000000240330003900000005065002100000000004360019000000000224004b00000ee60000213d0000000d02000039000000000702041a000000020770008c000006ef0000613d0000000207000039000000000072041b0000003f026000390000043602200197000004370620009c000000a80000213d0000008002200039000000400020043f000000800050043f000000000205004b000004d40000613d0000008002000039000000000531034f000000000505043b000000200220003900000000005204350000002003300039000000000543004b000004cd0000413d000000080100006b00000ad70000613d0000000101000039000600000001001d00000000001004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000400200043d000500000002001d000004380220009c000000a80000213d000000000101043b0000000504000029000000a002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a000a00000003001d00000000003204350000000202100039000000000302041a0000004002400039000900000003001d00000000003204350000000302100039000000000202041a000000ff0220018f0000006003400039000300000003001d000000000023043500000080024000390000000401100039000000000101041a000400000002001d000000000012043500000439010000410000000000100439000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0210006c00000d8f0000413d000000090110006c00000d8f0000213d000000400100043d000000140200003900000000022104360000000003000411000700000003001d0000006003300210000100000003001d00000000003204350000043b0310009c000000a80000213d0000004003100039000000400030043f000003f403000041000003f40420009c000000000203801900000040022002100000000001010433000003f40410009c00000000010380190000006001100210000000000121019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000004020000290000000002020433000400000002001d000000000101043b000000800200043d000000000202004b0000055c0000613d000980100000003d0000000003000019000a00000003001d0000000502300210000000a0022000390000000002020433000000000321004b0000054b0000813d0000000000100435000000200020043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000902000029000005530000013d0000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a030000290000000103300039000000800200043d000000000223004b0000053c0000413d000000040110006c00000e2c0000c13d000000070100002900000000001004350000000b01000039000a00000001001d000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000101041a00000003020000290000000002020433000000ff0220018f0000000003120049000000000123004b00000000010000190000000101002039000000000101004b000000000300c019000000080130006b000400000003001d00000000010300190000000801004029000900000001001d000000000101004b00000e990000c13d000000090100002900000008021000690000000501000029000000000301043300000000412300a90000000404000029000000080440006b000005970000a13d00000000422100d9000000000223004b00000ee00000c13d0000000002000416000000000112004b00000e6d0000c13d000500070000003d00090001000000920004800b0000003d000200000000001d0000000501000029000000000101041a000000090210006c00000ee00000613d00000001021000390000000501000029000600000002001d000000000021041b000000400100043d000a00000001001d00000020021000390000000101000029000300000002001d00000000001204350000043c0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000004020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0200002900000034022000390000000000120435000004390100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000004020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a02000029000000540220003900000000001204350000043d0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000043e02000041000000000020043900000004001004430000000001000414000003f40210009c000003f401008041000000c0011002100000043f011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a030000290000009402300039000000060400002900000000004204350000007402300039000000000012043500000094010000390000000000130435000004400130009c0000000002030019000000a80000213d000000c001200039000000400010043f0000000303000029000003f40130009c000003f404000041000000000304801900000040013002100000000002020433000003f40320009c00000000020480190000006002200210000000000112019f0000000002000414000003f40320009c0000000002048019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000902000039000000000202041a000000000302004b000006190000613d000000643110011a000000000100001900000000040000190000044105100041000000000505041a0000000004450019000000000554004b00000000050000190000000105004039000000010550019000000ee00000c13d000000000543004b0000061f0000413d0000000101100039000000000521004b0000060c0000413d0000000801000039000000000101041a000000000201004b00000ee00000613d0000044301100041000006240000013d0000000802000039000000000202041a000000000212004b00000e670000a13d0000044201100041000003f403000041000000000101041a000a00000001001d00000000001004350000000c01000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000001000414000003f40210009c000003f401008041000000c001100210000003fd011001c70000800d0200003900000004030000390000000107000039000004440400004100000007050000290000000a06000029000600000007001d0fcb0fc10000040f000000010120019000000ee60000613d000000400100043d000004450210009c000000a80000213d0000002002100039000000400020043f0000000000010435000000070100006b000003f40300004100000eea0000613d0000000a0100002900000000001004350000000301000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000007020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000a0100002900000000001004350000000501000039000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b000000400100043d0000002002100039000000060300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d0000002002100039000000060300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d00000002020000290000000102200039000200000002001d000000080120006c0000059e0000413d00000d730000013d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b0000000902000039000000000202041a000000000221004b00000ee60000813d0fcb0f8e0000040f0000000302200210000000000101041a000000000121022f000000ff0220008c0000000001002019000000400200043d0000000000120435000003f401000041000003f40320009c000000000201801900000040012002100000042d011001c700000fcc0001042e000000440320008c00000ee60000413d0000000403100370000000000303043b000800000003001d0000002403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000504043b000003fb0450009c00000ee60000213d000000240330003900000005065002100000000004360019000000000224004b00000ee60000213d0000000d02000039000000000702041a000000020770008c00000ac20000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000045e01000041000000c40010043f0000042f0100004100000fcd000104300000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000003fe0320009c00000ee60000213d0000002401100370000000000101043b000a00000001001d000000020110008c00000ee60000213d00000000002004350000000b01000039000000200010043f0000004002000039000900000002001d00000000010000190fcb0fab0000040f0000000a020000290000000000200435000000200010043f000000000100001900000009020000290fcb0fab0000040f000000000101041a000000800010043f0000042c0100004100000fcc0001042e0000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000a00000002001d000003fe0220009c00000ee60000213d0000002401100370000000000201043b000000000102004b0000000001000019000000010100c039000900000002001d000000000112004b00000ee60000c13d00000000020004110000000a0120006c000009a20000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000043401000041000000c40010043f0000043501000041000000e40010043f000004280100004100000fcd000104300000000003000416000000c40220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000a00000002001d000000020220008c00000ee60000213d0000008402100370000000000202043b000700000002001d0000006402100370000000000202043b000800000002001d0000004402100370000000000202043b000900000002001d0000002402100370000000000202043b000600000002001d000000a401100370000000000101043b000000ff0210008c00000ee60000213d0000000602000039000000000202041a000003fe022001970000000003000411000000000232004b000008c40000c13d00000009030000290000000804000029000000000243004b00000ade0000813d000000ff0210018f0000012001000039000000400010043f0000000601000029000000800010043f000000a00030043f000000c00040043f000500000002001d000000e00020043f0000000701000029000001000010043f0000000a0100002900000000001004350000000a01000039000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000800200043d000000000021041b0000000102100039000000a00300043d000000000032041b0000000202100039000000c00300043d000000000032041b0000000302100039000001000300008a000000000402041a000000000334016f000000e00400043d000000ff0440018f000000000343019f000000000032041b0000000401100039000001000200043d000000000021041b000000400100043d000000800210003900000005030000290000000000320435000000600210003900000007030000290000000000320435000000400210003900000008030000290000000000320435000000200210003900000009030000290000000000320435000000060200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000431011001c70000800d02000039000000020300003900000432040000410000000a050000290000099e0000013d0000000001000416000000000101004b00000ee60000c13d000000000200041a000000010320019000000001042002700000007f0140018f000000000104c0190000001f0410008c00000000040000190000000104002039000000000442013f0000000104400190000000580000c13d000000800010043f000000000303004b0000096f0000613d0000000000000435000000000201004b000009790000613d00000466030000410000000004000019000000000503041a000000a002400039000000000052043500000001033000390000002004400039000000000514004b000007be0000413d000009e00000013d0000000004000416000000240220008c00000ee60000413d000000000204004b00000ee60000c13d0000000401100370000000000101043b000000000201004b000008cd0000c13d000000c005000039000000400050043f0000000101000039000000800010043f0000046401000041000000a00010043f0000000203000039000000000203041a000000010420019000000001012002700000007f0610018f000000000601c0190000001f0160008c00000000010000190000000101002039000000000112013f0000000101100190000000580000c13d0000002001500039000000000404004b000a00000005001d0000097b0000613d0000000000300435000000000206004b0000097e0000613d000004650200004100000000030000190000000004130019000000000502041a000000000054043500000001022000390000002003300039000000000463004b000007ea0000413d0000097e0000013d0000000003000416000000240420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000503043b000003fb0350009c00000ee60000213d0000002303500039000000000323004b00000ee60000813d0000000404500039000000000341034f000000000303043b000003fb0630009c00000ee60000213d000000240650003900000005053002100000000007650019000000000227004b00000ee60000213d0000000602000039000000000202041a000003fe022001970000000007000411000000000272004b000008c40000c13d0000000902000039000000000702041a000000000773004b00000b430000c13d000000000703004b00000b4d0000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000001d01000039000000a40010043f0000044f01000041000000c40010043f0000042f0100004100000fcd000104300000000001000416000000000101004b00000ee60000c13d0000000103000039000000000203041a000000010520019000000001012002700000007f0410018f00000000010460190000001f0610008c00000000060000190000000106002039000000000662013f0000000106600190000000580000c13d000000800010043f000000000505004b000009760000c13d000001000100008a000000000112016f000000a00010043f000000000104004b000000a0020000390000008002006039000009e00000013d0000000004000416000000440520008c00000ee60000413d000000000404004b00000ee60000c13d0000000404100370000000000404043b000003fb0540009c00000ee60000213d0000002305400039000000000525004b00000ee60000813d0000000405400039000000000551034f000000000605043b000003fb0560009c000000a80000213d00000005056002100000003f075000390000043607700197000004370870009c000000a80000213d0000008007700039000000400070043f000000800060043f00000024044000390000000005450019000000000725004b00000ee60000213d000000000606004b0000085f0000613d000000a006000039000000000741034f000000000707043b000003fe0870009c00000ee60000213d00000000067604360000002004400039000000000754004b000008570000413d0000002404100370000000000404043b000003fb0540009c00000ee60000213d00000023054000390000045006000041000000000725004b000000000700001900000000070640190000045005500197000000000805004b000000000600a019000004500550009c000000000607c019000000000506004b00000ee60000613d0000000405400039000000000551034f000000000505043b000003fb0650009c000000a80000213d00000005065002100000003f076000390000043607700197000000400800043d0000000007780019000600000008001d000000000887004b00000000080000190000000108004039000003fb0970009c000000a80000213d0000000108800190000000a80000c13d000000400070043f00000006070000290000000007570436000500000007001d00000024044000390000000006460019000000000226004b00000ee60000213d000000000205004b00000dd70000c13d000000800100043d000000000101004b000000000100001900000de60000613d00000e220000013d0000000003000416000000a40420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000303043b000003fe0330009c00000ee60000213d0000002403100370000000000303043b000003fe0330009c00000ee60000213d0000008401100370000000000101043b000003fb0310009c00000ee60000213d00000004011000390fcb0f400000040f000000400100043d00000064021000390000042903000041000000000032043500000044021000390000042a03000041000000000032043500000024021000390000002103000039000000000032043500000425020000410000000000210435000000040210003900000020030000390000000000320435000003f402000041000003f40310009c000000000102801900000040011002100000042b011001c700000fcd00010430000000000104004b0000000001000019000008bc0000613d000000e00100043d0000000302400210000000010300008a000000000223022f000000000232013f000000000121016f0000000102400210000000000121019f0000091c0000013d0000042501000041000000800010043f0000002001000039000000840010043f000000a40010043f0000045401000041000000c40010043f0000042f0100004100000fcd00010430000000010500008a000000000601001900000000020000190000000004020019000000000254004b00000ee00000613d000000090260008c0000000a2660011a0000000102400039000008d00000213d000004600540009c000000a80000213d000000200500008a000000000454016f0000005f06400039000000000556016f000004370650009c000000a80000213d0000008005500039000000400050043f000000800020043f00000020054000390000001f0450018f0000000505500272000008ef0000613d00000000060000190000000507600210000000000873034f000000000808043b000000a00770003900000000008704350000000106600039000000000756004b000008e70000413d000000000304004b000008f10000613d000000000302004b00000ee00000613d000000010320008a000000800400043d000000000443004b00000e670000813d000000090410008c0000000a4110011a000000f8044002100000009f0220003900000000050204330000046305500197000000000454019f00000464044001c700000000004204350000000002030019000008f10000213d000000400500043d000007d50000013d000000200200003900000000040000190000000906000029000000c0052000390000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000009070000413d000000000383004b0000091a0000813d0000000303800210000000f80330018f000000010400008a000000000334022f000000000343013f000000c0022000390000000002020433000000000232016f000000000021041b000000010180021000000001011001bf000000000016041b000001000500043d000003fb0150009c000000a80000213d0000000204000039000000000104041a000000010210019000000001021002700000007f0320018f000000000302c0190000001f0230008c00000000020000190000000102002039000000000121013f0000000101100190000000580000c13d000000200130008c000800000004001d0000094e0000413d000600000003001d000700000005001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000007050000290000001f025000390000000502200270000000200350008c0000000002004019000000000301043b00000006010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b00000008040000290000094e0000813d000000000002041b0000000102200039000000000312004b0000094a0000413d0000001f0150008c000009630000a13d000700000005001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000200200008a00000007070000290000000002270170000000000101043b000009f30000c13d0000012003000039000009ff0000013d000000000105004b0000000001000019000009670000613d000001200100043d0000000302500210000000010300008a000000000223022f000000000232013f000000000121016f0000000102500210000000000121019f00000a0c0000013d000001000300008a000000000232016f000000a00020043f000000000101004b000000a0020000390000008002006039000009e00000013d0000000000300435000000020220008c000009d70000813d0000008002000039000009e00000013d000001000300008a000000000232016f00000000002104350000000002610019000000800300043d000900000003001d000000a001000039000800000006001d0fcb0f040000040f000000080200002900000009022000290000000a0100002900000000002104350000002002200039000009e30000013d000003f402000041000003f40410009c0000000001028019000000c001100210000000000203004b00000ae80000c13d000000000205001900000aec0000013d000003fc02200197000000000262019f000000000021041b000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003fd011001c70000800d020000390000000303000039000003ff040000410fcb0fc10000040f000000010120019000000af50000c13d00000ee60000013d000800000002001d00000000002004350000000401000039000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000904000029000000ff0340018f000000000232019f000000000021041b000000400100043d0000000000410435000003f4020000410000000003000414000003f40430009c0000000003028019000003f40410009c00000000010280190000004001100210000000c002300210000000000112019f000003f8011001c70000800d020000390000000303000039000004330400004100000008050000290000000a060000290000099e0000013d00000447030000410000000004000019000000000503041a000000a002400039000000000052043500000001033000390000002004400039000000000514004b000009d90000413d000000600220008a0000008001000039000a00000001001d0fcb0ef10000040f000000400100043d000900000001001d0000000a020000290fcb0f110000040f00000009040000290000000001410049000003f402000041000003f40310009c0000000001028019000003f40340009c000000000402801900000040024002100000006001100210000000000121019f00000fcc0001042e00000020040000390000000003000019000000000504001900000100045000390000000004040433000000000041041b000000200450003900000001011000390000002003300039000000000623004b000009f50000413d0000012003500039000000000272004b00000a090000813d0000000302700210000000f80220018f000000010400008a000000000224022f000000000242013f0000000003030433000000000223016f000000000021041b000000010170021000000001011001bf0000000804000029000000000014041b0000000603000039000000000203041a000003fc012001970000000006000411000000000161019f000700000003001d000000000013041b000003f4010000410000000003000414000003f40430009c0000000003018019000000c001300210000003fd011001c7000003fe052001970000800d020000390000000303000039000600000003001d000003ff040000410fcb0fc10000040f000000010120019000000ee60000613d000000400500043d000004000150009c00000009030000290000000a04000029000000a80000213d000000e001500039000000400010043f000000a00150003900000007020000290000000000210435000000800150003900000005020000390000000000210435000000600150003900000000004104350000004001500039000000060200002900000000002104350000002001500039000000080200002900000000002104350000000000350435000800000005001d000000c001500039000000070200003900000000002104350000000804000039000000000304041a000600000002001d000000000024041b000000080130008c00000a590000413d000400000003001d000500000004001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000201043b00000004012000290000000702200039000000000312004b000000050400002900000a590000813d000000000002041b0000000102200039000000000312004b00000a550000413d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000002000019000000080500002900000000031200190000000054050434000000ff0440018f000000000043041b000000060320008c000000010220003900000a670000413d000000400400043d000004000140009c00000009020000290000000a03000029000000a80000213d000000e001400039000000400010043f000000c0014000390000000000210435000000a001400039000000070200002900000000002104350000008001400039000000000031043500000060014000390000000a02000039000000000021043500000040014000390000000f020000390000000000210435000000200140003900000020020000390000000000210435000a00000004001d000800000002001d00000000002404350000000904000039000000000204041a0000000601000029000000000014041b000700000002001d000000080120008c00000aa50000413d000600000004001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000201043b00000007012000290000000702200039000000000312004b000000060400002900000aa50000813d000000000002041b0000000102200039000000000312004b00000aa10000413d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000000020000190000000a0500002900000000031200190000000054050434000000ff0440018f000000000043041b000000060320008c000000010220003900000ab30000413d0000000d010000390000000902000029000000000021041b000000080100002900000100001004430000012000000443000004010100004100000fcc0001042e0000000207000039000000000072041b0000003f026000390000043602200197000004370620009c000000a80000213d0000008002200039000000400020043f000000800050043f000000000205004b00000ad50000613d0000008002000039000000000531034f000000000505043b000000200220003900000000005204350000002003300039000000000543004b00000ace0000413d000000080100006b00000b910000c13d000000400100043d00000044021000390000045d0300004100000000003204350000002402100039000000180300003900000b2c0000013d0000042501000041000000800010043f0000002001000039000000840010043f0000001101000039000000a40010043f0000042e01000041000000c40010043f0000042f0100004100000fcd00010430000003fd011001c70000800902000039000000000405001900000000050000190fcb0fc10000040f00020000000103550000006001100270000003f40010019d000003f401100197000000000301004b00000af70000c13d000000010120019000000b260000613d000000000100001900000fcc0001042e000003fb0310009c000000a80000213d0000001f03100039000000200400008a000000000343016f0000003f03300039000000000343016f000000400400043d0000000003340019000000000543004b00000000050000190000000105004039000003fb0630009c000000a80000213d0000000105500190000000a80000c13d000000400030043f0000001f0310018f00000000041404360000000205000367000000050110027200000b160000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b00000b0e0000413d000000000603004b00000af30000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f000000000031043500000af30000013d000000400100043d00000044021000390000045603000041000000000032043500000024021000390000001003000039000000000032043500000425020000410000000000210435000000040210003900000020030000390000000000320435000003f402000041000003f40310009c0000000001028019000000400110021000000457011001c700000fcd00010430000000400100043d00000044021000390000045403000041000000000032043500000425020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000b310000013d0000042501000041000000800010043f0000002001000039000000840010043f0000000f01000039000000a40010043f0000044801000041000000c40010043f0000042f0100004100000fcd000104300000000008000019000000000700001900000005098002100000000009690019000000000991034f000000000909043b000000000a09004b00000d790000613d0000000007790019000000000997004b00000000090000190000000109004039000000010990019000000ee00000c13d0000000108800039000000000938004b00000b4f0000413d000000640770008c000008140000c13d000003fa0730009c000000a80000213d000000000032041b00000000002004350000000002000019000000000761034f000000000707043b0000044108200041000000000078041b00000020066000390000000102200039000000000732004b00000b650000413d0000002002000039000000800020043f000000a00030043f000004490230009c00000ee60000213d0000001f0250018f000000050550027200000b800000613d0000002004400039000000000141034f00000000040000190000000506400210000000000761034f000000000707043b000000c00660003900000000007604350000000104400039000000000654004b00000b780000413d000000000102004b00000b820000613d00000065013002100000044a011000410000044b020000410000044c0330009c0000000001028019000003f4020000410000000003000414000003f40430009c0000000003028019000000c00230021000000000011200190000800d0200003900000001030000390000044d0400004100000dd60000013d00000000000004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000400200043d000600000002001d000004380220009c000000a80000213d000000000101043b0000000604000029000000a002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a000a00000003001d00000000003204350000000202100039000000000302041a0000004002400039000900000003001d00000000003204350000000302100039000000000202041a000000ff0220018f0000006003400039000400000003001d000000000023043500000080024000390000000401100039000000000101041a000500000002001d000000000012043500000439010000410000000000100439000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0210006c00000d8f0000413d000000090110006c00000d8f0000213d000000400100043d000000140200003900000000022104360000000003000411000700000003001d0000006003300210000100000003001d00000000003204350000043b0310009c000000a80000213d0000004003100039000000400030043f000003f403000041000003f40420009c000000000203801900000040022002100000000001010433000003f40410009c00000000010380190000006001100210000000000121019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000005020000290000000002020433000500000002001d000000000101043b000000800200043d000000000202004b00000c150000613d000980100000003d0000000003000019000a00000003001d0000000502300210000000a0022000390000000002020433000000000321004b00000c040000813d0000000000100435000000200020043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c7000000090200002900000c0c0000013d0000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a030000290000000103300039000000800200043d000000000223004b00000bf50000413d000000050110006c00000e2c0000c13d000000070100002900000000001004350000000b01000039000a00000001001d000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000000000435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000101041a00000004020000290000000002020433000000ff0220018f0000000003120049000000000123004b00000000010000190000000101002039000000000101004b000000000300c019000000080130006b000500000003001d00000000010300190000000801004029000900000001001d000000000101004b00000ebe0000c13d000000090100002900000008021000690000000601000029000000000301043300000000412300a90000000504000029000000080440006b00000c4f0000a13d00000000422100d9000000000223004b00000ee00000c13d0000000002000416000000000112004b00000e6d0000c13d000600070000003d00090001000000920005800b0000003d000200000000001d0000000601000029000000000101041a000000090210006c00000ee00000613d00000001021000390000000601000029000400000002001d000000000021041b000000400100043d000a00000001001d00000020021000390000000101000029000300000002001d00000000001204350000043c0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0200002900000034022000390000000000120435000004390100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a02000029000000540220003900000000001204350000043d0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000043e02000041000000000020043900000004001004430000000001000414000003f40210009c000003f401008041000000c0011002100000043f011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a030000290000009402300039000000040400002900000000004204350000007402300039000000000012043500000094010000390000000000130435000004400130009c0000000002030019000000a80000213d000000c001200039000000400010043f0000000303000029000003f40130009c000003f404000041000000000304801900000040013002100000000002020433000003f40320009c00000000020480190000006002200210000000000112019f0000000002000414000003f40320009c0000000002048019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000902000039000000000202041a000000000302004b00000cd10000613d000000643110011a000000000100001900000000040000190000044105100041000000000505041a0000000004450019000000000554004b00000000050000190000000105004039000000010550019000000ee00000c13d000000000543004b00000cd70000413d0000000101100039000000000521004b00000cc40000413d0000000801000039000000000101041a000000000201004b00000ee00000613d000004430110004100000cdc0000013d0000000802000039000000000202041a000000000212004b00000e670000a13d0000044201100041000003f403000041000000000101041a000a00000001001d00000000001004350000000c01000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000001000414000003f40210009c000003f401008041000000c001100210000003fd011001c70000800d020000390000000403000039000004440400004100000007050000290000000a0600002900000000070000190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d000004450210009c000000a80000213d0000002002100039000000400020043f0000000000010435000000070100006b000003f40300004100000eea0000613d0000000a0100002900000000001004350000000301000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000007020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000a0100002900000000001004350000000501000039000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b000000400100043d00000020021000390000000103000039000400000003001d00000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d0000002002100039000000040300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d00000002020000290000000102200039000200000002001d000000080120006c00000c560000413d00000001010000390000000d02000039000000000012041b000000000100001900000fcc0001042e000000000001042f0000042501000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000044e01000041000000c40010043f0000042f0100004100000fcd00010430000000000402004b000000000400001900000d870000613d000000a00400043d0000000305200210000000010600008a000000000556022f000000000565013f000000000454016f0000000102200210000000000224019f00000daf0000013d000000400100043d00000044021000390000045c03000041000000000032043500000024021000390000000f0300003900000b2c0000013d000004650400004100000020070000390000000006000019000000000807001900000080078000390000000007070433000000000074041b000000200780003900000001044000390000002006600039000000000956004b00000d990000413d000000a006800039000000000525004b00000dad0000813d0000000305200210000000f80550018f000000010700008a000000000557022f000000000575013f0000000006060433000000000556016f000000000054041b000000010220021000000001022001bf000000000021041b0000002002000039000000400100043d0000000004210436000000800200043d00000000002404350000004004100039000000000502004b00000dc00000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000625004b00000db90000413d000000000442001900000000000404350000001f02200039000000000232016f000003f403000041000003f40410009c000000000103801900000040011002100000004002200039000003f40420009c00000000020380190000006002200210000000000112019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c70000800d02000039000000010300003900000467040000410000099e0000013d0000000602000029000000000541034f000000000505043b000000200220003900000000005204350000002004400039000000000564004b00000dd80000413d00000006010000290000000001010433000000800200043d000000000212004b00000e220000c13d000003fb0210009c000000a80000213d00000005021002100000003f042000390000045305400197000000400400043d000400000004001d0000000004450019000000000554004b00000000050000190000000105004039000003fb0640009c000000a80000213d0000000105500190000000a80000c13d000000400040043f000000040400002900000000071404360000001f0120018f000000050220027200000e020000613d000000000400001900000005054002100000000006570019000000000553034f000000000505043b00000000005604350000000104400039000000000524004b00000dfa0000413d000300000007001d000000000101004b00000e050000613d000000800100043d000000000101004b00000e300000c13d000000400100043d000000200200003900000000022104360000000403000029000000000303043300000000003204350000004002100039000000000403004b00000e180000613d00000000040000190000000306000029000000006506043400000000025204360000000104400039000000000534004b00000e130000413d0000000002120049000003f403000041000003f40420009c0000000002038019000003f40410009c000000000103801900000040011002100000006002200210000000000112019f00000fcc0001042e000000400100043d00000064021000390000045103000041000000000032043500000044021000390000045203000041000000000032043500000024021000390000002903000039000008ac0000013d000000400100043d0000004402100039000004580300004100000d920000013d000200030000003d000a80100000003d00000000030000190000000502300210000000a0012000390000000001010433000903fe0010019b00000006010000290000000001010433000000000131004b00000e670000a13d000800000003001d000700000002001d0000000501200029000000000101043300000000001004350000000201000029000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000a020000290fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000009020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000a020000290fcb0fc60000040f000000010220019000000ee60000613d000000040200002900000000020204330000000803000029000000000232004b000000070400002900000e670000a13d0000000302400029000000000101043b000000000101041a00000000001204350000000103300039000000800100043d000000000113004b00000e330000413d00000e080000013d000004610100004100000000001004350000003201000039000000040010043f000004620100004100000fcd00010430000000400100043d0000004402100039000004590300004100000000003204350000002402100039000000120300003900000b2c0000013d000000070100002900000000001004350000000a01000029000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000301041a0000000902300029000000000332004b00000000030000190000000103004039000000010330019000000ee00000c13d000000000021041b000003020000013d000000070100002900000000001004350000000a01000029000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000301041a0000000902300029000000000332004b00000000030000190000000103004039000000010330019000000ee00000c13d000000000021041b0000058c0000013d000000070100002900000000001004350000000a01000029000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000000000435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000301041a0000000902300029000000000332004b00000000030000190000000103004039000000010330019000000ee80000613d000004610100004100000000001004350000001101000039000000040010043f000004620100004100000fcd00010430000000000100001900000fcd00010430000000000021041b00000c440000013d000000400100043d00000064021000390000045a03000041000000000032043500000044021000390000045b03000041000008a90000013d0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000003fb0310009c00000efe0000213d000000010220019000000efe0000c13d000000400010043f000000000001042d000004610100004100000000001004350000004101000039000000040010043f000004620100004100000fcd00010430000000000403004b00000f0e0000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b00000f070000413d00000000012300190000000000010435000000000001042d00000020030000390000000004310436000000003202043400000000002404350000004001100039000000000402004b00000f200000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000524004b00000f190000413d000000000312001900000000000304350000001f02200039000000200300008a000000000232016f0000000001210019000000000001042d000000030210008c00000f380000813d00000000001004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000f3e0000613d000000000101043b000000000001042d000004610100004100000000001004350000002101000039000000040010043f000004620100004100000fcd00010430000000000100001900000fcd000104300000001f031000390000045004000041000000000523004b0000000005000019000000000504401900000450062001970000045003300197000000000763004b000000000400a019000000000363013f000004500330009c000000000405c019000000000304004b00000f8c0000613d0000000104000367000000000314034f000000000303043b000003fa0530009c00000f860000813d0000001f05300039000000200600008a000000000565016f0000003f05500039000000000665016f000000400500043d0000000006650019000000000756004b00000000070000190000000107004039000003fb0860009c00000f860000213d000000010770019000000f860000c13d0000002007100039000000400060043f00000000013504360000000005730019000000000225004b00000f8c0000213d000000000474034f0000001f0230018f000000050530027200000f740000613d000000000600001900000005076002100000000008710019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b00000f6c0000413d000000000602004b00000f830000613d0000000505500210000000000454034f00000000055100190000000302200210000000000605043300000000062601cf000000000626022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000262019f000000000025043500000000013100190000000000010435000000000001042d000004610100004100000000001004350000004101000039000000040010043f000004620100004100000fcd00010430000000000100001900000fcd000104300000000902000039000000000302041a000000000313004b00000f960000a13d000000000020043500000441011000410000000002000019000000000001042d000004610100004100000000001004350000003201000039000000040010043f000004620100004100000fcd000104300000000802000039000000000302041a000000000313004b00000fa40000a13d000000000020043500000442011000410000000002000019000000000001042d000004610100004100000000001004350000003201000039000000040010043f000004620100004100000fcd00010430000000000001042f000003f403000041000003f40410009c00000000010380190000004001100210000003f40420009c00000000020380190000006002200210000000000112019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000fbf0000613d000000000101043b000000000001042d000000000100001900000fcd0001043000000fc4002104210000000102000039000000000001042d0000000002000019000000000001042d00000fc9002104230000000102000039000000000001042d0000000002000019000000000001042d00000fcb0000043200000fcc0001042e00000fcd000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff37372d426974204f726967696e20536b696e730000000000000000000000000037374f530000000000000000000000000000000000000000000000000000000068747470733a2f2f6170692e697066732e6d657461646174612f0000000000000200000000000000000000000000000000000020000000000000000000000000ffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000000000000ffffffffffffff1f0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006bd6327700000000000000000000000000000000000000000000000000000000a22cb46400000000000000000000000000000000000000000000000000000000ca4c0e0800000000000000000000000000000000000000000000000000000000f242432900000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000ca4c0e0900000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000a22cb46500000000000000000000000000000000000000000000000000000000a79a2c2700000000000000000000000000000000000000000000000000000000bd85b039000000000000000000000000000000000000000000000000000000008ed67ea9000000000000000000000000000000000000000000000000000000008ed67eaa0000000000000000000000000000000000000000000000000000000095d89b4100000000000000000000000000000000000000000000000000000000a1ec98d4000000000000000000000000000000000000000000000000000000006bd63278000000000000000000000000000000000000000000000000000000006ed0d208000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000001b7c85a500000000000000000000000000000000000000000000000000000000327de31e000000000000000000000000000000000000000000000000000000004e1273f3000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000004f558e7900000000000000000000000000000000000000000000000000000000327de31f000000000000000000000000000000000000000000000000000000003ccfd60b000000000000000000000000000000000000000000000000000000001b7c85a6000000000000000000000000000000000000000000000000000000002ba9ddae000000000000000000000000000000000000000000000000000000002eb2c2d60000000000000000000000000000000000000000000000000000000006fdde020000000000000000000000000000000000000000000000000000000006fdde03000000000000000000000000000000000000000000000000000000000e89341c0000000000000000000000000000000000000000000000000000000019e275420000000000000000000000000000000000000000000000000000000000fdd58e0000000000000000000000000000000000000000000000000000000001ffc9a70000000000000000000000000000000000000000000000000000000002fe530508c379a0000000000000000000000000000000000000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000006400000000000000000000000000000000000000000000000000000000000000536f756c626f756e643a205472616e7366657273206172652064697361626c65000000000000000000000000000000000000008400000000000000000000000000000000000000000000000000000000000000200000008000000000000000000000000000000000000000000000000000000020000000000000000000000000496e76616c6964206d696e742074696d650000000000000000000000000000000000000000000000000000000000000000000064000000800000000000000000020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000a0000000000000000000000000b220e1ff85aeaa1ff30890ed50e6d51ac264bc0b3424d64000300a4c31cd86db17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c6600000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff5f796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbffe173b97ed9aa263236c52fa3eb334d07741add95e972d17352d76816b4aaea342cbb15ccdc3cad6266b0e7a08c0454b23bf29dc2df74b6f3c209e9336465bd180b41246c05cbb406f874e82aa2faf7db11bba9792fe09929e56ef1eee2c2da30200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7aff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3f3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee2dcb23284f3935b5557998e99dcc286e29744c5000723d99eecd5d6f5694f6e11000000000000000000000000000000000000000000000000ffffffffffffffdfc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf64c656e677468206d69736d61746368000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020000000000000000000000000000000000004000000080000000000000000002000000000000000000000000000000ffffffff0000008000000000000000000000000000000000000000000000000000000000000000000000000007fffffe7983ca35fe1b5295f154d37047422da650345e407122812e8873db36c3773fdf50726f626162696c6974792063616e6e6f74206265207a65726f00000000000050726f626162696c6974696573206d7573742073756d20746f203130300000008000000000000000000000000000000000000000000000000000000000000000206d69736d617463680000000000000000000000000000000000000000000000455243313135353a206163636f756e747320616e6420696473206c656e67746800000000000000000000000000000000000000000000003fffffffffffffffe04f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f395472616e73666572206661696c65642e0000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004e6f742077686974656c69737465640000000000000000000000000000000000496e636f7272656374204554482073656e7400000000000000000000000000007300000000000000000000000000000000000000000000000000000000000000455243313135353a206d696e7420746f20746865207a65726f206164647265734d696e74206e6f742061637469766500000000000000000000000000000000004d757374206d696e74206174206c656173742031204e465400000000000000005265656e7472616e637947756172643a207265656e7472616e742063616c6c0000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffe4e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3000000000000000000000000000000000000000000000000000000000000000405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563e3afa94108b5f5e82e5f6e539d161ff4b5402a85f696c67b9768ec3ae54ce36600000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000000e89341c00000000000000000000000000000000000000000000000000000000d9b67a260000000000000000000000000000000000000000000000000000000015486077d7b75f7e77e0e6142f5067e9c8321f5cc4102c7d5f7150fd41dc66c1

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.