0xca7ca7bcc765f77339be2d648ba53ce9c8a262bd

deployer: unknown relevance score: 0 status: partially_identified bytecode: 21301 bytes

DECOMPILED SOLIDITY (Heimdall)

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/// @title            Decompiled Contract
/// @author           Jonathan Becker <jonathan@jbecker.dev>
/// @custom:version   heimdall-rs v0.9.2
///
/// @notice           This contract was decompiled using the heimdall-rs decompiler.
///                     It was generated directly by tracing the EVM opcodes from this contract.
///                     As a result, it may not compile or even be valid solidity code.
///                     Despite this, it should be obvious what each function does. Overall
///                     logic should have been preserved throughout decompiling.
///
/// @custom:github    You can find the open-source decompiler here:
///                       https://heimdall.rs

contract DecompiledContract {
    uint256 public constant TOKEN_LIMIT = 20000;
    uint256 public constant REVEAL_BATCH_SIZE = 1000;
    uint256 public constant startSaleTimestamp = 1645634753;
    uint256 public constant merkleRoot = 30381731263875915465356288838527804114885455969615625296949685568272591740237;
    
    bytes32 store_o;
    mapping(bytes32 => bytes32) storage_map_d;
    bytes32 store_k;
    mapping(bytes32 => bytes32) storage_map_g;
    bytes32 store_n;
    address public owner;
    mapping(bytes32 => bytes32) storage_map_j;
    uint256 public totalSupply;
    address public realOwner;
    mapping(bytes32 => bytes32) storage_map_p;
    mapping(bytes32 => bytes32) storage_map_m;
    bool public airdropped;
    bytes32 store_l;
    uint256 public lastTokenRevealed;
    mapping(bytes32 => bytes32) storage_map_e;
    bytes32 store_i;
    mapping(bytes32 => bytes32) storage_map_c;
    
    event Approval(address, address, uint256);
    error MintZeroQuantity();
    event Transfer(address, address, uint256);
    event ApprovalForAll(address, address, bool);
    event OwnershipTransferred(address, address);
    
    /// @custom:selector    0x095ea7b3
    /// @custom:signature   approve(address arg0, uint256 arg1) public
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function approve(address arg0, uint256 arg1) public {
        require(arg0 == (address(arg0)));
        require(arg1 == arg1);
        require(!(arg1 < totalSupply), CustomError_df2d9b42());
        uint256 var_e = arg1;
        require(var_j, CustomError_df2d9b42());
        require(address(var_l) == 0, CustomError_cfb3b942());
        require(!(address(arg0) == (address(var_l))), CustomError_cfb3b942());
        require(!(!(address(msg.sender)) == (address(var_l))), CustomError_cfb3b942());
        var_e = address(msg.sender);
        require(!(!bytes1(storage_map_d[var_e] / 0x01)), CustomError_cfb3b942());
        var_e = arg1;
        storage_map_d[var_e] = (address(arg0) * 0x01) | (uint96(storage_map_d[var_e]));
        emit Approval(address(var_l), address(arg0), arg1);
        require(!(!(address(msg.sender)) == (address(var_l))), CustomError_cfb3b942());
        var_e = arg1;
        storage_map_d[var_e] = (address(arg0) * 0x01) | (uint96(storage_map_d[var_e]));
        emit Approval(address(var_l), address(arg0), arg1);
        require(!0x01, CustomError_df2d9b42());
        var_e = arg1 - 0x01;
        require(address(var_l) == 0, CustomError_df2d9b42());
        require(!0x01, CustomError_df2d9b42());
    }
    
    /// @custom:selector    0x777c9091
    /// @custom:signature   batchToSeed(uint256 arg0) public view returns (uint256)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function batchToSeed(uint256 arg0) public view returns (uint256) {
        require(arg0 == arg0);
        uint256 var_b = arg0;
        return storage_map_e[var_b];
    }
    
    /// @custom:selector    0x729ad39e
    /// @custom:signature   Unresolved_729ad39e(uint256 arg0, address arg1) public
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_729ad39e(uint256 arg0, address arg1) public {
        require(!arg0 > 0xffffffffffffffff);
        require(!(arg0) > 0xffffffffffffffff);
        require(!((var_c + (uint248(((arg0 * 0x20) + 0x20) + 0x1f))) > 0xffffffffffffffff) | ((var_c + (uint248(((arg0 * 0x20) + 0x20) + 0x1f))) < var_c));
        uint256 var_c = var_c + (uint248(((arg0 * 0x20) + 0x20) + 0x1f));
        require(!0 < (arg0));
        require((arg0 + 0x20) == (address(arg0 + 0x20)));
        require(address(realOwner / 0x01) == (address(msg.sender)), "MultisigOwnable: caller is not the real owner");
        require((bytes1(airdropped / 0x010000)) == 0, "already airdropped");
        var_c = 0x20 + var_c;
        uint256 var_e = 0;
        require(!(address(var_j) == 0), CustomError_b562e8dd());
        require(!(0x01 == 0), CustomError_b562e8dd());
        address var_a = address(var_j);
        storage_map_g[var_a] = (uint64((storage_map_g[var_a] / 0x01) + 0x01) * 0x01) | (uint192(storage_map_g[var_a]));
        var_a = address(var_j);
        storage_map_g[var_a] = (uint64((storage_map_g[var_a] / 0x010000000000000000) + 0x01) * 0x010000000000000000) | (uint192(storage_map_g[var_a]));
        var_a = totalSupply;
        storage_map_g[var_a] = (address(var_j) * 0x01) | (uint96(storage_map_g[var_a]));
        var_a = totalSupply;
        storage_map_g[var_a] = (uint64(block.timestamp) * 0x010000000000000000000000000000000000000000) | (uint192(storage_map_g[var_a]));
        require(!(0 < 0x01), CustomError_d1a57ed6());
        totalSupply = totalSupply;
        require(!(0 == 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff), CustomError_d1a57ed6());
        emit Transfer(0, address(var_j), totalSupply);
        require(!0, CustomError_d1a57ed6());
        require(!(address(var_j).code.length > 0), CustomError_d1a57ed6());
        require(0x01, CustomError_d1a57ed6());
        require(!0x01 < 0x01);
        emit Transfer(0, address(var_j), 0x01 + totalSupply);
        require(!0);
        require(!(address(var_j).code.length) > 0);
        address var_g = address(msg.sender);
        require(!0 > var_c.length);
        require(address(var_j).code.length);
        (bool success, bytes memory ret0) = address(var_j).{ value: var_e ether }Unresolved_150b7a02(var_g); // call
        require(ret0.length == 0);
        require(!var_p == 0);
        var_c = var_c + (uint248(ret0.length + 0x3f));
        require(!(var_c.length == 0), CustomError_d1a57ed6());
        var_c = var_c + (uint248(ret0.length + 0x1f));
        require(!((var_c + ret0.length) - var_c) < 0x20);
        require(var_r == (uint32(var_r)));
        require(0x01);
        require(ret0.length == 0);
        require(!var_p == 0);
        var_c = var_c + (uint248(ret0.length + 0x3f));
        require(!(var_c.length == 0), CustomError_d1a57ed6());
        airdropped = (0x01 * 0x010000) | (uint248(airdropped));
    }
    
    /// @custom:selector    0x94985ddd
    /// @custom:signature   rawFulfillRandomness(bytes32 arg0, uint256 arg1) public
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function rawFulfillRandomness(bytes32 arg0, uint256 arg1) public {
        require(arg0 == arg0);
        require(arg1 == arg1);
        require(address(msg.sender) == 0xf0d54349addcf704f77ae15b96510dea15cb7952, "totalSupply too low");
        require(!(lastTokenRevealed > 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc17), "totalSupply too low");
        require(!((totalSupply - store_i) < (lastTokenRevealed + 0x03e8)), "totalSupply too low");
        require(0x03e8, "totalSupply too low");
        require(!((lastTokenRevealed / 0x03e8) & (0x03e8 > (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff / (lastTokenRevealed / 0x03e8)))), "totalSupply too low");
        require(!(0x4e20 < ((lastTokenRevealed / 0x03e8) * 0x03e8)), "totalSupply too low");
        require(0x4e20 - ((lastTokenRevealed / 0x03e8) * 0x03e8), "totalSupply too low");
        uint256 var_a = lastTokenRevealed / 0x03e8;
        storage_map_j[var_a] = arg1 % (0x4e20 - ((lastTokenRevealed / 0x03e8) * 0x03e8));
        lastTokenRevealed = lastTokenRevealed + 0x03e8;
    }
    
    /// @custom:selector    0xe9d1dd69
    /// @custom:signature   Unresolved_e9d1dd69(uint256 arg0, uint256 arg1) public pure
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function Unresolved_e9d1dd69(uint256 arg0, uint256 arg1) public pure {
        require(!arg0 > 0xffffffffffffffff);
        require(!(arg0) > 0xffffffffffffffff);
        require(!((var_c + (uint248(((arg0 + 0x1f) + 0x20) + 0x1f))) > 0xffffffffffffffff) | ((var_c + (uint248(((arg0 + 0x1f) + 0x20) + 0x1f))) < var_c));
        require(!arg1 > 0xffffffffffffffff);
    }
    
    /// @custom:selector    0xc884ef83
    /// @custom:signature   claimed(address arg0) public view returns (bool)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function claimed(address arg0) public view returns (bool) {
        require(arg0 == (address(arg0)));
        address var_b = arg0;
        return !(!bytes1(storage_map_e[var_b] / 0x01));
    }
    
    /// @custom:selector    0x01ffc9a7
    /// @custom:signature   supportsInterface(bytes4 arg0) public pure returns (bool)
    /// @param              arg0 ["uint32", "bytes4", "int32"]
    function supportsInterface(bytes4 arg0) public pure returns (bool) {
        require(arg0 == (uint32(arg0)));
        require(uint32(arg0) == 0x80ac58cd00000000000000000000000000000000000000000000000000000000);
        require(uint32(arg0) == 0x80ac58cd00000000000000000000000000000000000000000000000000000000);
        return !(!(uint32(arg0)) == 0x80ac58cd00000000000000000000000000000000000000000000000000000000);
        return !(!(uint32(arg0)) == 0x01ffc9a700000000000000000000000000000000000000000000000000000000);
    }
    
    /// @custom:selector    0xe985e9c5
    /// @custom:signature   Unresolved_e985e9c5(address arg0) public pure
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_e985e9c5(address arg0) public pure {
        require(arg0 == (address(arg0)));
    }
    
    /// @custom:selector    0xc87b56dd
    /// @custom:signature   tokenURI(uint256 arg0) public view returns (bytes memory)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function tokenURI(uint256 arg0) public view returns (bytes memory) {
        require(arg0 == arg0);
        if (airdropped / 0x0100) {
            if (arg0 < lastTokenRevealed) {
                if (0x03e8) {
                    var_c = 0x40 + var_c;
                    if (0x27) {
                        var_c = 0x40 + var_c;
                        require(bytes1(airdropped / 0x0100));
                        require(arg0 < lastTokenRevealed);
                        require(0x03e8);
                        require(0x27);
                        require(0x27);
                        require(!0 < (arg0 / 0x03e8));
                        require(!0 < 0x02);
                        require(!(!11 < 0) & (11 > (0x7fffffffffffffffffffffffffffffff - 11)));
                        require(!(11 < 0) & (11 < (0xffffffffffffffffffffffffffffffff80000000000000000000000000000000 - 11)));
                        require(0x03e8);
                        require(!(0x14) & (0x02 > 0x0ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc));
                        require(!0 < 0x28);
                        require(!(!11 < 0) & (11 > (0x7fffffffffffffffffffffffffffffff - 11)));
                        require(!(11 < 0) & (11 < (0xffffffffffffffffffffffffffffffff80000000000000000000000000000000 - 11)));
                        require(11 < 11);
                        require(!(!11 < 0) & (11 < (0xffffffffffffffffffffffffffffffff80000000000000000000000000000000 + 11)));
                        require(!(11 < 0) & (11 > (0x7fffffffffffffffffffffffffffffff + 11)));
                        require(!0 == 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
                        require(0 < 0x28);
                        require(0 < 0x28);
                        require(!11 < 11);
                        require(!(!11 < 0) & (11 > (0x7fffffffffffffffffffffffffffffff - 11)));
                        require(!(11 < 0) & (11 < (0xffffffffffffffffffffffffffffffff80000000000000000000000000000000 - 11)));
                        require(!11 < 11);
                        require(!(!11 < 0) & (11 < (0xffffffffffffffffffffffffffffffff80000000000000000000000000000000 + 11)));
                        require(!(11 < 0) & (11 > (0x7fffffffffffffffffffffffffffffff + 11)));
                        require(!11 < 11);
                        require(!0 == 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
                        require(0x03e8);
                        require(!(0x14) & (0x02 > 0x0ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc));
                        var_a = 0x4e487b7100000000000000000000000000000000000000000000000000000000;
                        var_c = var_c + (0x20 + (((0x1f + (store_k / 0x02)) / 0x20) * 0x20));
                        require(0x03e8);
                        require(!(arg0 % 0x03e8) > (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - storage_map_j[var_a]));
                        require(bytes1(store_k));
                        require(!(bytes1(store_k)) == ((store_k / 0x02) < 0x20));
                        var_a = 0x0d;
                        require(bytes1(store_k));
                        require(!(bytes1(store_k)) == ((store_k / 0x02) < 0x20));
                        return abi.encodePacked((var_c + 0x20) - var_c, var_c.length);
                        return abi.encodePacked((var_c + 0x20) - var_c, var_c.length);
                        require(!store_k / 0x02);
                        require(0x1f < (store_k / 0x02));
                        require((0x20 + var_c) + (store_k / 0x02) > (0x20 + (0x20 + var_c)));
                        require(!arg0 == 0);
                        require(arg0 == 0);
                        require(!0 > 0xffffffffffffffff);
                        require(!0);
                        require(arg0 == 0);
                        require(!0 < 0x01);
                        require(!(bytes1(store_l)) == ((store_l / 0x02) < 0x20));
                        require(bytes1(store_l) == 0);
                        require(bytes1(store_l) == 0x01);
                    }
                }
                require(!0 < (store_l / 0x02));
            }
        }
    }
    
    /// @custom:selector    0xa22cb465
    /// @custom:signature   Unresolved_a22cb465(address arg0, uint256 arg1) public
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    /// @param              arg1 ["uint256", "bytes32", "int256"]
    function Unresolved_a22cb465(address arg0, uint256 arg1) public {
        require(arg0 == (address(arg0)));
        require(arg1 == arg1);
        require(!(address(arg0) == (address(msg.sender))), CustomError_b06307db());
        var_a = address(arg0);
        storage_map_j[var_a] = (arg1 * 0x01) | (uint248(storage_map_j[var_a]));
        emit ApprovalForAll(address(msg.sender), address(arg0), arg1);
    }
    
    /// @custom:selector    0x6352211e
    /// @custom:signature   ownerOf(uint256 arg0) public view returns (address)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function ownerOf(uint256 arg0) public view returns (address) {
        require(arg0 == arg0);
        require(!(arg0 < totalSupply), CustomError_df2d9b42());
        uint256 var_e = arg0;
        require(var_j, CustomError_df2d9b42());
        require(address(var_l) == 0, CustomError_df2d9b42());
        return address(var_l);
        require(!0x01, CustomError_df2d9b42());
        var_e = arg0 - 0x01;
        require(address(var_l) == 0, CustomError_df2d9b42());
        return address(var_l);
        require(!0x01, CustomError_df2d9b42());
    }
    
    /// @custom:selector    0x09f8f934
    /// @custom:signature   requestRandomSeed(uint256 arg0) public returns (uint256)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function requestRandomSeed(uint256 arg0) public returns (uint256) {
        require(arg0 == arg0);
        require(address(realOwner / 0x01) == (address(msg.sender)), "MultisigOwnable: caller is not the real owner");
        require(!lastTokenRevealed > 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc17);
        require(!(totalSupply - store_i) < (lastTokenRevealed + 0x03e8));
        var_b = address(this);
        require(address(0x514910771af9ca656af840dff83e8264ecf986ca).code.length);
        (bool success, bytes memory ret0) = address(0x514910771af9ca656af840dff83e8264ecf986ca).Unresolved_70a08231(var_b); // staticcall
        uint256 var_c = var_c + (uint248(ret0.length + 0x1f));
        require(!((var_c + ret0.length) - var_c) < 0x20);
        require(var_i == (var_i));
        require(!(var_i < arg0), "Not enough LINK to pay fee");
        var_c = (0x20 + var_c) + 0x40;
        var_n = 0xf0d54349addcf704f77ae15b96510dea15cb7952;
        require(!0 > var_c.length);
        uint256 var_r = 0;
        require(address(0x514910771af9ca656af840dff83e8264ecf986ca).code.length);
        (bool success, bytes memory ret0) = address(0x514910771af9ca656af840dff83e8264ecf986ca).{ value: var_r ether }Unresolved_4000aea0(var_n); // call
        var_c = var_c + (uint248(ret0.length + 0x1f));
        require(!((var_c + ret0.length) - var_c) < 0x20);
        require(var_i == (var_i));
        var_g = 0xaa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af445;
        var_c = (0x20 + var_c) + 0x80;
        var_g = 0xaa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af445;
        require(!storage_map_m[var_g] > 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe);
        var_g = 0xaa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af445;
        storage_map_m[var_g] = storage_map_m[var_g] + 0x01;
        var_c = ((0x20 + var_c) + 0x20) + 0x20;
        return keccak256(var_aa);
    }
    
    /// @custom:selector    0x06fdde03
    /// @custom:signature   name() public view returns (string memory)
    function name() public view returns (string memory) {
        if (store_n) {
            if (!(store_n) == ((store_n / 0x02) < 0x20)) {
                uint256 var_c = var_c + (0x20 + (((0x1f + (store_n / 0x02)) / 0x20) * 0x20));
                if (store_n) {
                    if (!(store_n) == ((store_n / 0x02) < 0x20)) {
                        if (!store_n / 0x02) {
                            if (0x1f < (store_n / 0x02)) {
                                var_a = 0x02;
                                if ((0x20 + var_c) + (store_n / 0x02) > (0x20 + (0x20 + var_c))) {
                                    if (!0 > var_c.length) {
                                        return abi.encodePacked((var_c + 0x20) - var_c, var_c.length);
                                        return abi.encodePacked((var_c + 0x20) - var_c, var_c.length);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
    /// @custom:selector    0x2cff6770
    /// @custom:signature   transferRealOwnership(address arg0) public
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function transferRealOwnership(address arg0) public {
        require(arg0 == (address(arg0)));
        require(address(realOwner / 0x01) == (address(msg.sender)), "MultisigOwnable: caller is not the real owner");
        realOwner = (address(arg0) * 0x01) | (uint96(realOwner));
    }
    
    /// @custom:selector    0x95d89b41
    /// @custom:signature   symbol() public view returns (string memory)
    function symbol() public view returns (string memory) {
        if (store_o) {
            if (!(store_o) == ((store_o / 0x02) < 0x20)) {
                uint256 var_c = var_c + (0x20 + (((0x1f + (store_o / 0x02)) / 0x20) * 0x20));
                if (store_o) {
                    if (!(store_o) == ((store_o / 0x02) < 0x20)) {
                        if (!store_o / 0x02) {
                            if (0x1f < (store_o / 0x02)) {
                                var_a = 0x03;
                                if ((0x20 + var_c) + (store_o / 0x02) > (0x20 + (0x20 + var_c))) {
                                    if (!0 > var_c.length) {
                                        return abi.encodePacked((var_c + 0x20) - var_c, var_c.length);
                                        return abi.encodePacked((var_c + 0x20) - var_c, var_c.length);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
    /// @custom:selector    0xb88d4fde
    /// @custom:signature   Unresolved_b88d4fde(address arg0) public pure
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_b88d4fde(address arg0) public pure {
        require(arg0 == (address(arg0)));
    }
    
    /// @custom:selector    0x081812fc
    /// @custom:signature   getApproved(uint256 arg0) public view returns (address)
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function getApproved(uint256 arg0) public view returns (address) {
        require(arg0 == arg0);
        require(!(arg0 < totalSupply), CustomError_cf4700e4());
        uint256 var_a = arg0;
        require(!(bytes1(storage_map_g[var_a] / 0x0100000000000000000000000000000000000000000000000000000000)), CustomError_cf4700e4());
        var_a = arg0;
        return address(storage_map_j[var_a] / 0x01);
        require(arg0 < totalSupply, CustomError_cf4700e4());
        var_a = arg0;
        return address(storage_map_j[var_a] / 0x01);
    }
    
    /// @custom:selector    0xf8b4d981
    /// @custom:signature   mintFromSale(uint256 arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function mintFromSale(uint256 arg0) public payable {
        require(arg0 == arg0);
        require(block.timestamp > 0x621664c1, "Public sale hasn't started yet");
        require(!(arg0 > 0x05), "Only up to 5 tubbies can be minted at once");
        require(msg.value == (arg0 * 0x016345785d8a0000), "wrong payment");
        uint256 var_c = 0x20 + var_c;
        require(!(address(msg.sender) == 0), CustomError_d1a57ed6());
        require(!(arg0 == 0), CustomError_d1a57ed6());
        address var_g = address(msg.sender);
        storage_map_p[var_g] = (uint64((storage_map_p[var_g] / 0x01) + arg0) * 0x01) | (uint192(storage_map_p[var_g]));
        var_g = address(msg.sender);
        storage_map_p[var_g] = (uint64((storage_map_p[var_g] / 0x010000000000000000) + arg0) * 0x010000000000000000) | (uint192(storage_map_p[var_g]));
        var_g = totalSupply;
        storage_map_p[var_g] = (address(msg.sender) * 0x01) | (uint96(storage_map_p[var_g]));
        var_g = totalSupply;
        storage_map_p[var_g] = (uint64(block.timestamp) * 0x010000000000000000000000000000000000000000) | (uint192(storage_map_p[var_g]));
        require(!(0 < arg0), CustomError_d1a57ed6());
        emit Transfer(0, address(msg.sender), totalSupply);
        require(!0, CustomError_d1a57ed6());
        require(!(address(msg.sender).code.length > 0), CustomError_d1a57ed6());
        require(0x01, CustomError_d1a57ed6());
        address var_d = address(msg.sender);
        require(!0 > var_c.length);
        uint256 var_l = 0;
        require(address(msg.sender).code.length);
        (bool success, bytes memory ret0) = address(msg.sender).{ value: var_l ether }Unresolved_150b7a02(var_d); // call
        require(ret0.length == 0);
        require(!var_m == 0);
        var_c = var_c + (uint248(ret0.length + 0x3f));
        require(!(var_c.length == 0), CustomError_d1a57ed6());
        var_c = var_c + (uint248(ret0.length + 0x1f));
        require(!((var_c + ret0.length) - var_c) < 0x20);
        require(var_o == (uint32(var_o)));
        require(0x01);
        require(ret0.length == 0);
        require(!var_m == 0);
        var_c = var_c + (uint248(ret0.length + 0x3f));
        require(!(var_c.length == 0), CustomError_d1a57ed6());
        totalSupply = totalSupply;
        require(!((totalSupply - store_i) > 0x4e20), "limit reached");
    }
    
    /// @custom:selector    0x42842e0e
    /// @custom:signature   Unresolved_42842e0e(address arg0) public pure
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_42842e0e(address arg0) public pure {
        require(arg0 == (address(arg0)));
    }
    
    /// @custom:selector    0x23b872dd
    /// @custom:signature   Unresolved_23b872dd(address arg0) public pure
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function Unresolved_23b872dd(address arg0) public pure {
        require(arg0 == (address(arg0)));
    }
    
    /// @custom:selector    0x70a08231
    /// @custom:signature   balanceOf(address arg0) public view returns (uint64)
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function balanceOf(address arg0) public view returns (uint64) {
        require(arg0 == (address(arg0)));
        require(!(address(arg0) == 0), CustomError_8f4eb604());
        address var_a = address(arg0);
        return uint64(storage_map_g[var_a] / 0x01);
    }
    
    /// @custom:selector    0xf2fde38b
    /// @custom:signature   transferOwnership(address arg0) public
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function transferOwnership(address arg0) public {
        require(arg0 == (address(arg0)));
        require(address(owner / 0x01) == (address(msg.sender)), "Ownable: caller is not the owner");
        require(!(address(arg0) == 0), "Ownable: new owner is the zero address");
        owner = (address(arg0) * 0x01) | (uint96(owner));
        emit OwnershipTransferred(address(owner / 0x01), address(arg0));
    }
    
    /// @custom:selector    0x6c0360eb
    /// @custom:signature   baseURI() public view returns (bytes memory)
    function baseURI() public view returns (bytes memory) {
        if (store_l) {
            if (!(store_l) == ((store_l / 0x02) < 0x20)) {
                uint256 var_c = var_c + (0x20 + (((0x1f + (store_l / 0x02)) / 0x20) * 0x20));
                if (store_l) {
                    if (!(store_l) == ((store_l / 0x02) < 0x20)) {
                        if (!store_l / 0x02) {
                            if (0x1f < (store_l / 0x02)) {
                                var_a = 0x0c;
                                if ((0x20 + var_c) + (store_l / 0x02) > (0x20 + (0x20 + var_c))) {
                                    if (!0 > var_c.length) {
                                        return abi.encodePacked((var_c + 0x20) - var_c, var_c.length);
                                        return abi.encodePacked((var_c + 0x20) - var_c, var_c.length);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
    /// @custom:selector    0xb77a147b
    /// @custom:signature   mint(bytes32[] arg0) public payable
    /// @param              arg0 ["uint256", "bytes32", "int256"]
    function mint(bytes32[] arg0) public payable {
        require(!arg0 > 0xffffffffffffffff);
        require(!(arg0) > 0xffffffffffffffff);
        uint256 var_a = var_a + (0x20 + (0x20 * (arg0)));
        var_c = msg.data[36:36];
        require((address(msg.sender) << 0) > (var_c), "already claimed");
        var_a = ((0x20 + var_a) + 0x20) + 0x20;
        require(!(0 == 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff), "already claimed");
        require(((address(msg.sender) << 0) == 0x432b7354b99a2b9c27e7b60d580c6ec20ba5949d2d7fc92c91ac69b4c4cfdd4d) == 0x01, "already claimed");
        address var_g = address(msg.sender);
        require((bytes1(storage_map_m[var_g] / 0x01)) == 0, "already claimed");
        var_g = address(msg.sender);
        storage_map_m[var_g] = (0x01 * 0x01) | (uint248(storage_map_m[var_g]));
        require(msg.value == 0x016345785d8a0000, CustomError_b562e8dd());
        var_a = 0x20 + var_a;
        var_d = 0;
        require(!(address(msg.sender) == 0), CustomError_b562e8dd());
        require(!(0x01 == 0), CustomError_b562e8dd());
        var_g = address(msg.sender);
        storage_map_p[var_g] = (uint64((storage_map_p[var_g] / 0x01) + 0x01) * 0x01) | (uint192(storage_map_p[var_g]));
        var_g = address(msg.sender);
        storage_map_p[var_g] = (uint64((storage_map_p[var_g] / 0x010000000000000000) + 0x01) * 0x010000000000000000) | (uint192(storage_map_p[var_g]));
        var_g = totalSupply;
        storage_map_p[var_g] = (address(msg.sender) * 0x01) | (uint96(storage_map_p[var_g]));
        var_g = totalSupply;
        storage_map_p[var_g] = (uint64(block.timestamp) * 0x010000000000000000000000000000000000000000) | (uint192(storage_map_p[var_g]));
        require(!(0 < 0x01), "limit reached");
        totalSupply = totalSupply;
        require(!((totalSupply - store_i) > 0x4e20), "limit reached");
        emit Transfer(0, address(msg.sender), totalSupply);
        require(!0, CustomError_d1a57ed6());
        require(!(address(msg.sender).code.length > 0), CustomError_d1a57ed6());
        require(0x01, CustomError_d1a57ed6());
        require(!0x01 < 0x01);
        emit Transfer(0, address(msg.sender), 0x01 + totalSupply);
        require(!0);
        require(!(address(msg.sender).code.length) > 0);
        var_k = address(msg.sender);
        uint256 var_l = 0;
        require(!0 > var_a.length);
        require(address(msg.sender).code.length);
        (bool success, bytes memory ret0) = address(msg.sender).{ value: var_d ether }Unresolved_150b7a02(var_k, var_l); // call
        require(ret0.length == 0);
        require(!var_q == 0);
        var_a = var_a + (uint248(ret0.length + 0x3f));
        require(!(var_a.length == 0), CustomError_d1a57ed6());
        var_a = var_a + (uint248(ret0.length + 0x1f));
        require(!((var_a + ret0.length) - var_a) < 0x20);
        require(var_s == (uint32(var_s)));
        require(0x01);
        require(ret0.length == 0);
        require(!var_q == 0);
        var_a = var_a + (uint248(ret0.length + 0x3f));
        require(!(var_a.length == 0), CustomError_d1a57ed6());
    }
    
    /// @custom:selector    0x2ad22052
    /// @custom:signature   retrieveFunds(address arg0) public
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function retrieveFunds(address arg0) public {
        require(arg0 == (address(arg0)));
        require(address(realOwner / 0x01) == (address(msg.sender)), "MultisigOwnable: caller is not the real owner");
        (bool success, bytes memory ret0) = address(arg0).transfer(address(this).balance);
    }
    
    /// @custom:selector    0x7035bf18
    /// @custom:signature   unrevealedURI() public view returns (bytes memory)
    function unrevealedURI() public view returns (bytes memory) {
        if (store_k) {
            if (!(store_k) == ((store_k / 0x02) < 0x20)) {
                uint256 var_c = var_c + (0x20 + (((0x1f + (store_k / 0x02)) / 0x20) * 0x20));
                if (store_k) {
                    if (!(store_k) == ((store_k / 0x02) < 0x20)) {
                        if (!store_k / 0x02) {
                            if (0x1f < (store_k / 0x02)) {
                                var_a = 0x0d;
                                if ((0x20 + var_c) + (store_k / 0x02) > (0x20 + (0x20 + var_c))) {
                                    if (!0 > var_c.length) {
                                        return abi.encodePacked((var_c + 0x20) - var_c, var_c.length);
                                        return abi.encodePacked((var_c + 0x20) - var_c, var_c.length);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
    /// @custom:selector    0x09af3f9a
    /// @custom:signature   transferLowerOwnership(address arg0) public
    /// @param              arg0 ["address", "uint160", "bytes20", "int160"]
    function transferLowerOwnership(address arg0) public {
        require(arg0 == (address(arg0)));
        require(address(realOwner / 0x01) == (address(msg.sender)), "MultisigOwnable: caller is not the real owner");
        owner = (address(arg0) * 0x01) | (uint96(owner));
        emit OwnershipTransferred(address(owner / 0x01), address(arg0));
    }
    
    /// @custom:selector    0x715018a6
    /// @custom:signature   renounceOwnership() public
    function renounceOwnership() public {
        require(address(owner / 0x01) == (address(msg.sender)), "Ownable: caller is not the owner");
        owner = 0 | (uint96(owner));
        emit OwnershipTransferred(address(owner / 0x01), 0);
    }
}

ABI

[
  {
    "type": "function",
    "name": "REVEAL_BATCH_SIZE",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "TOKEN_LIMIT",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_23b872dd",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_42842e0e",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_729ad39e",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "Unresolved_a22cb465",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "Unresolved_b88d4fde",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_e985e9c5",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "Unresolved_e9d1dd69",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "airdropped",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "approve",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "balanceOf",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint64"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "baseURI",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "batchToSeed",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "claimed",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "finalized",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getApproved",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "lastTokenRevealed",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "merkleRoot",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "mint",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32[]"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "mintFromSale",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "name",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "owner",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "ownerOf",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "rawFulfillRandomness",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes32"
      },
      {
        "name": "arg1",
        "type": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "realOwner",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "renounceOwnership",
    "inputs": [],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "requestRandomSeed",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "retrieveFunds",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "startSaleTimestamp",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "supportsInterface",
    "inputs": [
      {
        "name": "arg0",
        "type": "bytes4"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "symbol",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "tokenURI",
    "inputs": [
      {
        "name": "arg0",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "totalSupply",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "transferLowerOwnership",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "transferOwnership",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "transferRealOwnership",
    "inputs": [
      {
        "name": "arg0",
        "type": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "unrevealedURI",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "useFancyMath",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "event",
    "name": "Approval",
    "inputs": [
      {
        "name": "arg0",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg2",
        "type": "uint256",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ApprovalForAll",
    "inputs": [
      {
        "name": "arg0",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg2",
        "type": "bool",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OwnershipTransferred",
    "inputs": [
      {
        "name": "arg0",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "address",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Transfer",
    "inputs": [
      {
        "name": "arg0",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg1",
        "type": "address",
        "indexed": false
      },
      {
        "name": "arg2",
        "type": "uint256",
        "indexed": false
      }
    ],
    "anonymous": false
  },
  {
    "type": "error",
    "name": "ApprovalCallerNotOwnerNorApproved",
    "inputs": []
  },
  {
    "type": "error",
    "name": "ApprovalQueryForNonexistentToken",
    "inputs": []
  },
  {
    "type": "error",
    "name": "ApprovalToCurrentOwner",
    "inputs": []
  },
  {
    "type": "error",
    "name": "ApproveToCaller",
    "inputs": []
  },
  {
    "type": "error",
    "name": "BalanceQueryForZeroAddress",
    "inputs": []
  },
  {
    "type": "error",
    "name": "MintToZeroAddress",
    "inputs": []
  },
  {
    "type": "error",
    "name": "MintZeroQuantity",
    "inputs": []
  },
  {
    "type": "error",
    "name": "OwnerQueryForNonexistentToken",
    "inputs": []
  },
  {
    "type": "error",
    "name": "TransferToNonERC721ReceiverImplementer",
    "inputs": []
  }
]

UNKNOWN SELECTORS (2)

0xe9d1dd69unknown
0x59cc5f24unknown
These selectors are not yet in the research database — they are being investigated and will be added as known functions once identified. They are also marked in red in the decompiled Solidity above.

KNOWN CLUSTER ADDRESSES IN THIS BYTECODE (0)

(none)