[
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "_expected",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "_actual",
                "type": "uint256"
            }
        ],
        "name": "BadArgumentLength",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_owner",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_delegate",
                "type": "address"
            }
        ],
        "name": "LazyDelegateRegistryOnlyOwner",
        "type": "error"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": false,
                "internalType": "address",
                "name": "_token",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "_serial",
                "type": "uint256"
            },
            {
                "indexed": false,
                "internalType": "address",
                "name": "_delegate",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "address",
                "name": "_owner",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "bool",
                "name": "_delegated",
                "type": "bool"
            }
        ],
        "name": "TokenDelegated",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": false,
                "internalType": "address",
                "name": "_wallet",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "address",
                "name": "_delegate",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "bool",
                "name": "_delegated",
                "type": "bool"
            }
        ],
        "name": "WalletDelegated",
        "type": "event"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_proposedDelegate",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_token",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "_serial",
                "type": "uint256"
            }
        ],
        "name": "checkDelegateToken",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_actualWallet",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_proposedDelegate",
                "type": "address"
            }
        ],
        "name": "checkDelegateWallet",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_token",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "_serial",
                "type": "uint256"
            }
        ],
        "name": "checkNFTDelegationIsValid",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address[]",
                "name": "_tokens",
                "type": "address[]"
            },
            {
                "internalType": "uint256[][]",
                "name": "_serials",
                "type": "uint256[][]"
            }
        ],
        "name": "checkNFTDelegationIsValidBatch",
        "outputs": [
            {
                "internalType": "bool[][]",
                "name": "valid",
                "type": "bool[][]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_delegate",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_token",
                "type": "address"
            },
            {
                "internalType": "uint256[]",
                "name": "_serials",
                "type": "uint256[]"
            }
        ],
        "name": "delegateNFT",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_delegate",
                "type": "address"
            },
            {
                "internalType": "address[]",
                "name": "_tokens",
                "type": "address[]"
            },
            {
                "internalType": "uint256[][]",
                "name": "_serials",
                "type": "uint256[][]"
            }
        ],
        "name": "delegateNFTs",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_delegate",
                "type": "address"
            }
        ],
        "name": "delegateWalletTo",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_wallet",
                "type": "address"
            }
        ],
        "name": "getDelegateWallet",
        "outputs": [
            {
                "internalType": "address",
                "name": "delegate",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_ownerWallet",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "_includeSerials",
                "type": "bool"
            }
        ],
        "name": "getDelegatedNFTsBy",
        "outputs": [
            {
                "internalType": "address[]",
                "name": "tokens",
                "type": "address[]"
            },
            {
                "internalType": "uint256[][]",
                "name": "serials",
                "type": "uint256[][]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_token",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "_serial",
                "type": "uint256"
            }
        ],
        "name": "getNFTDelegatedTo",
        "outputs": [
            {
                "internalType": "address",
                "name": "wallet",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address[]",
                "name": "_tokens",
                "type": "address[]"
            },
            {
                "internalType": "uint256[][]",
                "name": "_serials",
                "type": "uint256[][]"
            }
        ],
        "name": "getNFTListDelegatedTo",
        "outputs": [
            {
                "internalType": "address[][]",
                "name": "delegateList",
                "type": "address[][]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_delegate",
                "type": "address"
            }
        ],
        "name": "getNFTsDelegatedTo",
        "outputs": [
            {
                "internalType": "address[]",
                "name": "tokens",
                "type": "address[]"
            },
            {
                "internalType": "uint256[][]",
                "name": "serials",
                "type": "uint256[][]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_ownerWallet",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_token",
                "type": "address"
            }
        ],
        "name": "getSerialsDelegatedBy",
        "outputs": [
            {
                "internalType": "uint256[]",
                "name": "serials",
                "type": "uint256[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_ownerWallet",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_token",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "_offset",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "_limit",
                "type": "uint256"
            }
        ],
        "name": "getSerialsDelegatedByRange",
        "outputs": [
            {
                "internalType": "uint256[]",
                "name": "serials",
                "type": "uint256[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_delegate",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_token",
                "type": "address"
            }
        ],
        "name": "getSerialsDelegatedTo",
        "outputs": [
            {
                "internalType": "uint256[]",
                "name": "serials",
                "type": "uint256[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_delegate",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_token",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "_offset",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "_limit",
                "type": "uint256"
            }
        ],
        "name": "getSerialsDelegatedToRange",
        "outputs": [
            {
                "internalType": "uint256[]",
                "name": "serials",
                "type": "uint256[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "getTokensWithDelegates",
        "outputs": [
            {
                "internalType": "address[]",
                "name": "",
                "type": "address[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "_offset",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "_limit",
                "type": "uint256"
            }
        ],
        "name": "getTokensWithDelegatesRange",
        "outputs": [
            {
                "internalType": "address[]",
                "name": "tokens",
                "type": "address[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "getTotalTokensWithDelegates",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "getTotalWalletsWithDelegates",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_delegateWallet",
                "type": "address"
            }
        ],
        "name": "getWalletsDelegatedTo",
        "outputs": [
            {
                "internalType": "address[]",
                "name": "",
                "type": "address[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "getWalletsWithDelegates",
        "outputs": [
            {
                "internalType": "address[]",
                "name": "",
                "type": "address[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "_offset",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "_limit",
                "type": "uint256"
            }
        ],
        "name": "getWalletsWithDelegatesRange",
        "outputs": [
            {
                "internalType": "address[]",
                "name": "wallets",
                "type": "address[]"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_token",
                "type": "address"
            },
            {
                "internalType": "uint256[]",
                "name": "_serials",
                "type": "uint256[]"
            }
        ],
        "name": "revokeDelegateNFT",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address[]",
                "name": "_tokens",
                "type": "address[]"
            },
            {
                "internalType": "uint256[][]",
                "name": "_serials",
                "type": "uint256[][]"
            }
        ],
        "name": "revokeDelegateNFTs",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "revokeDelegateWallet",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "totalSerialsDelegated",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    }
]