{
    "contractName": "TestPaymasterEverythingAccepted",
    "abi": [
        {
            "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": false,
                    "internalType": "bool",
                    "name": "success",
                    "type": "bool"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "actualCharge",
                    "type": "uint256"
                }
            ],
            "name": "SampleRecipientPostCall",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [],
            "name": "SampleRecipientPreCall",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "FORWARDER_HUB_OVERHEAD",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "PAYMASTER_ACCEPTANCE_BUDGET",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "POST_RELAYED_CALL_GAS_LIMIT",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "PRE_RELAYED_CALL_GAS_LIMIT",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "from",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "to",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "value",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "gas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "nonce",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "data",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct IForwarder.ForwardRequest",
                            "name": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "gasPrice",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "pctRelayFee",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "baseRelayFee",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                }
                            ],
                            "internalType": "struct GsnTypes.RelayData",
                            "name": "relayData",
                            "type": "tuple"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayRequest",
                    "name": "relayRequest",
                    "type": "tuple"
                }
            ],
            "name": "_verifyForwarder",
            "outputs": [],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getGasLimits",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "acceptanceBudget",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "preRelayedCallGasLimit",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "postRelayedCallGasLimit",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IPaymaster.GasLimits",
                    "name": "limits",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getHubAddr",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getRelayHubDeposit",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IRelayHub",
                    "name": "hub",
                    "type": "address"
                }
            ],
            "name": "setRelayHub",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IForwarder",
                    "name": "forwarder",
                    "type": "address"
                }
            ],
            "name": "setTrustedForwarder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "trustedForwarder",
            "outputs": [
                {
                    "internalType": "contract IForwarder",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address payable",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "withdrawRelayHubDepositTo",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "stateMutability": "payable",
            "type": "receive"
        },
        {
            "inputs": [],
            "name": "versionPaymaster",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "from",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "to",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "value",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "gas",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "nonce",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "data",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct IForwarder.ForwardRequest",
                            "name": "request",
                            "type": "tuple"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "uint256",
                                    "name": "gasPrice",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "pctRelayFee",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "baseRelayFee",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "relayWorker",
                                    "type": "address"
                                },
                                {
                                    "internalType": "address",
                                    "name": "paymaster",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "paymasterData",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "clientId",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "address",
                                    "name": "forwarder",
                                    "type": "address"
                                }
                            ],
                            "internalType": "struct GsnTypes.RelayData",
                            "name": "relayData",
                            "type": "tuple"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayRequest",
                    "name": "relayRequest",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "signature",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "approvalData",
                    "type": "bytes"
                },
                {
                    "internalType": "uint256",
                    "name": "maxPossibleGas",
                    "type": "uint256"
                }
            ],
            "name": "preRelayedCall",
            "outputs": [
                {
                    "internalType": "bytes",
                    "name": "",
                    "type": "bytes"
                },
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "context",
                    "type": "bytes"
                },
                {
                    "internalType": "bool",
                    "name": "success",
                    "type": "bool"
                },
                {
                    "internalType": "uint256",
                    "name": "gasUseWithoutPost",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "gasPrice",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "pctRelayFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "baseRelayFee",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "relayWorker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "paymaster",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "paymasterData",
                            "type": "bytes"
                        },
                        {
                            "internalType": "uint256",
                            "name": "clientId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "forwarder",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct GsnTypes.RelayData",
                    "name": "relayData",
                    "type": "tuple"
                }
            ],
            "name": "postRelayedCall",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "deposit",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address payable",
                    "name": "destination",
                    "type": "address"
                }
            ],
            "name": "withdrawAll",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.6.10+commit.00c0fcaf\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualCharge\",\"type\":\"uint256\"}],\"name\":\"SampleRecipientPostCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"SampleRecipientPreCall\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FORWARDER_HUB_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAYMASTER_ACCEPTANCE_BUDGET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POST_RELAYED_CALL_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRE_RELAYED_CALL_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pctRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"internalType\":\"struct GsnTypes.RelayRequest\",\"name\":\"relayRequest\",\"type\":\"tuple\"}],\"name\":\"_verifyForwarder\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasLimits\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"acceptanceBudget\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preRelayedCallGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRelayedCallGasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct IPaymaster.GasLimits\",\"name\":\"limits\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHubAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRelayHubDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUseWithoutPost\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pctRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"name\":\"postRelayedCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IForwarder.ForwardRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pctRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseRelayFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"relayWorker\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"paymaster\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"paymasterData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"clientId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"}],\"internalType\":\"struct GsnTypes.RelayData\",\"name\":\"relayData\",\"type\":\"tuple\"}],\"internalType\":\"struct GsnTypes.RelayRequest\",\"name\":\"relayRequest\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"approvalData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"maxPossibleGas\",\"type\":\"uint256\"}],\"name\":\"preRelayedCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRelayHub\",\"name\":\"hub\",\"type\":\"address\"}],\"name\":\"setRelayHub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IForwarder\",\"name\":\"forwarder\",\"type\":\"address\"}],\"name\":\"setTrustedForwarder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedForwarder\",\"outputs\":[{\"internalType\":\"contract IForwarder\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionPaymaster\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"withdrawAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"withdrawRelayHubDepositTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}}},\"userdoc\":{\"methods\":{\"getRelayHubDeposit()\":{\"notice\":\"check current deposit on relay hub.\"},\"withdrawRelayHubDepositTo(uint256,address)\":{\"notice\":\"withdraw deposit from relayHub\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/dror/IdeaProjects/gsn/contracts/test/TestPaymasterEverythingAccepted.sol\":\"TestPaymasterEverythingAccepted\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/dror/IdeaProjects/gsn/contracts/BasePaymaster.sol\":{\"keccak256\":\"0x3d919d37498eedbfb21ccca8570501db480dc884ab9a68e1d8d69062c8efe18d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b9e02e669787213806a6012d710ae4d314f28f4dc176f45ee91eebed20800cad\",\"dweb:/ipfs/QmcNLLXT7mSD5wFzCF8KNCkSBBmeZa9NfLZe2ah195PZ7X\"]},\"/Users/dror/IdeaProjects/gsn/contracts/forwarder/Forwarder.sol\":{\"keccak256\":\"0x10b4cbeebab696613fa4123c50db43e8ccc2da031a88638e194777cda792a3cb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3872a73495ef634e8cedce8718da5e4b8b2faac9b6633cfefdc30c0f90069abc\",\"dweb:/ipfs/QmSmrciT8wkMXNeDh3dWHRe9JFULeEHNQ652WDPAZkwAVu\"]},\"/Users/dror/IdeaProjects/gsn/contracts/forwarder/IForwarder.sol\":{\"keccak256\":\"0x253fd0f17ff0a73a96d83570b9d6bdc027b64e3ff0aca19d6c0b621bd5156aee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd3169e07849f996eb281bf4700cea430e45eda54a80169f0a360362cc2a8e84\",\"dweb:/ipfs/QmXa1x3UpA9tAa26Fwf4b4MkVqeEfEFgDPhNfRMtwJuoms\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/GsnTypes.sol\":{\"keccak256\":\"0xedcb9a8dfeed8c622844c604c5ebdb3a9fb92f859a1530b9327fb85476206062\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5fba2e08a6793d60d41c49c817a8837f7fdec6706950e804f79bac0a88b9bad0\",\"dweb:/ipfs/QmPnrUNzGvshVLrSmgBN4kB2Z2NXTzCyWuegjHo15292uD\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IPaymaster.sol\":{\"keccak256\":\"0x29ce667767ec535da1172bebf6924f24bc254c587fd2c1954a575b3bc06d9dbf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c243806f0ff756488f7212c7ee652d163b4c59e766274fbf8deb1fa5020b2a28\",\"dweb:/ipfs/QmZREaXLpsMnzYJjJhvo2T5vRXtinefqy1TwYeuHesaxY8\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IRelayHub.sol\":{\"keccak256\":\"0xea80327e2ca933cc697857c5546702c56ad84c4a3ffd92c7a90c980eedf4f79e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ebdd033b54c1e4701be43e0c12ca163564304c498eab2097d0326cb645ea81c\",\"dweb:/ipfs/QmWVLAaDmqAiB2EADZBuVojgzjYfX2gYk2o7wBqHm42Tpr\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IRelayRecipient.sol\":{\"keccak256\":\"0xbb9d970a466d0155113acc87f0ea403df413e070e0a1ddce66439f2f82ac6d01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a7d40ca09005a8a4598edc292c079be77fa0ba05f3a93514fcbe9349e8a265d\",\"dweb:/ipfs/QmbY3DJ6jf18Kprx24oadvMqrjguYUHhf2tBVd3kvCVtJc\"]},\"/Users/dror/IdeaProjects/gsn/contracts/interfaces/IStakeManager.sol\":{\"keccak256\":\"0xef5e2a00a9aa741faa94cf828dc060b05566dc87e32f2b41577e7d3a97f2cd8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99cc978b676db13da12ef5da9cc509715c3f24896b98cbac1af0f9d2d0ede554\",\"dweb:/ipfs/QmWBxE1Uxru5j26xBJ9tFzivCtdy5Fe6mZuC8mgLsmubyX\"]},\"/Users/dror/IdeaProjects/gsn/contracts/test/TestPaymasterEverythingAccepted.sol\":{\"keccak256\":\"0x90ed9f443cf589a0bf85f39c9bc2134a2734ed3bf192f858c89fd715966000a7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b0072183646a257e6dadbecb9c2efac122d7d2ccfece8e28593d1087a91b462\",\"dweb:/ipfs/QmQPdm2CWtwiqh9tgZWZ8fAEK9qnppC8fQxRASp19itRBS\"]},\"/Users/dror/IdeaProjects/gsn/contracts/utils/GsnEip712Library.sol\":{\"keccak256\":\"0x9c380dd0a60ee6a26fb52acdbdd0fce4c9273a33c0e06b57989264820291d863\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cda18d10adb9f83c113a9184a881e34a7a5e3e7b06cf760c908b7507cac52d9f\",\"dweb:/ipfs/QmWQjHFmx2QYJzyTig6kzWPG34MQzVNqK2uibAvejuxywJ\"]},\"/Users/dror/IdeaProjects/gsn/contracts/utils/GsnUtils.sol\":{\"keccak256\":\"0x8f13a7751fe2d62056aafcd2492bac22defb01f05aee34e6b7827db66c6578ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28710b609b3066f482cdcbedd4f14255f4363b89dc6052d8da78ecfab4ef1681\",\"dweb:/ipfs/QmU7v21Qtm1wppx16nxdoh3VMSoaK66vyFYMezMXEZ15Db\"]},\"/Users/dror/IdeaProjects/gsn/contracts/utils/MinLibBytes.sol\":{\"keccak256\":\"0x96c2ad0c80e0db9a849d8f8c9ea865dface3b11983435fcfbd02cd05037293f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://643018a775e0d9df91ac9d28c9b5afc586f322eb14cb4cb9bcb0154a9bbf14e6\",\"dweb:/ipfs/QmPTAEP4VminSwttSwhvT2svenkLkjKsRtXiLpLAPc6ajC\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0xdb26cbf4d028490f49831a7865c2fe1b28db44b535ca8d343785a3b768aae183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://840b14ce0315c47d49ba328f1f9fa7654ded1c9e1559e6c5e777a7b2dc28bf0a\",\"dweb:/ipfs/QmTLLabn4wcfGro9LEmUXUN2nwKqZSotXMvjDCLXEnLtZP\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x4bd6402ca6b3419008c2b482aff54e66836e8cb4eba2680e42ac5884ae6424fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8f9f711fb8d0d92aeea1c327e3845d13ca1fa8f142e47f8723cd5b3106fb29a3\",\"dweb:/ipfs/QmVQUReDW9f4zGqhizwHnyU8EntMs95tbASdqkGncnikba\"]},\"@openzeppelin/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0x1efcb1ccef6b3bce65467c4b704cec8d0582e35ff48352269ba8cda4b54ae3da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f40d4c72c7f8dfdfb9fd048de5d3ece0020dfcd057b29f0630fd703e7fbe7301\",\"dweb:/ipfs/QmSw7Q9JVVbVDWwVbaJjHhkPmTm8GF3nwVTZUfnmPqTdNm\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5\",\"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV\"]}},\"version\":1}",
    "bytecode": "0x608060405234801561001057600080fd5b5060006100246001600160e01b0361007316565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610077565b3390565b6110d8806100866000396000f3fe6080604052600436106101235760003560e01c80639ea09211116100a0578063df463a6611610064578063df463a6614610368578063e5c124461461037d578063f2fde38b146103ab578063f9c002f7146103cb578063fa09e630146103e0576101bf565b80639ea09211146102f6578063b90b41cf14610316578063bbdaa3c91461032b578063d0e30db014610340578063da74222814610348576101bf565b80637bb05264116100e75780637bb052641461026a5780637da0a8771461028a5780638da5cb5b1461029f5780638e9483b0146102b4578063921276ea146102d4576101bf565b80632afe31c1146101c45780632d14c4b7146101ef5780635ea54eee14610211578063715018a61461023357806374e861d614610248576101bf565b366101bf576001546001600160a01b03166101595760405162461bcd60e51b815260040161015090610e9d565b60405180910390fd5b60015460405163aa67c91960e01b81526001600160a01b039091169063aa67c91990349061018b903090600401610dc5565b6000604051808303818588803b1580156101a457600080fd5b505af11580156101b8573d6000803e3d6000fd5b5050505050005b600080fd5b3480156101d057600080fd5b506101d9610400565b6040516101e69190610fe4565b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004610d4e565b610486565b005b34801561021d57600080fd5b50610226610521565b6040516101e69190610fc3565b34801561023f57600080fd5b5061020f610551565b34801561025457600080fd5b5061025d6105d0565b6040516101e69190610dc5565b34801561027657600080fd5b5061020f610285366004610b95565b6105df565b34801561029657600080fd5b5061025d610636565b3480156102ab57600080fd5b5061025d610645565b3480156102c057600080fd5b5061020f6102cf366004610bd4565b610654565b3480156102e057600080fd5b506102e9610694565b6040516101e69190610e0d565b34801561030257600080fd5b5061020f610311366004610c62565b6106b4565b34801561032257600080fd5b506101d961070c565b34801561033757600080fd5b506101d9610712565b61020f610719565b34801561035457600080fd5b5061020f610363366004610b95565b6107a7565b34801561037457600080fd5b506101d96107fe565b34801561038957600080fd5b5061039d610398366004610c9d565b610805565b6040516101e6929190610de9565b3480156103b757600080fd5b5061020f6103c6366004610b95565b61086f565b3480156103d757600080fd5b506101d9610925565b3480156103ec57600080fd5b5061020f6103fb366004610b95565b61092c565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610431903090600401610dc5565b60206040518083038186803b15801561044957600080fd5b505afa15801561045d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104819190610d36565b905090565b61048e6109bd565b6000546001600160a01b039081169116146104bb5760405162461bcd60e51b815260040161015090610f8e565b600154604051627b8a6760e11b81526001600160a01b039091169062f714ce906104eb9085908590600401610fed565b600060405180830381600087803b15801561050557600080fd5b505af1158015610519573d6000803e3d6000fd5b505050505050565b610529610b16565b5060408051606081018252620249f08152620186a060208201526201adb09181019190915290565b6105596109bd565b6000546001600160a01b039081169116146105865760405162461bcd60e51b815260040161015090610f8e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001546001600160a01b031690565b6105e76109bd565b6000546001600160a01b039081169116146106145760405162461bcd60e51b815260040161015090610f8e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b6000546001600160a01b031690565b7f8c7dc6f54401600ae78b31aec3dec125cfa5b7bcbf4ff3cbc5bfd818ba082b498383604051610685929190610dd9565b60405180910390a15050505050565b606060405180606001604052806021815260200161108260219139905090565b6106c16020820182611019565b6106d39061010081019060e001610b95565b6002546001600160a01b039081169116146107005760405162461bcd60e51b815260040161015090610ed4565b610709816109c1565b50565b61c35081565b6201adb081565b6001546001600160a01b03166107415760405162461bcd60e51b815260040161015090610e9d565b60015460405163aa67c91960e01b81526001600160a01b039091169063aa67c919903490610773903090600401610dc5565b6000604051808303818588803b15801561078c57600080fd5b505af11580156107a0573d6000803e3d6000fd5b5050505050565b6107af6109bd565b6000546001600160a01b039081169116146107dc5760405162461bcd60e51b815260040161015090610f8e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b620249f081565b60606000610812886106b4565b6040517fa8c41f12bf21d07540a32ccb08bbc931778b2943d4747381c9466041b89d7d7a90600090a1505060408051808201909152600e81526d6e6f20726576657274206865726560901b60208201526000965096945050505050565b6108776109bd565b6000546001600160a01b039081169116146108a45760405162461bcd60e51b815260040161015090610f8e565b6001600160a01b0381166108ca5760405162461bcd60e51b815260040161015090610e57565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b620186a081565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a082319061095d903090600401610dc5565b60206040518083038186803b15801561097557600080fd5b505afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190610d36565b90506109b98183610486565b5050565b3390565b600060606109cf8380611004565b6109e0906040810190602001610b95565b6001600160a01b031663572b6c0560e01b6109fe6020860186611019565b610a109061010081019060e001610b95565b604051602401610a209190610dc5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610a5e9190610da9565b600060405180830381855afa9150503d8060008114610a99576040519150601f19603f3d011682016040523d82523d6000602084013e610a9e565b606091505b509150915081610ac05760405162461bcd60e51b815260040161015090610f57565b8051602014610ae15760405162461bcd60e51b815260040161015090610f0b565b80806020019051810190610af59190610bb8565b610b115760405162461bcd60e51b815260040161015090610e20565b505050565b60405180606001604052806000815260200160008152602001600081525090565b60008083601f840112610b48578182fd5b50813567ffffffffffffffff811115610b5f578182fd5b602083019150836020828501011115610b7757600080fd5b9250929050565b600060408284031215610b8f578081fd5b50919050565b600060208284031215610ba6578081fd5b8135610bb18161105e565b9392505050565b600060208284031215610bc9578081fd5b8151610bb181611073565b600080600080600060808688031215610beb578081fd5b853567ffffffffffffffff80821115610c02578283fd5b610c0e89838a01610b37565b909750955060208801359150610c2382611073565b9093506040870135925060608701359080821115610c3f578283fd5b50808701610100818a031215610c53578283fd5b80925050509295509295909350565b600060208284031215610c73578081fd5b813567ffffffffffffffff811115610c89578182fd5b610c9584828501610b7e565b949350505050565b60008060008060008060808789031215610cb5578081fd5b863567ffffffffffffffff80821115610ccc578283fd5b610cd88a838b01610b7e565b97506020890135915080821115610ced578283fd5b610cf98a838b01610b37565b90975095506040890135915080821115610d11578283fd5b50610d1e89828a01610b37565b979a9699509497949695606090950135949350505050565b600060208284031215610d47578081fd5b5051919050565b60008060408385031215610d60578182fd5b823591506020830135610d728161105e565b809150509250929050565b60008151808452610d9581602086016020860161102e565b601f01601f19169290920160200192915050565b60008251610dbb81846020870161102e565b9190910192915050565b6001600160a01b0391909116815260200190565b9115158252602082015260400190565b600060408252610dfc6040830185610d7d565b905082151560208301529392505050565b600060208252610bb16020830184610d7d565b6020808252601f908201527f696e76616c696420666f7277617264657220666f7220726563697069656e7400604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526019908201527f72656c6179206875622061646472657373206e6f742073657400000000000000604082015260600190565b60208082526018908201527f466f72776172646572206973206e6f7420747275737465640000000000000000604082015260600190565b6020808252602c908201527f697354727573746564466f727761726465722072657475726e656420696e766160408201526b6c696420726573706f6e736560a01b606082015260800190565b6020808252601b908201527f697354727573746564466f727761726465722072657665727465640000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b90815260200190565b9182526001600160a01b0316602082015260400190565b6000823560be19833603018112610dbb578182fd5b6000823560fe19833603018112610dbb578182fd5b60005b83811015611049578181015183820152602001611031565b83811115611058576000848401525b50505050565b6001600160a01b038116811461070957600080fd5b801515811461070957600080fdfe322e302e302b6f70656e67736e2e746573742d7065612e697061796d6173746572a2646970667358221220751d8c2a0252b97257ab77887cd7828d247a4261f18d6ff5f91945e84b2332fa64736f6c634300060a0033",
    "deployedBytecode": "0x6080604052600436106101235760003560e01c80639ea09211116100a0578063df463a6611610064578063df463a6614610368578063e5c124461461037d578063f2fde38b146103ab578063f9c002f7146103cb578063fa09e630146103e0576101bf565b80639ea09211146102f6578063b90b41cf14610316578063bbdaa3c91461032b578063d0e30db014610340578063da74222814610348576101bf565b80637bb05264116100e75780637bb052641461026a5780637da0a8771461028a5780638da5cb5b1461029f5780638e9483b0146102b4578063921276ea146102d4576101bf565b80632afe31c1146101c45780632d14c4b7146101ef5780635ea54eee14610211578063715018a61461023357806374e861d614610248576101bf565b366101bf576001546001600160a01b03166101595760405162461bcd60e51b815260040161015090610e9d565b60405180910390fd5b60015460405163aa67c91960e01b81526001600160a01b039091169063aa67c91990349061018b903090600401610dc5565b6000604051808303818588803b1580156101a457600080fd5b505af11580156101b8573d6000803e3d6000fd5b5050505050005b600080fd5b3480156101d057600080fd5b506101d9610400565b6040516101e69190610fe4565b60405180910390f35b3480156101fb57600080fd5b5061020f61020a366004610d4e565b610486565b005b34801561021d57600080fd5b50610226610521565b6040516101e69190610fc3565b34801561023f57600080fd5b5061020f610551565b34801561025457600080fd5b5061025d6105d0565b6040516101e69190610dc5565b34801561027657600080fd5b5061020f610285366004610b95565b6105df565b34801561029657600080fd5b5061025d610636565b3480156102ab57600080fd5b5061025d610645565b3480156102c057600080fd5b5061020f6102cf366004610bd4565b610654565b3480156102e057600080fd5b506102e9610694565b6040516101e69190610e0d565b34801561030257600080fd5b5061020f610311366004610c62565b6106b4565b34801561032257600080fd5b506101d961070c565b34801561033757600080fd5b506101d9610712565b61020f610719565b34801561035457600080fd5b5061020f610363366004610b95565b6107a7565b34801561037457600080fd5b506101d96107fe565b34801561038957600080fd5b5061039d610398366004610c9d565b610805565b6040516101e6929190610de9565b3480156103b757600080fd5b5061020f6103c6366004610b95565b61086f565b3480156103d757600080fd5b506101d9610925565b3480156103ec57600080fd5b5061020f6103fb366004610b95565b61092c565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610431903090600401610dc5565b60206040518083038186803b15801561044957600080fd5b505afa15801561045d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104819190610d36565b905090565b61048e6109bd565b6000546001600160a01b039081169116146104bb5760405162461bcd60e51b815260040161015090610f8e565b600154604051627b8a6760e11b81526001600160a01b039091169062f714ce906104eb9085908590600401610fed565b600060405180830381600087803b15801561050557600080fd5b505af1158015610519573d6000803e3d6000fd5b505050505050565b610529610b16565b5060408051606081018252620249f08152620186a060208201526201adb09181019190915290565b6105596109bd565b6000546001600160a01b039081169116146105865760405162461bcd60e51b815260040161015090610f8e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001546001600160a01b031690565b6105e76109bd565b6000546001600160a01b039081169116146106145760405162461bcd60e51b815260040161015090610f8e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b6000546001600160a01b031690565b7f8c7dc6f54401600ae78b31aec3dec125cfa5b7bcbf4ff3cbc5bfd818ba082b498383604051610685929190610dd9565b60405180910390a15050505050565b606060405180606001604052806021815260200161108260219139905090565b6106c16020820182611019565b6106d39061010081019060e001610b95565b6002546001600160a01b039081169116146107005760405162461bcd60e51b815260040161015090610ed4565b610709816109c1565b50565b61c35081565b6201adb081565b6001546001600160a01b03166107415760405162461bcd60e51b815260040161015090610e9d565b60015460405163aa67c91960e01b81526001600160a01b039091169063aa67c919903490610773903090600401610dc5565b6000604051808303818588803b15801561078c57600080fd5b505af11580156107a0573d6000803e3d6000fd5b5050505050565b6107af6109bd565b6000546001600160a01b039081169116146107dc5760405162461bcd60e51b815260040161015090610f8e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b620249f081565b60606000610812886106b4565b6040517fa8c41f12bf21d07540a32ccb08bbc931778b2943d4747381c9466041b89d7d7a90600090a1505060408051808201909152600e81526d6e6f20726576657274206865726560901b60208201526000965096945050505050565b6108776109bd565b6000546001600160a01b039081169116146108a45760405162461bcd60e51b815260040161015090610f8e565b6001600160a01b0381166108ca5760405162461bcd60e51b815260040161015090610e57565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b620186a081565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a082319061095d903090600401610dc5565b60206040518083038186803b15801561097557600080fd5b505afa158015610989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ad9190610d36565b90506109b98183610486565b5050565b3390565b600060606109cf8380611004565b6109e0906040810190602001610b95565b6001600160a01b031663572b6c0560e01b6109fe6020860186611019565b610a109061010081019060e001610b95565b604051602401610a209190610dc5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610a5e9190610da9565b600060405180830381855afa9150503d8060008114610a99576040519150601f19603f3d011682016040523d82523d6000602084013e610a9e565b606091505b509150915081610ac05760405162461bcd60e51b815260040161015090610f57565b8051602014610ae15760405162461bcd60e51b815260040161015090610f0b565b80806020019051810190610af59190610bb8565b610b115760405162461bcd60e51b815260040161015090610e20565b505050565b60405180606001604052806000815260200160008152602001600081525090565b60008083601f840112610b48578182fd5b50813567ffffffffffffffff811115610b5f578182fd5b602083019150836020828501011115610b7757600080fd5b9250929050565b600060408284031215610b8f578081fd5b50919050565b600060208284031215610ba6578081fd5b8135610bb18161105e565b9392505050565b600060208284031215610bc9578081fd5b8151610bb181611073565b600080600080600060808688031215610beb578081fd5b853567ffffffffffffffff80821115610c02578283fd5b610c0e89838a01610b37565b909750955060208801359150610c2382611073565b9093506040870135925060608701359080821115610c3f578283fd5b50808701610100818a031215610c53578283fd5b80925050509295509295909350565b600060208284031215610c73578081fd5b813567ffffffffffffffff811115610c89578182fd5b610c9584828501610b7e565b949350505050565b60008060008060008060808789031215610cb5578081fd5b863567ffffffffffffffff80821115610ccc578283fd5b610cd88a838b01610b7e565b97506020890135915080821115610ced578283fd5b610cf98a838b01610b37565b90975095506040890135915080821115610d11578283fd5b50610d1e89828a01610b37565b979a9699509497949695606090950135949350505050565b600060208284031215610d47578081fd5b5051919050565b60008060408385031215610d60578182fd5b823591506020830135610d728161105e565b809150509250929050565b60008151808452610d9581602086016020860161102e565b601f01601f19169290920160200192915050565b60008251610dbb81846020870161102e565b9190910192915050565b6001600160a01b0391909116815260200190565b9115158252602082015260400190565b600060408252610dfc6040830185610d7d565b905082151560208301529392505050565b600060208252610bb16020830184610d7d565b6020808252601f908201527f696e76616c696420666f7277617264657220666f7220726563697069656e7400604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526019908201527f72656c6179206875622061646472657373206e6f742073657400000000000000604082015260600190565b60208082526018908201527f466f72776172646572206973206e6f7420747275737465640000000000000000604082015260600190565b6020808252602c908201527f697354727573746564466f727761726465722072657475726e656420696e766160408201526b6c696420726573706f6e736560a01b606082015260800190565b6020808252601b908201527f697354727573746564466f727761726465722072657665727465640000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b90815260200190565b9182526001600160a01b0316602082015260400190565b6000823560be19833603018112610dbb578182fd5b6000823560fe19833603018112610dbb578182fd5b60005b83811015611049578181015183820152602001611031565b83811115611058576000848401525b50505050565b6001600160a01b038116811461070957600080fd5b801515811461070957600080fdfe322e302e302b6f70656e67736e2e746573742d7065612e697061796d6173746572a2646970667358221220751d8c2a0252b97257ab77887cd7828d247a4261f18d6ff5f91945e84b2332fa64736f6c634300060a0033",
    "immutableReferences": {},
    "sourceMap": "160:1474:21:-:0;;;;;;;;;;;;-1:-1:-1;865:17:35;885:12;-1:-1:-1;;;;;885:10:35;:12;:::i;:::-;907:6;:18;;-1:-1:-1;;;;;;907:18:35;-1:-1:-1;;;;;907:18:35;;;;;;;940:43;;907:18;;-1:-1:-1;907:18:35;940:43;;907:6;;940:43;831:159;160:1474:21;;590:104:34;677:10;590:104;:::o;160:1474:21:-;;;;;;;",
    "deployedSourceMap": "160:1474:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2806:8:0;;-1:-1:-1;;;;;2806:8:0;2790:69;;;;-1:-1:-1;;;2790:69:0;;;;;;;;;;;;;;;;;2869:8;;:51;;-1:-1:-1;;;2869:51:0;;-1:-1:-1;;;;;2869:8:0;;;;:19;;2895:9;;2869:51;;2914:4;;2869:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;160:1474:21;;;;;2423:139:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2972;;;;;;;;;;-1:-1:-1;2972:139:0;;;;;;;;:::i;:::-;;1160:308;;;;;;;;;;;;;:::i;:::-;;;;;;;;1689:145:35;;;;;;;;;;;;;:::i;621:102:0:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;2170:84;;;;;;;;;;-1:-1:-1;2170:84:0;;;;;;;;:::i;571:43::-;;;;;;;;;;;;;:::i;1066:77:35:-;;;;;;;;;;;;;:::i;928:331:21:-;;;;;;;;;;-1:-1:-1;928:331:21;;;;;;;;:::i;225:141::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;1633:273:0;;;;;;;;;;-1:-1:-1;1633:273:0;;;;;;;;:::i;794:54::-;;;;;;;;;;;;;:::i;982:60::-;;;;;;;;;;;;;:::i;1265:181:21:-;;;:::i;2260:113:0:-;;;;;;;;;;-1:-1:-1;2260:113:0;;;;;;;;:::i;1048:105::-;;;;;;;;;;;;;:::i;477:445:21:-;;;;;;;;;;-1:-1:-1;477:445:21;;;;;;;;:::i;:::-;;;;;;;;;1983:240:35;;;;;;;;;;-1:-1:-1;1983:240:35;;;;;;;;:::i;917:59:0:-;;;;;;;;;;;;;:::i;1452:180:21:-;;;;;;;;;;-1:-1:-1;1452:180:21;;;;;;;;:::i;2423:139:0:-;2522:8;;:33;;-1:-1:-1;;;2522:33:0;;2499:4;;-1:-1:-1;;;;;2522:8:0;;:18;;:33;;2549:4;;2522:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2515:40;;2423:139;:::o;2972:::-;1280:12:35;:10;:12::i;:::-;1270:6;;-1:-1:-1;;;;;1270:6:35;;;:22;;;1262:67;;;;-1:-1:-1;;;1262:67:35;;;;;;;;;3071:8:0::1;::::0;:33:::1;::::0;-1:-1:-1;;;3071:33:0;;-1:-1:-1;;;;;3071:8:0;;::::1;::::0;:17:::1;::::0;:33:::1;::::0;3089:6;;3097;;3071:33:::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2972:139:::0;;:::o;1160:308::-;1251:34;;:::i;:::-;-1:-1:-1;1309:152:0;;;;;;;;1102:51;1309:152;;970:6;1309:152;;;;1036:6;1309:152;;;;;;;1160:308;:::o;1689:145:35:-;1280:12;:10;:12::i;:::-;1270:6;;-1:-1:-1;;;;;1270:6:35;;;:22;;;1262:67;;;;-1:-1:-1;;;1262:67:35;;;;;;;;;1795:1:::1;1779:6:::0;;1758:40:::1;::::0;-1:-1:-1;;;;;1779:6:35;;::::1;::::0;1758:40:::1;::::0;1795:1;;1758:40:::1;1825:1;1808:19:::0;;-1:-1:-1;;;;;;1808:19:35::1;::::0;;1689:145::o;621:102:0:-;707:8;;-1:-1:-1;;;;;707:8:0;621:102;:::o;2170:84::-;1280:12:35;:10;:12::i;:::-;1270:6;;-1:-1:-1;;;;;1270:6:35;;;:22;;;1262:67;;;;-1:-1:-1;;;1262:67:35;;;;;;;;;2233:8:0::1;:14:::0;;-1:-1:-1;;;;;;2233:14:0::1;-1:-1:-1::0;;;;;2233:14:0;;;::::1;::::0;;;::::1;::::0;;2170:84::o;571:43::-;;;-1:-1:-1;;;;;571:43:0;;:::o;1066:77:35:-;1104:7;1130:6;-1:-1:-1;;;;;1130:6:35;1066:77;:::o;928:331:21:-;1201:51;1225:7;1234:17;1201:51;;;;;;;;;;;;;;;;928:331;;;;;:::o;225:141::-;293:13;317:42;;;;;;;;;;;;;;;;;;;225:141;:::o;1633:273:0:-;1775:22;;;;:12;:22;;;:32;;;;;;;;;;;1754:16;;-1:-1:-1;;;;;1754:16:0;;;1746:61;;;1738:98;;;;-1:-1:-1;;;1738:98:0;;;;;;;;;1846:53;1886:12;1846:39;:53::i;:::-;1633:273;:::o;794:54::-;843:5;794:54;:::o;982:60::-;1036:6;982:60;:::o;1265:181:21:-;1325:8;;-1:-1:-1;;;;;1325:8:21;1309:69;;;;-1:-1:-1;;;1309:69:21;;;;;;;;;1388:8;;:51;;-1:-1:-1;;;1388:51:21;;-1:-1:-1;;;;;1388:8:21;;;;:19;;1414:9;;1388:51;;1433:4;;1388:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1265:181::o;2260:113:0:-;1280:12:35;:10;:12::i;:::-;1270:6;;-1:-1:-1;;;;;1270:6:35;;;:22;;;1262:67;;;;-1:-1:-1;;;1262:67:35;;;;;;;;;2338:16:0::1;:28:::0;;-1:-1:-1;;;;;;2338:28:0::1;-1:-1:-1::0;;;;;2338:28:0;;;::::1;::::0;;;::::1;::::0;;2260:113::o;1048:105::-;1102:51;1048:105;:::o;477:445:21:-;714:12;728:4;765:30;782:12;765:16;:30::i;:::-;850:24;;;;;;;-1:-1:-1;;884:31:21;;;;;;;;;;;;-1:-1:-1;;;884:31:21;;;;909:5;477:445;;;;;;;;;:::o;1983:240:35:-;1280:12;:10;:12::i;:::-;1270:6;;-1:-1:-1;;;;;1270:6:35;;;:22;;;1262:67;;;;-1:-1:-1;;;1262:67:35;;;;;;;;;-1:-1:-1;;;;;2071:22:35;::::1;2063:73;;;;-1:-1:-1::0;;;2063:73:35::1;;;;;;;;;2172:6;::::0;;2151:38:::1;::::0;-1:-1:-1;;;;;2151:38:35;;::::1;::::0;2172:6;::::1;::::0;2151:38:::1;::::0;::::1;2199:6;:17:::0;;-1:-1:-1;;;;;;2199:17:35::1;-1:-1:-1::0;;;;;2199:17:35;;;::::1;::::0;;;::::1;::::0;;1983:240::o;917:59:0:-;970:6;917:59;:::o;1452:180:21:-;1536:8;;:33;;-1:-1:-1;;;1536:33:21;;1519:14;;-1:-1:-1;;;;;1536:8:21;;:18;;:33;;1563:4;;1536:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1519:50;;1579:46;1605:6;1613:11;1579:25;:46::i;:::-;1452:180;;:::o;590:104:34:-;677:10;590:104;:::o;2339:549:29:-;2441:12;2455:16;2475:20;:12;;:20;;;:23;;;;;;;;;;;-1:-1:-1;;;;;2475:34:29;-1:-1:-1;;;2608:22:29;;;;:12;:22;;;:32;;;;;;;;;;;2523:131;;;;;;;;;;;;;-1:-1:-1;;2523:131:29;;;;;;;;;;;;;;-1:-1:-1;;;;;2523:131:29;-1:-1:-1;;;;;;2523:131:29;;;;;;;;;;2475:189;;;;2523:131;2475:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2440:224;;;;2682:7;2674:47;;;;-1:-1:-1;;;2674:47:29;;;;;;;;;2739:3;:10;2753:2;2739:16;2731:73;;;;-1:-1:-1;;;2731:73:29;;;;;;;;;2833:3;2822:23;;;;;;;;;;;;;;2814:67;;;;-1:-1:-1;;;2814:67:29;;;;;;;;;2339:549;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;575:336::-;;;689:3;682:4;674:6;670:17;666:27;656:2;;-1:-1;;697:12;656:2;-1:-1;727:20;;767:18;756:30;;753:2;;;-1:-1;;789:12;753:2;833:4;825:6;821:17;809:29;;884:3;833:4;864:17;825:6;850:32;;847:41;844:2;;;901:1;;891:12;844:2;649:262;;;;;;1506:163;;1622:2;1613:6;1608:3;1604:16;1600:25;1597:2;;;-1:-1;;1628:12;1597:2;-1:-1;1648:15;1590:79;-1:-1;1590:79;1954:241;;2058:2;2046:9;2037:7;2033:23;2029:32;2026:2;;;-1:-1;;2064:12;2026:2;85:6;72:20;97:33;124:5;97:33;;;2116:63;2020:175;-1:-1;;;2020:175;2466:257;;2578:2;2566:9;2557:7;2553:23;2549:32;2546:2;;;-1:-1;;2584:12;2546:2;507:6;501:13;519:30;543:5;519:30;;2730:879;;;;;;2930:3;2918:9;2909:7;2905:23;2901:33;2898:2;;;-1:-1;;2937:12;2898:2;2995:17;2982:31;3033:18;;3025:6;3022:30;3019:2;;;-1:-1;;3055:12;3019:2;3093:64;3149:7;3140:6;3129:9;3125:22;3093:64;;;3083:74;;-1:-1;3083:74;-1:-1;3194:2;3230:22;;359:20;;-1:-1;384:30;359:20;384:30;;;3202:60;;-1:-1;3299:2;3338:22;;1743:20;;-1:-1;3435:2;3420:18;;3407:32;;3448:30;;;3445:2;;;-1:-1;;3481:12;3445:2;;3576:6;3565:9;3561:22;1414:3;1405:6;1400:3;1396:16;1392:26;1389:2;;;-1:-1;;1421:12;1389:2;3501:92;;;;;2892:717;;;;;;;;;4186:391;;4322:2;4310:9;4301:7;4297:23;4293:32;4290:2;;;-1:-1;;4328:12;4290:2;4386:17;4373:31;4424:18;4416:6;4413:30;4410:2;;;-1:-1;;4446:12;4410:2;4476:85;4553:7;4544:6;4533:9;4529:22;4476:85;;;4466:95;4284:293;-1:-1;;;;4284:293;4584:1015;;;;;;;4809:3;4797:9;4788:7;4784:23;4780:33;4777:2;;;-1:-1;;4816:12;4777:2;4874:17;4861:31;4912:18;;4904:6;4901:30;4898:2;;;-1:-1;;4934:12;4898:2;4964:85;5041:7;5032:6;5021:9;5017:22;4964:85;;;4954:95;;5114:2;5103:9;5099:18;5086:32;5072:46;;4912:18;5130:6;5127:30;5124:2;;;-1:-1;;5160:12;5124:2;5198:64;5254:7;5245:6;5234:9;5230:22;5198:64;;;5188:74;;-1:-1;5188:74;-1:-1;5327:2;5312:18;;5299:32;;-1:-1;5340:30;;;5337:2;;;-1:-1;;5373:12;5337:2;;5411:64;5467:7;5458:6;5447:9;5443:22;5411:64;;;4771:828;;;;-1:-1;4771:828;;;;;5512:2;5551:22;;;1743:20;;4771:828;-1:-1;;;;4771:828;5606:263;;5721:2;5709:9;5700:7;5696:23;5692:32;5689:2;;;-1:-1;;5727:12;5689:2;-1:-1;1891:13;;5683:186;-1:-1;5683:186;5876:382;;;6005:2;5993:9;5984:7;5980:23;5976:32;5973:2;;;-1:-1;;6011:12;5973:2;1756:6;1743:20;6063:63;;6163:2;6214:9;6210:22;217:20;242:41;277:5;242:41;;;6171:71;;;;5967:291;;;;;;6789:343;;6931:5;18191:12;18476:6;18471:3;18464:19;7024:52;7069:6;18513:4;18508:3;18504:14;18513:4;7050:5;7046:16;7024:52;;;20633:7;20617:14;-1:-1;;20613:28;7088:39;;;;18513:4;7088:39;;6879:253;-1:-1;;6879:253;11470:271;;7299:5;18191:12;7410:52;7455:6;7450:3;7443:4;7436:5;7432:16;7410:52;;;7474:16;;;;;11604:137;-1:-1;;11604:137;11748:222;-1:-1;;;;;19448:54;;;;6501:45;;11875:2;11860:18;;11846:124;12222:321;19127:13;;19120:21;6743:34;;12529:2;12514:18;;11301:37;12371:2;12356:18;;12342:201;12550:405;;12717:2;12738:17;12731:47;12792:76;12717:2;12706:9;12702:18;12854:6;12792:76;;;12784:84;;6770:5;19127:13;19120:21;12941:2;12930:9;12926:18;6743:34;12688:267;;;;;;13229:310;;13376:2;13397:17;13390:47;13451:78;13376:2;13365:9;13361:18;13515:6;13451:78;;13546:416;13746:2;13760:47;;;8252:2;13731:18;;;18464:19;8288:33;18504:14;;;8268:54;8341:12;;;13717:245;13969:416;14169:2;14183:47;;;8592:2;14154:18;;;18464:19;8628:34;18504:14;;;8608:55;-1:-1;;;8683:12;;;8676:30;8725:12;;;14140:245;14392:416;14592:2;14606:47;;;8976:2;14577:18;;;18464:19;9012:27;18504:14;;;8992:48;9059:12;;;14563:245;14815:416;15015:2;15029:47;;;9310:2;15000:18;;;18464:19;9346:26;18504:14;;;9326:47;9392:12;;;14986:245;15238:416;15438:2;15452:47;;;9643:2;15423:18;;;18464:19;9679:34;18504:14;;;9659:55;-1:-1;;;9734:12;;;9727:36;9782:12;;;15409:245;15661:416;15861:2;15875:47;;;10033:2;15846:18;;;18464:19;10069:29;18504:14;;;10049:50;10118:12;;;15832:245;16084:416;16284:2;16298:47;;;16269:18;;;18464:19;10405:34;18504:14;;;10385:55;10459:12;;;16255:245;16507:330;10775:23;;11301:37;;10964:4;10953:16;;;10947:23;11024:14;;;11301:37;11137:4;11126:16;;;11120:23;11197:14;;;11301:37;;;;16688:2;16673:18;;16659:178;16844:222;11301:37;;;16971:2;16956:18;;16942:124;17073:365;11301:37;;;-1:-1;;;;;19448:54;17424:2;17409:18;;6501:45;17244:2;17229:18;;17215:223;17445:324;;17595:11;17582:25;17646:48;;17670:8;17654:14;17650:29;17646:48;17626:18;17622:73;17612:2;;-1:-1;;17699:12;17776:321;;17921:11;17908:25;17972:50;;17996:8;17980:14;17976:29;17972:50;17952:18;17948:75;17938:2;;-1:-1;;18027:12;20273:268;20338:1;20345:101;20359:6;20356:1;20353:13;20345:101;;;20426:11;;;20420:18;20407:11;;;20400:39;20381:2;20374:10;20345:101;;;20461:6;20458:1;20455:13;20452:2;;;20338:1;20517:6;20512:3;20508:16;20501:27;20452:2;;20322:219;;;;20654:117;-1:-1;;;;;19448:54;;20713:35;;20703:2;;20762:1;;20752:12;20918:111;20999:5;19127:13;19120:21;20977:5;20974:32;20964:2;;21020:1;;21010:12",
    "source": "// SPDX-License-Identifier:MIT\npragma solidity ^0.6.2;\npragma experimental ABIEncoderV2;\n\nimport \"../forwarder/IForwarder.sol\";\nimport \"../BasePaymaster.sol\";\n\ncontract TestPaymasterEverythingAccepted is BasePaymaster {\n\n    function versionPaymaster() external view override virtual returns (string memory){\n        return \"2.0.0+opengsn.test-pea.ipaymaster\";\n    }\n\n    event SampleRecipientPreCall();\n    event SampleRecipientPostCall(bool success, uint actualCharge);\n\n    function preRelayedCall(\n        GsnTypes.RelayRequest calldata relayRequest,\n        bytes calldata signature,\n        bytes calldata approvalData,\n        uint256 maxPossibleGas\n    )\n    external\n    override\n    virtual\n    returns (bytes memory, bool) {\n        (signature);\n        _verifyForwarder(relayRequest);\n        (approvalData, maxPossibleGas);\n        emit SampleRecipientPreCall();\n        return (\"no revert here\",false);\n    }\n\n    function postRelayedCall(\n        bytes calldata context,\n        bool success,\n        uint256 gasUseWithoutPost,\n        GsnTypes.RelayData calldata relayData\n    )\n    external\n    override\n    virtual\n    {\n        (context, gasUseWithoutPost, relayData);\n        emit SampleRecipientPostCall(success, gasUseWithoutPost);\n    }\n\n    function deposit() public payable {\n        require(address(relayHub) != address(0), \"relay hub address not set\");\n        relayHub.depositFor{value:msg.value}(address(this));\n    }\n\n    function withdrawAll(address payable destination) public {\n        uint256 amount = relayHub.balanceOf(address(this));\n        withdrawRelayHubDepositTo(amount, destination);\n    }\n}\n",
    "sourcePath": "/Users/dror/IdeaProjects/gsn/contracts/test/TestPaymasterEverythingAccepted.sol",
    "ast": {
        "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/test/TestPaymasterEverythingAccepted.sol",
        "exportedSymbols": {
            "TestPaymasterEverythingAccepted": [
                4369
            ]
        },
        "id": 4370,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 4238,
                "literals": [
                    "solidity",
                    "^",
                    "0.6",
                    ".2"
                ],
                "nodeType": "PragmaDirective",
                "src": "31:23:21"
            },
            {
                "id": 4239,
                "literals": [
                    "experimental",
                    "ABIEncoderV2"
                ],
                "nodeType": "PragmaDirective",
                "src": "55:33:21"
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/forwarder/IForwarder.sol",
                "file": "../forwarder/IForwarder.sol",
                "id": 4240,
                "nodeType": "ImportDirective",
                "scope": 4370,
                "sourceUnit": 3007,
                "src": "90:37:21",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/BasePaymaster.sol",
                "file": "../BasePaymaster.sol",
                "id": 4241,
                "nodeType": "ImportDirective",
                "scope": 4370,
                "sourceUnit": 184,
                "src": "128:30:21",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "arguments": null,
                        "baseName": {
                            "contractScope": null,
                            "id": 4242,
                            "name": "BasePaymaster",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 183,
                            "src": "204:13:21",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_BasePaymaster_$183",
                                "typeString": "contract BasePaymaster"
                            }
                        },
                        "id": 4243,
                        "nodeType": "InheritanceSpecifier",
                        "src": "204:13:21"
                    }
                ],
                "contractDependencies": [
                    183,
                    3310,
                    6358,
                    6467
                ],
                "contractKind": "contract",
                "documentation": null,
                "fullyImplemented": true,
                "id": 4369,
                "linearizedBaseContracts": [
                    4369,
                    183,
                    6467,
                    6358,
                    3310
                ],
                "name": "TestPaymasterEverythingAccepted",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "baseFunctions": [
                            3309
                        ],
                        "body": {
                            "id": 4251,
                            "nodeType": "Block",
                            "src": "307:59:21",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "hexValue": "322e302e302b6f70656e67736e2e746573742d7065612e697061796d6173746572",
                                        "id": 4249,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "324:35:21",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_b9fae5ebe04f855d3acdf8e5d55a53eae6582a5cabfac85474dce071314390e3",
                                            "typeString": "literal_string \"2.0.0+opengsn.test-pea.ipaymaster\""
                                        },
                                        "value": "2.0.0+opengsn.test-pea.ipaymaster"
                                    },
                                    "functionReturnParameters": 4248,
                                    "id": 4250,
                                    "nodeType": "Return",
                                    "src": "317:42:21"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "921276ea",
                        "id": 4252,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionPaymaster",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4245,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "267:8:21"
                        },
                        "parameters": {
                            "id": 4244,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "250:2:21"
                        },
                        "returnParameters": {
                            "id": 4248,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4247,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4252,
                                    "src": "293:13:21",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4246,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "293:6:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "292:15:21"
                        },
                        "scope": 4369,
                        "src": "225:141:21",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "anonymous": false,
                        "documentation": null,
                        "id": 4254,
                        "name": "SampleRecipientPreCall",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 4253,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "400:2:21"
                        },
                        "src": "372:31:21"
                    },
                    {
                        "anonymous": false,
                        "documentation": null,
                        "id": 4260,
                        "name": "SampleRecipientPostCall",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 4259,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4256,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4260,
                                    "src": "438:12:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4255,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "438:4:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4258,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "actualCharge",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4260,
                                    "src": "452:17:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4257,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "452:4:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "437:33:21"
                        },
                        "src": "408:63:21"
                    },
                    {
                        "baseFunctions": [
                            3292
                        ],
                        "body": {
                            "id": 4294,
                            "nodeType": "Block",
                            "src": "734:188:21",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4276,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4264,
                                                "src": "745:9:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "id": 4277,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "744:11:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                        }
                                    },
                                    "id": 4278,
                                    "nodeType": "ExpressionStatement",
                                    "src": "744:11:21"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4280,
                                                "name": "relayRequest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4262,
                                                "src": "782:12:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                }
                                            ],
                                            "id": 4279,
                                            "name": "_verifyForwarder",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 82,
                                            "src": "765:16:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_RelayRequest_$3232_calldata_ptr_$returns$__$",
                                                "typeString": "function (struct GsnTypes.RelayRequest calldata) view"
                                            }
                                        },
                                        "id": 4281,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "765:30:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4282,
                                    "nodeType": "ExpressionStatement",
                                    "src": "765:30:21"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4283,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4266,
                                                "src": "806:12:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 4284,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4268,
                                                "src": "820:14:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "id": 4285,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "805:30:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_uint256_$",
                                            "typeString": "tuple(bytes calldata,uint256)"
                                        }
                                    },
                                    "id": 4286,
                                    "nodeType": "ExpressionStatement",
                                    "src": "805:30:21"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [],
                                        "expression": {
                                            "argumentTypes": [],
                                            "id": 4287,
                                            "name": "SampleRecipientPreCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4254,
                                            "src": "850:22:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                                                "typeString": "function ()"
                                            }
                                        },
                                        "id": 4288,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "850:24:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4289,
                                    "nodeType": "EmitStatement",
                                    "src": "845:29:21"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f207265766572742068657265",
                                                "id": 4290,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "892:16:21",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b583083ec81e74b3b399bcea9365f718253daccf2fe052067ed528db168efe2e",
                                                    "typeString": "literal_string \"no revert here\""
                                                },
                                                "value": "no revert here"
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "66616c7365",
                                                "id": 4291,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "bool",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "909:5:21",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "value": "false"
                                            }
                                        ],
                                        "id": 4292,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "891:24:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_stringliteral_b583083ec81e74b3b399bcea9365f718253daccf2fe052067ed528db168efe2e_$_t_bool_$",
                                            "typeString": "tuple(literal_string \"no revert here\",bool)"
                                        }
                                    },
                                    "functionReturnParameters": 4275,
                                    "id": 4293,
                                    "nodeType": "Return",
                                    "src": "884:31:21"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "e5c12446",
                        "id": 4295,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "preRelayedCall",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4270,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "680:8:21"
                        },
                        "parameters": {
                            "id": 4269,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4262,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "510:43:21",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 4261,
                                        "name": "GsnTypes.RelayRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3232,
                                        "src": "510:21:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4264,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "563:24:21",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4263,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "563:5:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4266,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "597:27:21",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4265,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "597:5:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4268,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "634:22:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4267,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "634:7:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "500:162:21"
                        },
                        "returnParameters": {
                            "id": 4275,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4272,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "714:12:21",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4271,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "714:5:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4274,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "728:4:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4273,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "728:4:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "713:20:21"
                        },
                        "scope": 4369,
                        "src": "477:445:21",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3304
                        ],
                        "body": {
                            "id": 4317,
                            "nodeType": "Block",
                            "src": "1137:122:21",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4307,
                                                "name": "context",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4297,
                                                "src": "1148:7:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 4308,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4301,
                                                "src": "1157:17:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 4309,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4303,
                                                "src": "1176:9:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "id": 4310,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1147:39:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_uint256_$_t_struct$_RelayData_$3227_calldata_ptr_$",
                                            "typeString": "tuple(bytes calldata,uint256,struct GsnTypes.RelayData calldata)"
                                        }
                                    },
                                    "id": 4311,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1147:39:21"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4313,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4299,
                                                "src": "1225:7:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 4314,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4301,
                                                "src": "1234:17:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4312,
                                            "name": "SampleRecipientPostCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4260,
                                            "src": "1201:23:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bool_$_t_uint256_$returns$__$",
                                                "typeString": "function (bool,uint256)"
                                            }
                                        },
                                        "id": 4315,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1201:51:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4316,
                                    "nodeType": "EmitStatement",
                                    "src": "1196:56:21"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "8e9483b0",
                        "id": 4318,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "postRelayedCall",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4305,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1112:8:21"
                        },
                        "parameters": {
                            "id": 4304,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4297,
                                    "mutability": "mutable",
                                    "name": "context",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4318,
                                    "src": "962:22:21",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4296,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "962:5:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4299,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4318,
                                    "src": "994:12:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4298,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "994:4:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4301,
                                    "mutability": "mutable",
                                    "name": "gasUseWithoutPost",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4318,
                                    "src": "1016:25:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4300,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1016:7:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4303,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4318,
                                    "src": "1051:37:21",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 4302,
                                        "name": "GsnTypes.RelayData",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3227,
                                        "src": "1051:18:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$3227_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "952:142:21"
                        },
                        "returnParameters": {
                            "id": 4306,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1137:0:21"
                        },
                        "scope": 4369,
                        "src": "928:331:21",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 4346,
                            "nodeType": "Block",
                            "src": "1299:147:21",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 4330,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 4324,
                                                            "name": "relayHub",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 15,
                                                            "src": "1325:8:21",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        ],
                                                        "id": 4323,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1317:7:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 4322,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1317:7:21",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 4325,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1317:17:21",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 4328,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "1346:1:21",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 4327,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1338:7:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 4326,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1338:7:21",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 4329,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1338:10:21",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "1317:31:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c6179206875622061646472657373206e6f7420736574",
                                                "id": 4331,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1350:27:21",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                },
                                                "value": "relay hub address not set"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                }
                                            ],
                                            "id": 4321,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "1309:7:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4332,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1309:69:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4333,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1309:69:21"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 4342,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -28,
                                                        "src": "1433:4:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$4369",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$4369",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    ],
                                                    "id": 4341,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1425:7:21",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 4340,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1425:7:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 4343,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1425:13:21",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 4334,
                                                    "name": "relayHub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 15,
                                                    "src": "1388:8:21",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                        "typeString": "contract IRelayHub"
                                                    }
                                                },
                                                "id": 4336,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "depositFor",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3468,
                                                "src": "1388:19:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$",
                                                    "typeString": "function (address) payable external"
                                                }
                                            },
                                            "id": 4339,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "names": [
                                                "value"
                                            ],
                                            "nodeType": "FunctionCallOptions",
                                            "options": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 4337,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "1414:3:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 4338,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "value",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "1414:9:21",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "src": "1388:36:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$value",
                                                "typeString": "function (address) payable external"
                                            }
                                        },
                                        "id": 4344,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1388:51:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4345,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1388:51:21"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "d0e30db0",
                        "id": 4347,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "deposit",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 4319,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1281:2:21"
                        },
                        "returnParameters": {
                            "id": 4320,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1299:0:21"
                        },
                        "scope": 4369,
                        "src": "1265:181:21",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 4367,
                            "nodeType": "Block",
                            "src": "1509:123:21",
                            "statements": [
                                {
                                    "assignments": [
                                        4353
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4353,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 4367,
                                            "src": "1519:14:21",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4352,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1519:7:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4361,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 4358,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -28,
                                                        "src": "1563:4:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$4369",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$4369",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    ],
                                                    "id": 4357,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1555:7:21",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 4356,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1555:7:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 4359,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1555:13:21",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 4354,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 15,
                                                "src": "1536:8:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            },
                                            "id": 4355,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balanceOf",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3529,
                                            "src": "1536:18:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view external returns (uint256)"
                                            }
                                        },
                                        "id": 4360,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1536:33:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1519:50:21"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4363,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4353,
                                                "src": "1605:6:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 4364,
                                                "name": "destination",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4349,
                                                "src": "1613:11:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "id": 4362,
                                            "name": "withdrawRelayHubDepositTo",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 182,
                                            "src": "1579:25:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_payable_$returns$__$",
                                                "typeString": "function (uint256,address payable)"
                                            }
                                        },
                                        "id": 4365,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1579:46:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4366,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1579:46:21"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "fa09e630",
                        "id": 4368,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawAll",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 4350,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4349,
                                    "mutability": "mutable",
                                    "name": "destination",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4368,
                                    "src": "1473:27:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 4348,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1473:15:21",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1472:29:21"
                        },
                        "returnParameters": {
                            "id": 4351,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1509:0:21"
                        },
                        "scope": 4369,
                        "src": "1452:180:21",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 4370,
                "src": "160:1474:21"
            }
        ],
        "src": "31:1604:21"
    },
    "legacyAST": {
        "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/test/TestPaymasterEverythingAccepted.sol",
        "exportedSymbols": {
            "TestPaymasterEverythingAccepted": [
                4369
            ]
        },
        "id": 4370,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 4238,
                "literals": [
                    "solidity",
                    "^",
                    "0.6",
                    ".2"
                ],
                "nodeType": "PragmaDirective",
                "src": "31:23:21"
            },
            {
                "id": 4239,
                "literals": [
                    "experimental",
                    "ABIEncoderV2"
                ],
                "nodeType": "PragmaDirective",
                "src": "55:33:21"
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/forwarder/IForwarder.sol",
                "file": "../forwarder/IForwarder.sol",
                "id": 4240,
                "nodeType": "ImportDirective",
                "scope": 4370,
                "sourceUnit": 3007,
                "src": "90:37:21",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "/Users/dror/IdeaProjects/gsn/contracts/BasePaymaster.sol",
                "file": "../BasePaymaster.sol",
                "id": 4241,
                "nodeType": "ImportDirective",
                "scope": 4370,
                "sourceUnit": 184,
                "src": "128:30:21",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "arguments": null,
                        "baseName": {
                            "contractScope": null,
                            "id": 4242,
                            "name": "BasePaymaster",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 183,
                            "src": "204:13:21",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_BasePaymaster_$183",
                                "typeString": "contract BasePaymaster"
                            }
                        },
                        "id": 4243,
                        "nodeType": "InheritanceSpecifier",
                        "src": "204:13:21"
                    }
                ],
                "contractDependencies": [
                    183,
                    3310,
                    6358,
                    6467
                ],
                "contractKind": "contract",
                "documentation": null,
                "fullyImplemented": true,
                "id": 4369,
                "linearizedBaseContracts": [
                    4369,
                    183,
                    6467,
                    6358,
                    3310
                ],
                "name": "TestPaymasterEverythingAccepted",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "baseFunctions": [
                            3309
                        ],
                        "body": {
                            "id": 4251,
                            "nodeType": "Block",
                            "src": "307:59:21",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "hexValue": "322e302e302b6f70656e67736e2e746573742d7065612e697061796d6173746572",
                                        "id": 4249,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "324:35:21",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_b9fae5ebe04f855d3acdf8e5d55a53eae6582a5cabfac85474dce071314390e3",
                                            "typeString": "literal_string \"2.0.0+opengsn.test-pea.ipaymaster\""
                                        },
                                        "value": "2.0.0+opengsn.test-pea.ipaymaster"
                                    },
                                    "functionReturnParameters": 4248,
                                    "id": 4250,
                                    "nodeType": "Return",
                                    "src": "317:42:21"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "921276ea",
                        "id": 4252,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionPaymaster",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4245,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "267:8:21"
                        },
                        "parameters": {
                            "id": 4244,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "250:2:21"
                        },
                        "returnParameters": {
                            "id": 4248,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4247,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4252,
                                    "src": "293:13:21",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 4246,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "293:6:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "292:15:21"
                        },
                        "scope": 4369,
                        "src": "225:141:21",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "anonymous": false,
                        "documentation": null,
                        "id": 4254,
                        "name": "SampleRecipientPreCall",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 4253,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "400:2:21"
                        },
                        "src": "372:31:21"
                    },
                    {
                        "anonymous": false,
                        "documentation": null,
                        "id": 4260,
                        "name": "SampleRecipientPostCall",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 4259,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4256,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4260,
                                    "src": "438:12:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4255,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "438:4:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4258,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "actualCharge",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4260,
                                    "src": "452:17:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4257,
                                        "name": "uint",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "452:4:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "437:33:21"
                        },
                        "src": "408:63:21"
                    },
                    {
                        "baseFunctions": [
                            3292
                        ],
                        "body": {
                            "id": 4294,
                            "nodeType": "Block",
                            "src": "734:188:21",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4276,
                                                "name": "signature",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4264,
                                                "src": "745:9:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            }
                                        ],
                                        "id": 4277,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "744:11:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_calldata_ptr",
                                            "typeString": "bytes calldata"
                                        }
                                    },
                                    "id": 4278,
                                    "nodeType": "ExpressionStatement",
                                    "src": "744:11:21"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4280,
                                                "name": "relayRequest",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4262,
                                                "src": "782:12:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayRequest calldata"
                                                }
                                            ],
                                            "id": 4279,
                                            "name": "_verifyForwarder",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 82,
                                            "src": "765:16:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$_t_struct$_RelayRequest_$3232_calldata_ptr_$returns$__$",
                                                "typeString": "function (struct GsnTypes.RelayRequest calldata) view"
                                            }
                                        },
                                        "id": 4281,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "765:30:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4282,
                                    "nodeType": "ExpressionStatement",
                                    "src": "765:30:21"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4283,
                                                "name": "approvalData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4266,
                                                "src": "806:12:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 4284,
                                                "name": "maxPossibleGas",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4268,
                                                "src": "820:14:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "id": 4285,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "805:30:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_uint256_$",
                                            "typeString": "tuple(bytes calldata,uint256)"
                                        }
                                    },
                                    "id": 4286,
                                    "nodeType": "ExpressionStatement",
                                    "src": "805:30:21"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [],
                                        "expression": {
                                            "argumentTypes": [],
                                            "id": 4287,
                                            "name": "SampleRecipientPreCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4254,
                                            "src": "850:22:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                                                "typeString": "function ()"
                                            }
                                        },
                                        "id": 4288,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "850:24:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4289,
                                    "nodeType": "EmitStatement",
                                    "src": "845:29:21"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "6e6f207265766572742068657265",
                                                "id": 4290,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "892:16:21",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b583083ec81e74b3b399bcea9365f718253daccf2fe052067ed528db168efe2e",
                                                    "typeString": "literal_string \"no revert here\""
                                                },
                                                "value": "no revert here"
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "66616c7365",
                                                "id": 4291,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "bool",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "909:5:21",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                "value": "false"
                                            }
                                        ],
                                        "id": 4292,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "891:24:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_stringliteral_b583083ec81e74b3b399bcea9365f718253daccf2fe052067ed528db168efe2e_$_t_bool_$",
                                            "typeString": "tuple(literal_string \"no revert here\",bool)"
                                        }
                                    },
                                    "functionReturnParameters": 4275,
                                    "id": 4293,
                                    "nodeType": "Return",
                                    "src": "884:31:21"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "e5c12446",
                        "id": 4295,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "preRelayedCall",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4270,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "680:8:21"
                        },
                        "parameters": {
                            "id": 4269,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4262,
                                    "mutability": "mutable",
                                    "name": "relayRequest",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "510:43:21",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayRequest_$3232_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayRequest"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 4261,
                                        "name": "GsnTypes.RelayRequest",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3232,
                                        "src": "510:21:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayRequest_$3232_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayRequest"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4264,
                                    "mutability": "mutable",
                                    "name": "signature",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "563:24:21",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4263,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "563:5:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4266,
                                    "mutability": "mutable",
                                    "name": "approvalData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "597:27:21",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4265,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "597:5:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4268,
                                    "mutability": "mutable",
                                    "name": "maxPossibleGas",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "634:22:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4267,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "634:7:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "500:162:21"
                        },
                        "returnParameters": {
                            "id": 4275,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4272,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "714:12:21",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4271,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "714:5:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4274,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4295,
                                    "src": "728:4:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4273,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "728:4:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "713:20:21"
                        },
                        "scope": 4369,
                        "src": "477:445:21",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "baseFunctions": [
                            3304
                        ],
                        "body": {
                            "id": 4317,
                            "nodeType": "Block",
                            "src": "1137:122:21",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "components": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4307,
                                                "name": "context",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4297,
                                                "src": "1148:7:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes calldata"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 4308,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4301,
                                                "src": "1157:17:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 4309,
                                                "name": "relayData",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4303,
                                                "src": "1176:9:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                                    "typeString": "struct GsnTypes.RelayData calldata"
                                                }
                                            }
                                        ],
                                        "id": 4310,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "1147:39:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$_t_bytes_calldata_ptr_$_t_uint256_$_t_struct$_RelayData_$3227_calldata_ptr_$",
                                            "typeString": "tuple(bytes calldata,uint256,struct GsnTypes.RelayData calldata)"
                                        }
                                    },
                                    "id": 4311,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1147:39:21"
                                },
                                {
                                    "eventCall": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4313,
                                                "name": "success",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4299,
                                                "src": "1225:7:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 4314,
                                                "name": "gasUseWithoutPost",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4301,
                                                "src": "1234:17:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 4312,
                                            "name": "SampleRecipientPostCall",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4260,
                                            "src": "1201:23:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_bool_$_t_uint256_$returns$__$",
                                                "typeString": "function (bool,uint256)"
                                            }
                                        },
                                        "id": 4315,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1201:51:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4316,
                                    "nodeType": "EmitStatement",
                                    "src": "1196:56:21"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "8e9483b0",
                        "id": 4318,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "postRelayedCall",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 4305,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "1112:8:21"
                        },
                        "parameters": {
                            "id": 4304,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4297,
                                    "mutability": "mutable",
                                    "name": "context",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4318,
                                    "src": "962:22:21",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_calldata_ptr",
                                        "typeString": "bytes"
                                    },
                                    "typeName": {
                                        "id": 4296,
                                        "name": "bytes",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "962:5:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4299,
                                    "mutability": "mutable",
                                    "name": "success",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4318,
                                    "src": "994:12:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 4298,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "994:4:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4301,
                                    "mutability": "mutable",
                                    "name": "gasUseWithoutPost",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4318,
                                    "src": "1016:25:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 4300,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1016:7:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 4303,
                                    "mutability": "mutable",
                                    "name": "relayData",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4318,
                                    "src": "1051:37:21",
                                    "stateVariable": false,
                                    "storageLocation": "calldata",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RelayData_$3227_calldata_ptr",
                                        "typeString": "struct GsnTypes.RelayData"
                                    },
                                    "typeName": {
                                        "contractScope": null,
                                        "id": 4302,
                                        "name": "GsnTypes.RelayData",
                                        "nodeType": "UserDefinedTypeName",
                                        "referencedDeclaration": 3227,
                                        "src": "1051:18:21",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_RelayData_$3227_storage_ptr",
                                            "typeString": "struct GsnTypes.RelayData"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "952:142:21"
                        },
                        "returnParameters": {
                            "id": 4306,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1137:0:21"
                        },
                        "scope": 4369,
                        "src": "928:331:21",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "external"
                    },
                    {
                        "body": {
                            "id": 4346,
                            "nodeType": "Block",
                            "src": "1299:147:21",
                            "statements": [
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 4330,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "id": 4324,
                                                            "name": "relayHub",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 15,
                                                            "src": "1325:8:21",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                                "typeString": "contract IRelayHub"
                                                            }
                                                        ],
                                                        "id": 4323,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1317:7:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 4322,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1317:7:21",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 4325,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1317:17:21",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "argumentTypes": null,
                                                    "arguments": [
                                                        {
                                                            "argumentTypes": null,
                                                            "hexValue": "30",
                                                            "id": 4328,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "1346:1:21",
                                                            "subdenomination": null,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 4327,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "1338:7:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 4326,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "1338:7:21",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": null,
                                                                "typeString": null
                                                            }
                                                        }
                                                    },
                                                    "id": 4329,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1338:10:21",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "1317:31:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "hexValue": "72656c6179206875622061646472657373206e6f7420736574",
                                                "id": 4331,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "1350:27:21",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                },
                                                "value": "relay hub address not set"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_2e4bcc216326d2d371e2433ec8e1af9c54827701515af7cd10f9acc79120d313",
                                                    "typeString": "literal_string \"relay hub address not set\""
                                                }
                                            ],
                                            "id": 4321,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "1309:7:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 4332,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1309:69:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4333,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1309:69:21"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 4342,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -28,
                                                        "src": "1433:4:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$4369",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$4369",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    ],
                                                    "id": 4341,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1425:7:21",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 4340,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1425:7:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 4343,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1425:13:21",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                    "argumentTypes": null,
                                                    "id": 4334,
                                                    "name": "relayHub",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 15,
                                                    "src": "1388:8:21",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                        "typeString": "contract IRelayHub"
                                                    }
                                                },
                                                "id": 4336,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "depositFor",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 3468,
                                                "src": "1388:19:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$",
                                                    "typeString": "function (address) payable external"
                                                }
                                            },
                                            "id": 4339,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "names": [
                                                "value"
                                            ],
                                            "nodeType": "FunctionCallOptions",
                                            "options": [
                                                {
                                                    "argumentTypes": null,
                                                    "expression": {
                                                        "argumentTypes": null,
                                                        "id": 4337,
                                                        "name": "msg",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -15,
                                                        "src": "1414:3:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_magic_message",
                                                            "typeString": "msg"
                                                        }
                                                    },
                                                    "id": 4338,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "value",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": null,
                                                    "src": "1414:9:21",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "src": "1388:36:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_payable$_t_address_$returns$__$value",
                                                "typeString": "function (address) payable external"
                                            }
                                        },
                                        "id": 4344,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1388:51:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4345,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1388:51:21"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "d0e30db0",
                        "id": 4347,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "deposit",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 4319,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1281:2:21"
                        },
                        "returnParameters": {
                            "id": 4320,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1299:0:21"
                        },
                        "scope": 4369,
                        "src": "1265:181:21",
                        "stateMutability": "payable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 4367,
                            "nodeType": "Block",
                            "src": "1509:123:21",
                            "statements": [
                                {
                                    "assignments": [
                                        4353
                                    ],
                                    "declarations": [
                                        {
                                            "constant": false,
                                            "id": 4353,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "nodeType": "VariableDeclaration",
                                            "overrides": null,
                                            "scope": 4367,
                                            "src": "1519:14:21",
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            },
                                            "typeName": {
                                                "id": 4352,
                                                "name": "uint256",
                                                "nodeType": "ElementaryTypeName",
                                                "src": "1519:7:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            "value": null,
                                            "visibility": "internal"
                                        }
                                    ],
                                    "id": 4361,
                                    "initialValue": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "arguments": [
                                                    {
                                                        "argumentTypes": null,
                                                        "id": 4358,
                                                        "name": "this",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": -28,
                                                        "src": "1563:4:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$4369",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_contract$_TestPaymasterEverythingAccepted_$4369",
                                                            "typeString": "contract TestPaymasterEverythingAccepted"
                                                        }
                                                    ],
                                                    "id": 4357,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "1555:7:21",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 4356,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "1555:7:21",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": null,
                                                            "typeString": null
                                                        }
                                                    }
                                                },
                                                "id": 4359,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1555:13:21",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": null,
                                                "id": 4354,
                                                "name": "relayHub",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 15,
                                                "src": "1536:8:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_IRelayHub_$3592",
                                                    "typeString": "contract IRelayHub"
                                                }
                                            },
                                            "id": 4355,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "balanceOf",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 3529,
                                            "src": "1536:18:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                                "typeString": "function (address) view external returns (uint256)"
                                            }
                                        },
                                        "id": 4360,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1536:33:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "1519:50:21"
                                },
                                {
                                    "expression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                            {
                                                "argumentTypes": null,
                                                "id": 4363,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4353,
                                                "src": "1605:6:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            },
                                            {
                                                "argumentTypes": null,
                                                "id": 4364,
                                                "name": "destination",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 4349,
                                                "src": "1613:11:21",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            ],
                                            "id": 4362,
                                            "name": "withdrawRelayHubDepositTo",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 182,
                                            "src": "1579:25:21",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_payable_$returns$__$",
                                                "typeString": "function (uint256,address payable)"
                                            }
                                        },
                                        "id": 4365,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1579:46:21",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 4366,
                                    "nodeType": "ExpressionStatement",
                                    "src": "1579:46:21"
                                }
                            ]
                        },
                        "documentation": null,
                        "functionSelector": "fa09e630",
                        "id": 4368,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawAll",
                        "nodeType": "FunctionDefinition",
                        "overrides": null,
                        "parameters": {
                            "id": 4350,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 4349,
                                    "mutability": "mutable",
                                    "name": "destination",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 4368,
                                    "src": "1473:27:21",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                    },
                                    "typeName": {
                                        "id": 4348,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1473:15:21",
                                        "stateMutability": "payable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address_payable",
                                            "typeString": "address payable"
                                        }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1472:29:21"
                        },
                        "returnParameters": {
                            "id": 4351,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "1509:0:21"
                        },
                        "scope": 4369,
                        "src": "1452:180:21",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    }
                ],
                "scope": 4370,
                "src": "160:1474:21"
            }
        ],
        "src": "31:1604:21"
    },
    "compiler": {
        "name": "solc",
        "version": "0.6.10+commit.00c0fcaf.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2020-12-21T17:30:10.492Z",
    "devdoc": {
        "methods": {
            "owner()": {
                "details": "Returns the address of the current owner."
            },
            "renounceOwnership()": {
                "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
            },
            "transferOwnership(address)": {
                "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
            }
        }
    },
    "userdoc": {
        "methods": {
            "getRelayHubDeposit()": {
                "notice": "check current deposit on relay hub."
            },
            "withdrawRelayHubDepositTo(uint256,address)": {
                "notice": "withdraw deposit from relayHub"
            }
        }
    }
}
