{
    "contractName": "IStakeManager",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "AbandonedRelayManagerStakeEscheated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "burnAddress",
                    "type": "address"
                }
            ],
            "name": "BurnAddressSet",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "devAddress",
                    "type": "address"
                }
            ],
            "name": "DevAddressSet",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "HubAuthorized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "removalTime",
                    "type": "uint256"
                }
            ],
            "name": "HubUnauthorized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "OwnerSet",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "abandonedTime",
                    "type": "uint256"
                }
            ],
            "name": "RelayServerAbandoned",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "keepaliveTime",
                    "type": "uint256"
                }
            ],
            "name": "RelayServerKeepalive",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "stake",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "unstakeDelay",
                    "type": "uint256"
                }
            ],
            "name": "StakeAdded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "beneficiary",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "reward",
                    "type": "uint256"
                }
            ],
            "name": "StakePenalized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "withdrawTime",
                    "type": "uint256"
                }
            ],
            "name": "StakeUnlocked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "StakeWithdrawn",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "setRelayManagerOwner",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IERC20",
                    "name": "token",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "unstakeDelay",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "stakeForRelayManager",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "unlockStake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "withdrawStake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "authorizeHubByOwner",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "authorizeHubByManager",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "unauthorizeHubByOwner",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayHub",
                    "type": "address"
                }
            ],
            "name": "unauthorizeHubByManager",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "beneficiary",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "penalizeRelayManager",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "markRelayAbandoned",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "escheatAbandonedRelayStake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "updateRelayKeepaliveTime",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "isRelayEscheatable",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "relayManager",
                    "type": "address"
                }
            ],
            "name": "getStakeInfo",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "stake",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "unstakeDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "withdrawTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "abandonedTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "keepaliveTime",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "token",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "owner",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IStakeManager.StakeInfo",
                    "name": "stakeInfo",
                    "type": "tuple"
                },
                {
                    "internalType": "bool",
                    "name": "isSenderAuthorizedHub",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getMaxUnstakeDelay",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_burnAddress",
                    "type": "address"
                }
            ],
            "name": "setBurnAddress",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getBurnAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_burnAddress",
                    "type": "address"
                }
            ],
            "name": "setDevAddress",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getAbandonedRelayServerConfig",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "devAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "abandonmentDelay",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "escheatmentDelay",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IStakeManager.AbandonedRelayServerConfig",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getCreationBlock",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "versionSM",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AbandonedRelayManagerStakeEscheated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"burnAddress\",\"type\":\"address\"}],\"name\":\"BurnAddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"}],\"name\":\"DevAddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"HubAuthorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"removalTime\",\"type\":\"uint256\"}],\"name\":\"HubUnauthorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"abandonedTime\",\"type\":\"uint256\"}],\"name\":\"RelayServerAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"keepaliveTime\",\"type\":\"uint256\"}],\"name\":\"RelayServerKeepalive\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unstakeDelay\",\"type\":\"uint256\"}],\"name\":\"StakeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reward\",\"type\":\"uint256\"}],\"name\":\"StakePenalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawTime\",\"type\":\"uint256\"}],\"name\":\"StakeUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeWithdrawn\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"authorizeHubByManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"authorizeHubByOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"escheatAbandonedRelayStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAbandonedRelayServerConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"devAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"abandonmentDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"escheatmentDelay\",\"type\":\"uint256\"}],\"internalType\":\"struct IStakeManager.AbandonedRelayServerConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBurnAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxUnstakeDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"getStakeInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"unstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"abandonedTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"keepaliveTime\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"internalType\":\"struct IStakeManager.StakeInfo\",\"name\":\"stakeInfo\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"isSenderAuthorizedHub\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"isRelayEscheatable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"markRelayAbandoned\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"penalizeRelayManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_burnAddress\",\"type\":\"address\"}],\"name\":\"setBurnAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_burnAddress\",\"type\":\"address\"}],\"name\":\"setDevAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setRelayManagerOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"unstakeDelay\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"stakeForRelayManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"unauthorizeHubByManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayHub\",\"type\":\"address\"}],\"name\":\"unauthorizeHubByOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"unlockStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"updateRelayKeepaliveTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"versionSM\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"relayManager\",\"type\":\"address\"}],\"name\":\"withdrawStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"authorizeHubByOwner(address,address)\":{\"params\":{\"relayHub\":\"The address of a `RelayHub` to be authorized.\",\"relayManager\":\"The address of a Relay Manager whose stake is to be authorized for the new `RelayHub`.\"}},\"getAbandonedRelayServerConfig()\":{\"returns\":{\"_0\":\"The structure that contains all configuration values for the 'abandoned' stake.\"}},\"getBurnAddress()\":{\"returns\":{\"_0\":\"The address that will receive the 'burned' part of the penalized stake.\"}},\"getCreationBlock()\":{\"returns\":{\"_0\":\"the block number in which the contract has been deployed.\"}},\"getMaxUnstakeDelay()\":{\"returns\":{\"_0\":\"The maximum unstake delay this `StakeManger` allows. This is to prevent locking money forever by mistake.\"}},\"getStakeInfo(address)\":{\"params\":{\"relayManager\":\"The address of a Relay Manager.\"},\"returns\":{\"isSenderAuthorizedHub\":\"`true` if the `msg.sender` for this call was a `RelayHub` that is authorized now. `false` if the `msg.sender` for this call is not authorized.\",\"stakeInfo\":\"The `StakeInfo` structure.\"}},\"penalizeRelayManager(address,address,uint256)\":{\"params\":{\"amount\":\"A total amount of penalty to be withdrawn from stake.\",\"beneficiary\":\"The address that receives part of the penalty amount.\",\"relayManager\":\"The address of a Relay Manager to be penalized.\"}},\"setRelayManagerOwner(address)\":{\"params\":{\"owner\":\"- owner of the relay (as configured off-chain)\"}},\"stakeForRelayManager(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens to be taken from the relayOwner and locked in the StakeManager as a stake\",\"relayManager\":\"The address that represents a stake entry and controls relay registrations on relay hubs\",\"token\":\"The address of an ERC-20 token that is used by the relayManager as a stake\",\"unstakeDelay\":\"The number of seconds to elapse before an owner can retrieve the stake after calling `unlock`\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"unauthorizeHubByOwner(address,address)\":{\"params\":{\"relayHub\":\"The address of a `RelayHub` to be unauthorized.\",\"relayManager\":\"The address of a Relay Manager.\"}},\"unlockStake(address)\":{\"params\":{\"relayManager\":\"The address of a Relay Manager whose stake is to be unlocked.\"}},\"versionSM()\":{\"returns\":{\"_0\":\"a SemVer-compliant version of the `StakeManager` contract.\"}},\"withdrawStake(address)\":{\"params\":{\"relayManager\":\"The address of a Relay Manager whose stake is to be withdrawn.\"}}},\"title\":\"The StakeManager Interface\",\"version\":1},\"userdoc\":{\"events\":{\"AbandonedRelayManagerStakeEscheated(address,address,address,uint256)\":{\"notice\":\"Emitted when the stake of an abandoned relayer has been confiscated and transferred to the `devAddress`.\"},\"BurnAddressSet(address)\":{\"notice\":\"Emitted when a `burnAddress` is changed.\"},\"DevAddressSet(address)\":{\"notice\":\"Emitted when a `devAddress` is changed.\"},\"HubAuthorized(address,address)\":{\"notice\":\"Emitted when a `relayManager` adds a new `RelayHub` to a list of authorized.\"},\"HubUnauthorized(address,address,uint256)\":{\"notice\":\"Emitted when a `relayManager` removes a `RelayHub` from a list of authorized.\"},\"OwnerSet(address,address)\":{\"notice\":\"Emitted when a `relayManager` sets its `owner`. This is necessary to prevent stake hijacking.\"},\"RelayServerAbandoned(address,uint256)\":{\"notice\":\"Emitted if Relay Server is inactive for an `abandonmentDelay` and contract owner initiates its removal.\"},\"RelayServerKeepalive(address,uint256)\":{\"notice\":\"Emitted to indicate an action performed by a relay server to prevent it from being marked as abandoned.\"},\"StakeAdded(address,address,address,uint256,uint256)\":{\"notice\":\"Emitted when a `stake` or `unstakeDelay` are initialized or increased.\"},\"StakePenalized(address,address,address,uint256)\":{\"notice\":\"Emitted when an authorized `RelayHub` penalizes a `relayManager`.\"},\"StakeUnlocked(address,address,uint256)\":{\"notice\":\"Emitted once a stake is scheduled for withdrawal.\"},\"StakeWithdrawn(address,address,address,uint256)\":{\"notice\":\"Emitted when owner withdraws `relayManager` funds.\"}},\"kind\":\"user\",\"methods\":{\"authorizeHubByManager(address)\":{\"notice\":\"Same as `authorizeHubByOwner` but can be called by the RelayManager itself.\"},\"authorizeHubByOwner(address,address)\":{\"notice\":\"Add the `RelayHub` to a list of authorized by this Relay Manager. This allows the RelayHub to penalize this Relay Manager. The `RelayHub` cannot trust a Relay it cannot penalize.\"},\"escheatAbandonedRelayStake(address)\":{\"notice\":\"If more than `abandonmentDelay` has passed since the last Keepalive transaction, and relay manager has been marked as abandoned, and after that more that `escheatmentDelay` have passed, entire stake and balance will be taken from this relay.\"},\"getStakeInfo(address)\":{\"notice\":\"Get the stake details information for the given Relay Manager.\"},\"isRelayEscheatable(address)\":{\"notice\":\"Check if the Relay Manager can be considered abandoned or not. Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise.\"},\"markRelayAbandoned(address)\":{\"notice\":\"Allows the contract owner to set the given `relayManager` as abandoned after a configurable delay. Its entire stake and balance will be taken from a relay if it does not respond to being marked as abandoned.\"},\"penalizeRelayManager(address,address,uint256)\":{\"notice\":\"Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns part of stake on the way.\"},\"setBurnAddress(address)\":{\"notice\":\"Change the address that will receive the 'burned' part of the penalized stake. This is done to prevent malicious Relay Server from penalizing itself and breaking even.\"},\"setDevAddress(address)\":{\"notice\":\"Change the address that will receive the 'abandoned' stake. This is done to prevent Relay Servers that lost their keys from losing access to funds.\"},\"setRelayManagerOwner(address)\":{\"notice\":\"Set the owner of a Relay Manager. Called only by the RelayManager itself. Note that owners cannot transfer ownership - if the entry already exists, reverts.\"},\"stakeForRelayManager(address,address,uint256,uint256)\":{\"notice\":\"Put a stake for a relayManager and set its unstake delay. Only the owner can call this function. If the entry does not exist, reverts. The owner must give allowance of the ERC-20 token to the StakeManager before calling this method. It is the RelayHub who has a configurable list of minimum stakes per token. StakeManager accepts all tokens.\"},\"unauthorizeHubByManager(address)\":{\"notice\":\"Same as `unauthorizeHubByOwner` but can be called by the RelayManager itself.\"},\"unauthorizeHubByOwner(address,address)\":{\"notice\":\"Remove the `RelayHub` from a list of authorized by this Relay Manager.\"},\"unlockStake(address)\":{\"notice\":\"Schedule the unlocking of the stake. The `unstakeDelay` must pass before owner can call `withdrawStake`.\"},\"updateRelayKeepaliveTime(address)\":{\"notice\":\"Sets a new `keepaliveTime` for the given `relayManager`, preventing it from being marked as abandoned. Can be called by an authorized `RelayHub` or by the `relayOwner` address.\"},\"withdrawStake(address)\":{\"notice\":\"Withdraw the unlocked stake.\"}},\"notice\":\"In order to prevent an attacker from registering a large number of unresponsive relays, the GSN requires the Relay Server to maintain a permanently locked stake in the system before being able to register.Also, in some cases the behavior of a Relay Server may be found to be illegal by a `Penalizer` contract. In such case, the stake will never be returned to the Relay Server operator and will be slashed.An implementation of this interface is tasked with keeping Relay Servers' stakes, made in any ERC-20 token. Note that the `RelayHub` chooses which ERC-20 tokens to support and how much stake is needed.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol\":\"IStakeManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol\":{\"keccak256\":\"0x27535f3677a2c373862d8672725632fdcabdf5d0e784f80c158063f55be68b5a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://904ad156bf1cac29f9e13619ee0ee41e602b6cf1fafedea0a1d3be7a7accc654\",\"dweb:/ipfs/QmXVy5gfYXSWYFrkmL2u9jctZDXupiNWbif5tFVpVZMPww\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
    "bytecode": "0x",
    "deployedBytecode": "0x",
    "immutableReferences": {},
    "sourceMap": "",
    "deployedSourceMap": "",
    "source": "pragma solidity >=0.7.6;\npragma abicoder v2;\n\n// SPDX-License-Identifier: GPL-3.0-only\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\n\n/**\n * @title The StakeManager Interface\n * @notice In order to prevent an attacker from registering a large number of unresponsive relays, the GSN requires\n * the Relay Server to maintain a permanently locked stake in the system before being able to register.\n *\n * @notice Also, in some cases the behavior of a Relay Server may be found to be illegal by a `Penalizer` contract.\n * In such case, the stake will never be returned to the Relay Server operator and will be slashed.\n *\n * @notice An implementation of this interface is tasked with keeping Relay Servers' stakes, made in any ERC-20 token.\n * Note that the `RelayHub` chooses which ERC-20 tokens to support and how much stake is needed.\n */\ninterface IStakeManager is IERC165 {\n\n    /// @notice Emitted when a `stake` or `unstakeDelay` are initialized or increased.\n    event StakeAdded(\n        address indexed relayManager,\n        address indexed owner,\n        IERC20 token,\n        uint256 stake,\n        uint256 unstakeDelay\n    );\n\n    /// @notice Emitted once a stake is scheduled for withdrawal.\n    event StakeUnlocked(\n        address indexed relayManager,\n        address indexed owner,\n        uint256 withdrawTime\n    );\n\n    /// @notice Emitted when owner withdraws `relayManager` funds.\n    event StakeWithdrawn(\n        address indexed relayManager,\n        address indexed owner,\n        IERC20 token,\n        uint256 amount\n    );\n\n    /// @notice Emitted when an authorized `RelayHub` penalizes a `relayManager`.\n    event StakePenalized(\n        address indexed relayManager,\n        address indexed beneficiary,\n        IERC20 token,\n        uint256 reward\n    );\n\n    /// @notice Emitted when a `relayManager` adds a new `RelayHub` to a list of authorized.\n    event HubAuthorized(\n        address indexed relayManager,\n        address indexed relayHub\n    );\n\n    /// @notice Emitted when a `relayManager` removes a `RelayHub` from a list of authorized.\n    event HubUnauthorized(\n        address indexed relayManager,\n        address indexed relayHub,\n        uint256 removalTime\n    );\n\n    /// @notice Emitted when a `relayManager` sets its `owner`. This is necessary to prevent stake hijacking.\n    event OwnerSet(\n        address indexed relayManager,\n        address indexed owner\n    );\n\n    /// @notice Emitted when a `burnAddress` is changed.\n    event BurnAddressSet(\n        address indexed burnAddress\n    );\n\n    /// @notice Emitted when a `devAddress` is changed.\n    event DevAddressSet(\n        address indexed devAddress\n    );\n\n    /// @notice Emitted if Relay Server is inactive for an `abandonmentDelay` and contract owner initiates its removal.\n    event RelayServerAbandoned(\n        address indexed relayManager,\n        uint256 abandonedTime\n    );\n\n    /// @notice Emitted to indicate an action performed by a relay server to prevent it from being marked as abandoned.\n    event RelayServerKeepalive(\n        address indexed relayManager,\n        uint256 keepaliveTime\n    );\n\n    /// @notice Emitted when the stake of an abandoned relayer has been confiscated and transferred to the `devAddress`.\n    event AbandonedRelayManagerStakeEscheated(\n        address indexed relayManager,\n        address indexed owner,\n        IERC20 token,\n        uint256 amount\n    );\n\n    /**\n     * @param stake - amount of ether staked for this relay\n     * @param unstakeDelay - number of seconds to elapse before the owner can retrieve the stake after calling 'unlock'\n     * @param withdrawTime - timestamp in seconds when 'withdraw' will be callable, or zero if the unlock has not been called\n     * @param owner - address that receives revenue and manages relayManager's stake\n     */\n    struct StakeInfo {\n        uint256 stake;\n        uint256 unstakeDelay;\n        uint256 withdrawTime;\n        uint256 abandonedTime;\n        uint256 keepaliveTime;\n        IERC20 token;\n        address owner;\n    }\n\n    struct RelayHubInfo {\n        uint256 removalTime;\n    }\n\n    /**\n     * @param devAddress - the address that will receive the 'abandoned' stake\n     * @param abandonmentDelay - the amount of time after which the relay can be marked as 'abandoned'\n     * @param escheatmentDelay - the amount of time after which the abandoned relay's stake and balance may be withdrawn to the `devAddress`\n     */\n    struct AbandonedRelayServerConfig {\n        address devAddress;\n        uint256 abandonmentDelay;\n        uint256 escheatmentDelay;\n    }\n\n    /**\n     * @notice Set the owner of a Relay Manager. Called only by the RelayManager itself.\n     * Note that owners cannot transfer ownership - if the entry already exists, reverts.\n     * @param owner - owner of the relay (as configured off-chain)\n     */\n    function setRelayManagerOwner(address owner) external;\n\n    /**\n     * @notice Put a stake for a relayManager and set its unstake delay.\n     * Only the owner can call this function. If the entry does not exist, reverts.\n     * The owner must give allowance of the ERC-20 token to the StakeManager before calling this method.\n     * It is the RelayHub who has a configurable list of minimum stakes per token. StakeManager accepts all tokens.\n     * @param token The address of an ERC-20 token that is used by the relayManager as a stake\n     * @param relayManager The address that represents a stake entry and controls relay registrations on relay hubs\n     * @param unstakeDelay The number of seconds to elapse before an owner can retrieve the stake after calling `unlock`\n     * @param amount The amount of tokens to be taken from the relayOwner and locked in the StakeManager as a stake\n     */\n    function stakeForRelayManager(IERC20 token, address relayManager, uint256 unstakeDelay, uint256 amount) external;\n\n    /**\n     * @notice Schedule the unlocking of the stake. The `unstakeDelay` must pass before owner can call `withdrawStake`.\n     * @param relayManager The address of a Relay Manager whose stake is to be unlocked.\n     */\n    function unlockStake(address relayManager) external;\n    /**\n     * @notice Withdraw the unlocked stake.\n     * @param relayManager The address of a Relay Manager whose stake is to be withdrawn.\n     */\n    function withdrawStake(address relayManager) external;\n\n    /**\n     * @notice Add the `RelayHub` to a list of authorized by this Relay Manager.\n     * This allows the RelayHub to penalize this Relay Manager. The `RelayHub` cannot trust a Relay it cannot penalize.\n     * @param relayManager The address of a Relay Manager whose stake is to be authorized for the new `RelayHub`.\n     * @param relayHub The address of a `RelayHub` to be authorized.\n     */\n    function authorizeHubByOwner(address relayManager, address relayHub) external;\n\n    /**\n     * @notice Same as `authorizeHubByOwner` but can be called by the RelayManager itself.\n     */\n    function authorizeHubByManager(address relayHub) external;\n\n    /**\n     * @notice Remove the `RelayHub` from a list of authorized by this Relay Manager.\n     * @param relayManager The address of a Relay Manager.\n     * @param relayHub The address of a `RelayHub` to be unauthorized.\n     */\n    function unauthorizeHubByOwner(address relayManager, address relayHub) external;\n\n    /**\n     * @notice Same as `unauthorizeHubByOwner` but can be called by the RelayManager itself.\n     */\n    function unauthorizeHubByManager(address relayHub) external;\n\n    /**\n     * Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns part of stake on the way.\n     * @param relayManager The address of a Relay Manager to be penalized.\n     * @param beneficiary The address that receives part of the penalty amount.\n     * @param amount A total amount of penalty to be withdrawn from stake.\n     */\n    function penalizeRelayManager(address relayManager, address beneficiary, uint256 amount) external;\n\n    /**\n     * @notice Allows the contract owner to set the given `relayManager` as abandoned after a configurable delay.\n     * Its entire stake and balance will be taken from a relay if it does not respond to being marked as abandoned.\n     */\n    function markRelayAbandoned(address relayManager) external;\n\n    /**\n     * @notice If more than `abandonmentDelay` has passed since the last Keepalive transaction, and relay manager\n     * has been marked as abandoned, and after that more that `escheatmentDelay` have passed, entire stake and\n     * balance will be taken from this relay.\n     */\n    function escheatAbandonedRelayStake(address relayManager) external;\n\n    /**\n     * @notice Sets a new `keepaliveTime` for the given `relayManager`, preventing it from being marked as abandoned.\n     * Can be called by an authorized `RelayHub` or by the `relayOwner` address.\n     */\n    function updateRelayKeepaliveTime(address relayManager) external;\n\n    /**\n     * @notice Check if the Relay Manager can be considered abandoned or not.\n     * Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise.\n     */\n    function isRelayEscheatable(address relayManager) external view returns(bool);\n\n    /**\n     * @notice Get the stake details information for the given Relay Manager.\n     * @param relayManager The address of a Relay Manager.\n     * @return stakeInfo The `StakeInfo` structure.\n     * @return isSenderAuthorizedHub `true` if the `msg.sender` for this call was a `RelayHub` that is authorized now.\n     * `false` if the `msg.sender` for this call is not authorized.\n     */\n    function getStakeInfo(address relayManager) external view returns (StakeInfo memory stakeInfo, bool isSenderAuthorizedHub);\n\n    /**\n     * @return The maximum unstake delay this `StakeManger` allows. This is to prevent locking money forever by mistake.\n     */\n    function getMaxUnstakeDelay() external view returns (uint256);\n\n    /**\n     * @notice Change the address that will receive the 'burned' part of the penalized stake.\n     * This is done to prevent malicious Relay Server from penalizing itself and breaking even.\n     */\n    function setBurnAddress(address _burnAddress) external;\n\n    /**\n     * @return The address that will receive the 'burned' part of the penalized stake.\n     */\n    function getBurnAddress() external view returns (address);\n\n    /**\n     * @notice Change the address that will receive the 'abandoned' stake.\n     * This is done to prevent Relay Servers that lost their keys from losing access to funds.\n     */\n    function setDevAddress(address _burnAddress) external;\n\n    /**\n     * @return The structure that contains all configuration values for the 'abandoned' stake.\n     */\n    function getAbandonedRelayServerConfig() external view returns (AbandonedRelayServerConfig memory);\n\n    /**\n     * @return the block number in which the contract has been deployed.\n     */\n    function getCreationBlock() external view returns (uint256);\n\n    /**\n     * @return a SemVer-compliant version of the `StakeManager` contract.\n     */\n    function versionSM() external view returns (string memory);\n}",
    "sourcePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol",
    "ast": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol",
        "exportedSymbols": {
            "ERC165": [
                12146
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IStakeManager": [
                6284
            ]
        },
        "id": 6285,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 5996,
                "literals": [
                    "solidity",
                    ">=",
                    "0.7",
                    ".6"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:24:18"
            },
            {
                "id": 5997,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "25:19:18"
            },
            {
                "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
                "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
                "id": 5998,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 6285,
                "sourceUnit": 10850,
                "src": "88:56:18",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "file": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "id": 5999,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 6285,
                "sourceUnit": 12147,
                "src": "145:64:18",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 6001,
                            "name": "IERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12352,
                            "src": "941:7:18"
                        },
                        "id": 6002,
                        "nodeType": "InheritanceSpecifier",
                        "src": "941:7:18"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "interface",
                "documentation": {
                    "id": 6000,
                    "nodeType": "StructuredDocumentation",
                    "src": "211:702:18",
                    "text": " @title The StakeManager Interface\n @notice In order to prevent an attacker from registering a large number of unresponsive relays, the GSN requires\n the Relay Server to maintain a permanently locked stake in the system before being able to register.\n @notice Also, in some cases the behavior of a Relay Server may be found to be illegal by a `Penalizer` contract.\n In such case, the stake will never be returned to the Relay Server operator and will be slashed.\n @notice An implementation of this interface is tasked with keeping Relay Servers' stakes, made in any ERC-20 token.\n Note that the `RelayHub` chooses which ERC-20 tokens to support and how much stake is needed."
                },
                "fullyImplemented": false,
                "id": 6284,
                "linearizedBaseContracts": [
                    6284,
                    12352
                ],
                "name": "IStakeManager",
                "nameLocation": "924:13:18",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6003,
                            "nodeType": "StructuredDocumentation",
                            "src": "956:82:18",
                            "text": "@notice Emitted when a `stake` or `unstakeDelay` are initialized or increased."
                        },
                        "id": 6016,
                        "name": "StakeAdded",
                        "nameLocation": "1049:10:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6015,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6005,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "1085:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6016,
                                    "src": "1069:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6004,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1069:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6007,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "1123:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6016,
                                    "src": "1107:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6006,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1107:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6010,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "1145:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6016,
                                    "src": "1138:12:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 6009,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6008,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "1138:6:18"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "1138:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6012,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "stake",
                                    "nameLocation": "1168:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6016,
                                    "src": "1160:13:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6011,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1160:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6014,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "unstakeDelay",
                                    "nameLocation": "1191:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6016,
                                    "src": "1183:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6013,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1183:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1059:150:18"
                        },
                        "src": "1043:167:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6017,
                            "nodeType": "StructuredDocumentation",
                            "src": "1216:61:18",
                            "text": "@notice Emitted once a stake is scheduled for withdrawal."
                        },
                        "id": 6025,
                        "name": "StakeUnlocked",
                        "nameLocation": "1288:13:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6024,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6019,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "1327:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6025,
                                    "src": "1311:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6018,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1311:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6021,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "1365:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6025,
                                    "src": "1349:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6020,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1349:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6023,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "withdrawTime",
                                    "nameLocation": "1388:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6025,
                                    "src": "1380:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6022,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1380:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1301:105:18"
                        },
                        "src": "1282:125:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6026,
                            "nodeType": "StructuredDocumentation",
                            "src": "1413:62:18",
                            "text": "@notice Emitted when owner withdraws `relayManager` funds."
                        },
                        "id": 6037,
                        "name": "StakeWithdrawn",
                        "nameLocation": "1486:14:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6036,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6028,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "1526:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6037,
                                    "src": "1510:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6027,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1510:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6030,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "1564:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6037,
                                    "src": "1548:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6029,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1548:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6033,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "1586:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6037,
                                    "src": "1579:12:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 6032,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6031,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "1579:6:18"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "1579:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6035,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "1609:6:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6037,
                                    "src": "1601:14:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6034,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1601:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1500:121:18"
                        },
                        "src": "1480:142:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6038,
                            "nodeType": "StructuredDocumentation",
                            "src": "1628:77:18",
                            "text": "@notice Emitted when an authorized `RelayHub` penalizes a `relayManager`."
                        },
                        "id": 6049,
                        "name": "StakePenalized",
                        "nameLocation": "1716:14:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6048,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6040,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "1756:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6049,
                                    "src": "1740:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6039,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1740:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6042,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nameLocation": "1794:11:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6049,
                                    "src": "1778:27:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6041,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1778:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6045,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "1822:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6049,
                                    "src": "1815:12:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 6044,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6043,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "1815:6:18"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "1815:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6047,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "reward",
                                    "nameLocation": "1845:6:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6049,
                                    "src": "1837:14:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6046,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1837:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1730:127:18"
                        },
                        "src": "1710:148:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6050,
                            "nodeType": "StructuredDocumentation",
                            "src": "1864:88:18",
                            "text": "@notice Emitted when a `relayManager` adds a new `RelayHub` to a list of authorized."
                        },
                        "id": 6056,
                        "name": "HubAuthorized",
                        "nameLocation": "1963:13:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6055,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6052,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "2002:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6056,
                                    "src": "1986:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6051,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1986:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6054,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "2040:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6056,
                                    "src": "2024:24:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6053,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2024:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1976:78:18"
                        },
                        "src": "1957:98:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6057,
                            "nodeType": "StructuredDocumentation",
                            "src": "2061:89:18",
                            "text": "@notice Emitted when a `relayManager` removes a `RelayHub` from a list of authorized."
                        },
                        "id": 6065,
                        "name": "HubUnauthorized",
                        "nameLocation": "2161:15:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6064,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6059,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "2202:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6065,
                                    "src": "2186:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6058,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2186:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6061,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "2240:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6065,
                                    "src": "2224:24:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6060,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2224:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6063,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "removalTime",
                                    "nameLocation": "2266:11:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6065,
                                    "src": "2258:19:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6062,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2258:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2176:107:18"
                        },
                        "src": "2155:129:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6066,
                            "nodeType": "StructuredDocumentation",
                            "src": "2290:105:18",
                            "text": "@notice Emitted when a `relayManager` sets its `owner`. This is necessary to prevent stake hijacking."
                        },
                        "id": 6072,
                        "name": "OwnerSet",
                        "nameLocation": "2406:8:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6071,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6068,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "2440:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6072,
                                    "src": "2424:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6067,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2424:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6070,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "2478:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6072,
                                    "src": "2462:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6069,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2462:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2414:75:18"
                        },
                        "src": "2400:90:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6073,
                            "nodeType": "StructuredDocumentation",
                            "src": "2496:52:18",
                            "text": "@notice Emitted when a `burnAddress` is changed."
                        },
                        "id": 6077,
                        "name": "BurnAddressSet",
                        "nameLocation": "2559:14:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6076,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6075,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "burnAddress",
                                    "nameLocation": "2599:11:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6077,
                                    "src": "2583:27:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6074,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2583:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2573:43:18"
                        },
                        "src": "2553:64:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6078,
                            "nodeType": "StructuredDocumentation",
                            "src": "2623:51:18",
                            "text": "@notice Emitted when a `devAddress` is changed."
                        },
                        "id": 6082,
                        "name": "DevAddressSet",
                        "nameLocation": "2685:13:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6081,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6080,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "devAddress",
                                    "nameLocation": "2724:10:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6082,
                                    "src": "2708:26:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6079,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2708:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2698:42:18"
                        },
                        "src": "2679:62:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6083,
                            "nodeType": "StructuredDocumentation",
                            "src": "2747:115:18",
                            "text": "@notice Emitted if Relay Server is inactive for an `abandonmentDelay` and contract owner initiates its removal."
                        },
                        "id": 6089,
                        "name": "RelayServerAbandoned",
                        "nameLocation": "2873:20:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6088,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6085,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "2919:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6089,
                                    "src": "2903:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6084,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2903:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6087,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "abandonedTime",
                                    "nameLocation": "2949:13:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6089,
                                    "src": "2941:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6086,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2941:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2893:75:18"
                        },
                        "src": "2867:102:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6090,
                            "nodeType": "StructuredDocumentation",
                            "src": "2975:115:18",
                            "text": "@notice Emitted to indicate an action performed by a relay server to prevent it from being marked as abandoned."
                        },
                        "id": 6096,
                        "name": "RelayServerKeepalive",
                        "nameLocation": "3101:20:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6095,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6092,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "3147:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6096,
                                    "src": "3131:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6091,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3131:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6094,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "keepaliveTime",
                                    "nameLocation": "3177:13:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6096,
                                    "src": "3169:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6093,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3169:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3121:75:18"
                        },
                        "src": "3095:102:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6097,
                            "nodeType": "StructuredDocumentation",
                            "src": "3203:116:18",
                            "text": "@notice Emitted when the stake of an abandoned relayer has been confiscated and transferred to the `devAddress`."
                        },
                        "id": 6108,
                        "name": "AbandonedRelayManagerStakeEscheated",
                        "nameLocation": "3330:35:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6107,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6099,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "3391:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6108,
                                    "src": "3375:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6098,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3375:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6101,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "3429:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6108,
                                    "src": "3413:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6100,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3413:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6104,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "3451:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6108,
                                    "src": "3444:12:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 6103,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6102,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "3444:6:18"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "3444:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6106,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "3474:6:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6108,
                                    "src": "3466:14:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6105,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3466:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3365:121:18"
                        },
                        "src": "3324:163:18"
                    },
                    {
                        "canonicalName": "IStakeManager.StakeInfo",
                        "id": 6124,
                        "members": [
                            {
                                "constant": false,
                                "id": 6110,
                                "mutability": "mutable",
                                "name": "stake",
                                "nameLocation": "3935:5:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "3927:13:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6109,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3927:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6112,
                                "mutability": "mutable",
                                "name": "unstakeDelay",
                                "nameLocation": "3958:12:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "3950:20:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6111,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3950:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6114,
                                "mutability": "mutable",
                                "name": "withdrawTime",
                                "nameLocation": "3988:12:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "3980:20:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6113,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3980:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6116,
                                "mutability": "mutable",
                                "name": "abandonedTime",
                                "nameLocation": "4018:13:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "4010:21:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6115,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4010:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6118,
                                "mutability": "mutable",
                                "name": "keepaliveTime",
                                "nameLocation": "4049:13:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "4041:21:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6117,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4041:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6121,
                                "mutability": "mutable",
                                "name": "token",
                                "nameLocation": "4079:5:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "4072:12:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                    "typeString": "contract IERC20"
                                },
                                "typeName": {
                                    "id": 6120,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                        "id": 6119,
                                        "name": "IERC20",
                                        "nodeType": "IdentifierPath",
                                        "referencedDeclaration": 10849,
                                        "src": "4072:6:18"
                                    },
                                    "referencedDeclaration": 10849,
                                    "src": "4072:6:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6123,
                                "mutability": "mutable",
                                "name": "owner",
                                "nameLocation": "4102:5:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "4094:13:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                },
                                "typeName": {
                                    "id": 6122,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4094:7:18",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "StakeInfo",
                        "nameLocation": "3907:9:18",
                        "nodeType": "StructDefinition",
                        "scope": 6284,
                        "src": "3900:214:18",
                        "visibility": "public"
                    },
                    {
                        "canonicalName": "IStakeManager.RelayHubInfo",
                        "id": 6127,
                        "members": [
                            {
                                "constant": false,
                                "id": 6126,
                                "mutability": "mutable",
                                "name": "removalTime",
                                "nameLocation": "4158:11:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6127,
                                "src": "4150:19:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6125,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4150:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "RelayHubInfo",
                        "nameLocation": "4127:12:18",
                        "nodeType": "StructDefinition",
                        "scope": 6284,
                        "src": "4120:56:18",
                        "visibility": "public"
                    },
                    {
                        "canonicalName": "IStakeManager.AbandonedRelayServerConfig",
                        "id": 6134,
                        "members": [
                            {
                                "constant": false,
                                "id": 6129,
                                "mutability": "mutable",
                                "name": "devAddress",
                                "nameLocation": "4573:10:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6134,
                                "src": "4565:18:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                },
                                "typeName": {
                                    "id": 6128,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4565:7:18",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6131,
                                "mutability": "mutable",
                                "name": "abandonmentDelay",
                                "nameLocation": "4601:16:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6134,
                                "src": "4593:24:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6130,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4593:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6133,
                                "mutability": "mutable",
                                "name": "escheatmentDelay",
                                "nameLocation": "4635:16:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6134,
                                "src": "4627:24:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6132,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4627:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "AbandonedRelayServerConfig",
                        "nameLocation": "4528:26:18",
                        "nodeType": "StructDefinition",
                        "scope": 6284,
                        "src": "4521:137:18",
                        "visibility": "public"
                    },
                    {
                        "documentation": {
                            "id": 6135,
                            "nodeType": "StructuredDocumentation",
                            "src": "4664:257:18",
                            "text": " @notice Set the owner of a Relay Manager. Called only by the RelayManager itself.\n Note that owners cannot transfer ownership - if the entry already exists, reverts.\n @param owner - owner of the relay (as configured off-chain)"
                        },
                        "functionSelector": "fece3dd4",
                        "id": 6140,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setRelayManagerOwner",
                        "nameLocation": "4935:20:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6138,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6137,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "4964:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6140,
                                    "src": "4956:13:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6136,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4956:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4955:15:18"
                        },
                        "returnParameters": {
                            "id": 6139,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4979:0:18"
                        },
                        "scope": 6284,
                        "src": "4926:54:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6141,
                            "nodeType": "StructuredDocumentation",
                            "src": "4986:837:18",
                            "text": " @notice Put a stake for a relayManager and set its unstake delay.\n Only the owner can call this function. If the entry does not exist, reverts.\n The owner must give allowance of the ERC-20 token to the StakeManager before calling this method.\n It is the RelayHub who has a configurable list of minimum stakes per token. StakeManager accepts all tokens.\n @param token The address of an ERC-20 token that is used by the relayManager as a stake\n @param relayManager The address that represents a stake entry and controls relay registrations on relay hubs\n @param unstakeDelay The number of seconds to elapse before an owner can retrieve the stake after calling `unlock`\n @param amount The amount of tokens to be taken from the relayOwner and locked in the StakeManager as a stake"
                        },
                        "functionSelector": "14080fac",
                        "id": 6153,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "stakeForRelayManager",
                        "nameLocation": "5837:20:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6151,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6144,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "5865:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6153,
                                    "src": "5858:12:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 6143,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6142,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "5858:6:18"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "5858:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6146,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "5880:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6153,
                                    "src": "5872:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6145,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5872:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6148,
                                    "mutability": "mutable",
                                    "name": "unstakeDelay",
                                    "nameLocation": "5902:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6153,
                                    "src": "5894:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6147,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5894:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6150,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "5924:6:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6153,
                                    "src": "5916:14:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6149,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5916:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5857:74:18"
                        },
                        "returnParameters": {
                            "id": 6152,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5940:0:18"
                        },
                        "scope": 6284,
                        "src": "5828:113:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6154,
                            "nodeType": "StructuredDocumentation",
                            "src": "5947:220:18",
                            "text": " @notice Schedule the unlocking of the stake. The `unstakeDelay` must pass before owner can call `withdrawStake`.\n @param relayManager The address of a Relay Manager whose stake is to be unlocked."
                        },
                        "functionSelector": "4a1ce599",
                        "id": 6159,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "unlockStake",
                        "nameLocation": "6181:11:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6157,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6156,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6201:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6159,
                                    "src": "6193:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6155,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6193:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6192:22:18"
                        },
                        "returnParameters": {
                            "id": 6158,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6223:0:18"
                        },
                        "scope": 6284,
                        "src": "6172:52:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6160,
                            "nodeType": "StructuredDocumentation",
                            "src": "6229:145:18",
                            "text": " @notice Withdraw the unlocked stake.\n @param relayManager The address of a Relay Manager whose stake is to be withdrawn."
                        },
                        "functionSelector": "c23a5cea",
                        "id": 6165,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawStake",
                        "nameLocation": "6388:13:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6163,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6162,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6410:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6165,
                                    "src": "6402:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6161,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6402:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6401:22:18"
                        },
                        "returnParameters": {
                            "id": 6164,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6432:0:18"
                        },
                        "scope": 6284,
                        "src": "6379:54:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6166,
                            "nodeType": "StructuredDocumentation",
                            "src": "6439:395:18",
                            "text": " @notice Add the `RelayHub` to a list of authorized by this Relay Manager.\n This allows the RelayHub to penalize this Relay Manager. The `RelayHub` cannot trust a Relay it cannot penalize.\n @param relayManager The address of a Relay Manager whose stake is to be authorized for the new `RelayHub`.\n @param relayHub The address of a `RelayHub` to be authorized."
                        },
                        "functionSelector": "7835d296",
                        "id": 6173,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "authorizeHubByOwner",
                        "nameLocation": "6848:19:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6171,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6168,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6876:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6173,
                                    "src": "6868:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6167,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6868:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6170,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "6898:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6173,
                                    "src": "6890:16:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6169,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6890:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6867:40:18"
                        },
                        "returnParameters": {
                            "id": 6172,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6916:0:18"
                        },
                        "scope": 6284,
                        "src": "6839:78:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6174,
                            "nodeType": "StructuredDocumentation",
                            "src": "6923:102:18",
                            "text": " @notice Same as `authorizeHubByOwner` but can be called by the RelayManager itself."
                        },
                        "functionSelector": "d48a9d43",
                        "id": 6179,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "authorizeHubByManager",
                        "nameLocation": "7039:21:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6177,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6176,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7069:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6179,
                                    "src": "7061:16:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6175,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7061:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7060:18:18"
                        },
                        "returnParameters": {
                            "id": 6178,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7087:0:18"
                        },
                        "scope": 6284,
                        "src": "7030:58:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6180,
                            "nodeType": "StructuredDocumentation",
                            "src": "7094:227:18",
                            "text": " @notice Remove the `RelayHub` from a list of authorized by this Relay Manager.\n @param relayManager The address of a Relay Manager.\n @param relayHub The address of a `RelayHub` to be unauthorized."
                        },
                        "functionSelector": "f48f8ac7",
                        "id": 6187,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "unauthorizeHubByOwner",
                        "nameLocation": "7335:21:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6185,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6182,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "7365:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6187,
                                    "src": "7357:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6181,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7357:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6184,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7387:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6187,
                                    "src": "7379:16:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6183,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7379:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7356:40:18"
                        },
                        "returnParameters": {
                            "id": 6186,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7405:0:18"
                        },
                        "scope": 6284,
                        "src": "7326:80:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6188,
                            "nodeType": "StructuredDocumentation",
                            "src": "7412:104:18",
                            "text": " @notice Same as `unauthorizeHubByOwner` but can be called by the RelayManager itself."
                        },
                        "functionSelector": "f9bce311",
                        "id": 6193,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "unauthorizeHubByManager",
                        "nameLocation": "7530:23:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6191,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6190,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7562:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6193,
                                    "src": "7554:16:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6189,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7554:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7553:18:18"
                        },
                        "returnParameters": {
                            "id": 6192,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7580:0:18"
                        },
                        "scope": 6284,
                        "src": "7521:60:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6194,
                            "nodeType": "StructuredDocumentation",
                            "src": "7587:361:18",
                            "text": " Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns part of stake on the way.\n @param relayManager The address of a Relay Manager to be penalized.\n @param beneficiary The address that receives part of the penalty amount.\n @param amount A total amount of penalty to be withdrawn from stake."
                        },
                        "functionSelector": "09a08af4",
                        "id": 6203,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalizeRelayManager",
                        "nameLocation": "7962:20:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6201,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6196,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "7991:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6203,
                                    "src": "7983:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6195,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7983:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6198,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nameLocation": "8013:11:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6203,
                                    "src": "8005:19:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6197,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8005:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6200,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "8034:6:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6203,
                                    "src": "8026:14:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6199,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8026:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7982:59:18"
                        },
                        "returnParameters": {
                            "id": 6202,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "8050:0:18"
                        },
                        "scope": 6284,
                        "src": "7953:98:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6204,
                            "nodeType": "StructuredDocumentation",
                            "src": "8057:241:18",
                            "text": " @notice Allows the contract owner to set the given `relayManager` as abandoned after a configurable delay.\n Its entire stake and balance will be taken from a relay if it does not respond to being marked as abandoned."
                        },
                        "functionSelector": "71fa1faf",
                        "id": 6209,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "markRelayAbandoned",
                        "nameLocation": "8312:18:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6207,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6206,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "8339:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6209,
                                    "src": "8331:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6205,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8331:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8330:22:18"
                        },
                        "returnParameters": {
                            "id": 6208,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "8361:0:18"
                        },
                        "scope": 6284,
                        "src": "8303:59:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6210,
                            "nodeType": "StructuredDocumentation",
                            "src": "8368:282:18",
                            "text": " @notice If more than `abandonmentDelay` has passed since the last Keepalive transaction, and relay manager\n has been marked as abandoned, and after that more that `escheatmentDelay` have passed, entire stake and\n balance will be taken from this relay."
                        },
                        "functionSelector": "a9aadcd7",
                        "id": 6215,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "escheatAbandonedRelayStake",
                        "nameLocation": "8664:26:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6213,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6212,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "8699:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6215,
                                    "src": "8691:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6211,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8691:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8690:22:18"
                        },
                        "returnParameters": {
                            "id": 6214,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "8721:0:18"
                        },
                        "scope": 6284,
                        "src": "8655:67:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6216,
                            "nodeType": "StructuredDocumentation",
                            "src": "8728:210:18",
                            "text": " @notice Sets a new `keepaliveTime` for the given `relayManager`, preventing it from being marked as abandoned.\n Can be called by an authorized `RelayHub` or by the `relayOwner` address."
                        },
                        "functionSelector": "46dcbf0b",
                        "id": 6221,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "updateRelayKeepaliveTime",
                        "nameLocation": "8952:24:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6219,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6218,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "8985:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6221,
                                    "src": "8977:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6217,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8977:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8976:22:18"
                        },
                        "returnParameters": {
                            "id": 6220,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "9007:0:18"
                        },
                        "scope": 6284,
                        "src": "8943:65:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6222,
                            "nodeType": "StructuredDocumentation",
                            "src": "9014:206:18",
                            "text": " @notice Check if the Relay Manager can be considered abandoned or not.\n Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise."
                        },
                        "functionSelector": "39622167",
                        "id": 6229,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayEscheatable",
                        "nameLocation": "9234:18:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6225,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6224,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "9261:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6229,
                                    "src": "9253:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6223,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9253:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9252:22:18"
                        },
                        "returnParameters": {
                            "id": 6228,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6227,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6229,
                                    "src": "9297:4:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6226,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9297:4:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9296:6:18"
                        },
                        "scope": 6284,
                        "src": "9225:78:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6230,
                            "nodeType": "StructuredDocumentation",
                            "src": "9309:387:18",
                            "text": " @notice Get the stake details information for the given Relay Manager.\n @param relayManager The address of a Relay Manager.\n @return stakeInfo The `StakeInfo` structure.\n @return isSenderAuthorizedHub `true` if the `msg.sender` for this call was a `RelayHub` that is authorized now.\n `false` if the `msg.sender` for this call is not authorized."
                        },
                        "functionSelector": "c3453153",
                        "id": 6240,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getStakeInfo",
                        "nameLocation": "9710:12:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6233,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6232,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "9731:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6240,
                                    "src": "9723:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6231,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9723:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9722:22:18"
                        },
                        "returnParameters": {
                            "id": 6239,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6236,
                                    "mutability": "mutable",
                                    "name": "stakeInfo",
                                    "nameLocation": "9785:9:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6240,
                                    "src": "9768:26:18",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                        "typeString": "struct IStakeManager.StakeInfo"
                                    },
                                    "typeName": {
                                        "id": 6235,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6234,
                                            "name": "StakeInfo",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6124,
                                            "src": "9768:9:18"
                                        },
                                        "referencedDeclaration": 6124,
                                        "src": "9768:9:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                            "typeString": "struct IStakeManager.StakeInfo"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6238,
                                    "mutability": "mutable",
                                    "name": "isSenderAuthorizedHub",
                                    "nameLocation": "9801:21:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6240,
                                    "src": "9796:26:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6237,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9796:4:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9767:56:18"
                        },
                        "scope": 6284,
                        "src": "9701:123:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6241,
                            "nodeType": "StructuredDocumentation",
                            "src": "9830:132:18",
                            "text": " @return The maximum unstake delay this `StakeManger` allows. This is to prevent locking money forever by mistake."
                        },
                        "functionSelector": "afcb7752",
                        "id": 6246,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getMaxUnstakeDelay",
                        "nameLocation": "9976:18:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6242,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "9994:2:18"
                        },
                        "returnParameters": {
                            "id": 6245,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6244,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6246,
                                    "src": "10020:7:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6243,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10020:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10019:9:18"
                        },
                        "scope": 6284,
                        "src": "9967:62:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6247,
                            "nodeType": "StructuredDocumentation",
                            "src": "10035:201:18",
                            "text": " @notice Change the address that will receive the 'burned' part of the penalized stake.\n This is done to prevent malicious Relay Server from penalizing itself and breaking even."
                        },
                        "functionSelector": "4b0e7216",
                        "id": 6252,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setBurnAddress",
                        "nameLocation": "10250:14:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6250,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6249,
                                    "mutability": "mutable",
                                    "name": "_burnAddress",
                                    "nameLocation": "10273:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6252,
                                    "src": "10265:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6248,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10265:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10264:22:18"
                        },
                        "returnParameters": {
                            "id": 6251,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10295:0:18"
                        },
                        "scope": 6284,
                        "src": "10241:55:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6253,
                            "nodeType": "StructuredDocumentation",
                            "src": "10302:98:18",
                            "text": " @return The address that will receive the 'burned' part of the penalized stake."
                        },
                        "functionSelector": "38b39d29",
                        "id": 6258,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getBurnAddress",
                        "nameLocation": "10414:14:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6254,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10428:2:18"
                        },
                        "returnParameters": {
                            "id": 6257,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6256,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6258,
                                    "src": "10454:7:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6255,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10454:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10453:9:18"
                        },
                        "scope": 6284,
                        "src": "10405:58:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6259,
                            "nodeType": "StructuredDocumentation",
                            "src": "10469:181:18",
                            "text": " @notice Change the address that will receive the 'abandoned' stake.\n This is done to prevent Relay Servers that lost their keys from losing access to funds."
                        },
                        "functionSelector": "d0d41fe1",
                        "id": 6264,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setDevAddress",
                        "nameLocation": "10664:13:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6262,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6261,
                                    "mutability": "mutable",
                                    "name": "_burnAddress",
                                    "nameLocation": "10686:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6264,
                                    "src": "10678:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6260,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10678:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10677:22:18"
                        },
                        "returnParameters": {
                            "id": 6263,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10708:0:18"
                        },
                        "scope": 6284,
                        "src": "10655:54:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6265,
                            "nodeType": "StructuredDocumentation",
                            "src": "10715:106:18",
                            "text": " @return The structure that contains all configuration values for the 'abandoned' stake."
                        },
                        "functionSelector": "c5f06743",
                        "id": 6271,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getAbandonedRelayServerConfig",
                        "nameLocation": "10835:29:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6266,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10864:2:18"
                        },
                        "returnParameters": {
                            "id": 6270,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6269,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6271,
                                    "src": "10890:33:18",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_memory_ptr",
                                        "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                                    },
                                    "typeName": {
                                        "id": 6268,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6267,
                                            "name": "AbandonedRelayServerConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6134,
                                            "src": "10890:26:18"
                                        },
                                        "referencedDeclaration": 6134,
                                        "src": "10890:26:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage_ptr",
                                            "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10889:35:18"
                        },
                        "scope": 6284,
                        "src": "10826:99:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6272,
                            "nodeType": "StructuredDocumentation",
                            "src": "10931:84:18",
                            "text": " @return the block number in which the contract has been deployed."
                        },
                        "functionSelector": "20ffd56d",
                        "id": 6277,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getCreationBlock",
                        "nameLocation": "11029:16:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6273,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11045:2:18"
                        },
                        "returnParameters": {
                            "id": 6276,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6275,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6277,
                                    "src": "11071:7:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6274,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11071:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11070:9:18"
                        },
                        "scope": 6284,
                        "src": "11020:60:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6278,
                            "nodeType": "StructuredDocumentation",
                            "src": "11086:85:18",
                            "text": " @return a SemVer-compliant version of the `StakeManager` contract."
                        },
                        "functionSelector": "47116c6e",
                        "id": 6283,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionSM",
                        "nameLocation": "11185:9:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6279,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11194:2:18"
                        },
                        "returnParameters": {
                            "id": 6282,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6281,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6283,
                                    "src": "11220:13:18",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 6280,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11220:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11219:15:18"
                        },
                        "scope": 6284,
                        "src": "11176:59:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 6285,
                "src": "914:10323:18",
                "usedErrors": []
            }
        ],
        "src": "0:11237:18"
    },
    "legacyAST": {
        "absolutePath": "/Users/alexf/gsn2/packages/contracts/solpp/interfaces/IStakeManager.sol",
        "exportedSymbols": {
            "ERC165": [
                12146
            ],
            "IERC165": [
                12352
            ],
            "IERC20": [
                10849
            ],
            "IStakeManager": [
                6284
            ]
        },
        "id": 6285,
        "license": "GPL-3.0-only",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 5996,
                "literals": [
                    "solidity",
                    ">=",
                    "0.7",
                    ".6"
                ],
                "nodeType": "PragmaDirective",
                "src": "0:24:18"
            },
            {
                "id": 5997,
                "literals": [
                    "abicoder",
                    "v2"
                ],
                "nodeType": "PragmaDirective",
                "src": "25:19:18"
            },
            {
                "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
                "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
                "id": 5998,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 6285,
                "sourceUnit": 10850,
                "src": "88:56:18",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "file": "@openzeppelin/contracts/utils/introspection/ERC165.sol",
                "id": 5999,
                "nameLocation": "-1:-1:-1",
                "nodeType": "ImportDirective",
                "scope": 6285,
                "sourceUnit": 12147,
                "src": "145:64:18",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 6001,
                            "name": "IERC165",
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 12352,
                            "src": "941:7:18"
                        },
                        "id": 6002,
                        "nodeType": "InheritanceSpecifier",
                        "src": "941:7:18"
                    }
                ],
                "contractDependencies": [],
                "contractKind": "interface",
                "documentation": {
                    "id": 6000,
                    "nodeType": "StructuredDocumentation",
                    "src": "211:702:18",
                    "text": " @title The StakeManager Interface\n @notice In order to prevent an attacker from registering a large number of unresponsive relays, the GSN requires\n the Relay Server to maintain a permanently locked stake in the system before being able to register.\n @notice Also, in some cases the behavior of a Relay Server may be found to be illegal by a `Penalizer` contract.\n In such case, the stake will never be returned to the Relay Server operator and will be slashed.\n @notice An implementation of this interface is tasked with keeping Relay Servers' stakes, made in any ERC-20 token.\n Note that the `RelayHub` chooses which ERC-20 tokens to support and how much stake is needed."
                },
                "fullyImplemented": false,
                "id": 6284,
                "linearizedBaseContracts": [
                    6284,
                    12352
                ],
                "name": "IStakeManager",
                "nameLocation": "924:13:18",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6003,
                            "nodeType": "StructuredDocumentation",
                            "src": "956:82:18",
                            "text": "@notice Emitted when a `stake` or `unstakeDelay` are initialized or increased."
                        },
                        "id": 6016,
                        "name": "StakeAdded",
                        "nameLocation": "1049:10:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6015,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6005,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "1085:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6016,
                                    "src": "1069:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6004,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1069:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6007,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "1123:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6016,
                                    "src": "1107:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6006,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1107:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6010,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "1145:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6016,
                                    "src": "1138:12:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 6009,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6008,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "1138:6:18"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "1138:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6012,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "stake",
                                    "nameLocation": "1168:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6016,
                                    "src": "1160:13:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6011,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1160:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6014,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "unstakeDelay",
                                    "nameLocation": "1191:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6016,
                                    "src": "1183:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6013,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1183:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1059:150:18"
                        },
                        "src": "1043:167:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6017,
                            "nodeType": "StructuredDocumentation",
                            "src": "1216:61:18",
                            "text": "@notice Emitted once a stake is scheduled for withdrawal."
                        },
                        "id": 6025,
                        "name": "StakeUnlocked",
                        "nameLocation": "1288:13:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6024,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6019,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "1327:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6025,
                                    "src": "1311:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6018,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1311:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6021,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "1365:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6025,
                                    "src": "1349:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6020,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1349:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6023,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "withdrawTime",
                                    "nameLocation": "1388:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6025,
                                    "src": "1380:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6022,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1380:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1301:105:18"
                        },
                        "src": "1282:125:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6026,
                            "nodeType": "StructuredDocumentation",
                            "src": "1413:62:18",
                            "text": "@notice Emitted when owner withdraws `relayManager` funds."
                        },
                        "id": 6037,
                        "name": "StakeWithdrawn",
                        "nameLocation": "1486:14:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6036,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6028,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "1526:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6037,
                                    "src": "1510:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6027,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1510:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6030,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "1564:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6037,
                                    "src": "1548:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6029,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1548:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6033,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "1586:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6037,
                                    "src": "1579:12:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 6032,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6031,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "1579:6:18"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "1579:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6035,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "1609:6:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6037,
                                    "src": "1601:14:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6034,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1601:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1500:121:18"
                        },
                        "src": "1480:142:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6038,
                            "nodeType": "StructuredDocumentation",
                            "src": "1628:77:18",
                            "text": "@notice Emitted when an authorized `RelayHub` penalizes a `relayManager`."
                        },
                        "id": 6049,
                        "name": "StakePenalized",
                        "nameLocation": "1716:14:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6048,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6040,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "1756:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6049,
                                    "src": "1740:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6039,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1740:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6042,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nameLocation": "1794:11:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6049,
                                    "src": "1778:27:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6041,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1778:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6045,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "1822:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6049,
                                    "src": "1815:12:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 6044,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6043,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "1815:6:18"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "1815:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6047,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "reward",
                                    "nameLocation": "1845:6:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6049,
                                    "src": "1837:14:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6046,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1837:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1730:127:18"
                        },
                        "src": "1710:148:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6050,
                            "nodeType": "StructuredDocumentation",
                            "src": "1864:88:18",
                            "text": "@notice Emitted when a `relayManager` adds a new `RelayHub` to a list of authorized."
                        },
                        "id": 6056,
                        "name": "HubAuthorized",
                        "nameLocation": "1963:13:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6055,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6052,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "2002:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6056,
                                    "src": "1986:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6051,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1986:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6054,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "2040:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6056,
                                    "src": "2024:24:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6053,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2024:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1976:78:18"
                        },
                        "src": "1957:98:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6057,
                            "nodeType": "StructuredDocumentation",
                            "src": "2061:89:18",
                            "text": "@notice Emitted when a `relayManager` removes a `RelayHub` from a list of authorized."
                        },
                        "id": 6065,
                        "name": "HubUnauthorized",
                        "nameLocation": "2161:15:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6064,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6059,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "2202:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6065,
                                    "src": "2186:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6058,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2186:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6061,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "2240:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6065,
                                    "src": "2224:24:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6060,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2224:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6063,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "removalTime",
                                    "nameLocation": "2266:11:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6065,
                                    "src": "2258:19:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6062,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2258:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2176:107:18"
                        },
                        "src": "2155:129:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6066,
                            "nodeType": "StructuredDocumentation",
                            "src": "2290:105:18",
                            "text": "@notice Emitted when a `relayManager` sets its `owner`. This is necessary to prevent stake hijacking."
                        },
                        "id": 6072,
                        "name": "OwnerSet",
                        "nameLocation": "2406:8:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6071,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6068,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "2440:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6072,
                                    "src": "2424:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6067,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2424:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6070,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "2478:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6072,
                                    "src": "2462:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6069,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2462:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2414:75:18"
                        },
                        "src": "2400:90:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6073,
                            "nodeType": "StructuredDocumentation",
                            "src": "2496:52:18",
                            "text": "@notice Emitted when a `burnAddress` is changed."
                        },
                        "id": 6077,
                        "name": "BurnAddressSet",
                        "nameLocation": "2559:14:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6076,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6075,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "burnAddress",
                                    "nameLocation": "2599:11:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6077,
                                    "src": "2583:27:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6074,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2583:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2573:43:18"
                        },
                        "src": "2553:64:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6078,
                            "nodeType": "StructuredDocumentation",
                            "src": "2623:51:18",
                            "text": "@notice Emitted when a `devAddress` is changed."
                        },
                        "id": 6082,
                        "name": "DevAddressSet",
                        "nameLocation": "2685:13:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6081,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6080,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "devAddress",
                                    "nameLocation": "2724:10:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6082,
                                    "src": "2708:26:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6079,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2708:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2698:42:18"
                        },
                        "src": "2679:62:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6083,
                            "nodeType": "StructuredDocumentation",
                            "src": "2747:115:18",
                            "text": "@notice Emitted if Relay Server is inactive for an `abandonmentDelay` and contract owner initiates its removal."
                        },
                        "id": 6089,
                        "name": "RelayServerAbandoned",
                        "nameLocation": "2873:20:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6088,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6085,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "2919:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6089,
                                    "src": "2903:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6084,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2903:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6087,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "abandonedTime",
                                    "nameLocation": "2949:13:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6089,
                                    "src": "2941:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6086,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2941:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2893:75:18"
                        },
                        "src": "2867:102:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6090,
                            "nodeType": "StructuredDocumentation",
                            "src": "2975:115:18",
                            "text": "@notice Emitted to indicate an action performed by a relay server to prevent it from being marked as abandoned."
                        },
                        "id": 6096,
                        "name": "RelayServerKeepalive",
                        "nameLocation": "3101:20:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6095,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6092,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "3147:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6096,
                                    "src": "3131:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6091,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3131:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6094,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "keepaliveTime",
                                    "nameLocation": "3177:13:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6096,
                                    "src": "3169:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6093,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3169:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3121:75:18"
                        },
                        "src": "3095:102:18"
                    },
                    {
                        "anonymous": false,
                        "documentation": {
                            "id": 6097,
                            "nodeType": "StructuredDocumentation",
                            "src": "3203:116:18",
                            "text": "@notice Emitted when the stake of an abandoned relayer has been confiscated and transferred to the `devAddress`."
                        },
                        "id": 6108,
                        "name": "AbandonedRelayManagerStakeEscheated",
                        "nameLocation": "3330:35:18",
                        "nodeType": "EventDefinition",
                        "parameters": {
                            "id": 6107,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6099,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "3391:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6108,
                                    "src": "3375:28:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6098,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3375:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6101,
                                    "indexed": true,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "3429:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6108,
                                    "src": "3413:21:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6100,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3413:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6104,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "3451:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6108,
                                    "src": "3444:12:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 6103,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6102,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "3444:6:18"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "3444:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6106,
                                    "indexed": false,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "3474:6:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6108,
                                    "src": "3466:14:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6105,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3466:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3365:121:18"
                        },
                        "src": "3324:163:18"
                    },
                    {
                        "canonicalName": "IStakeManager.StakeInfo",
                        "id": 6124,
                        "members": [
                            {
                                "constant": false,
                                "id": 6110,
                                "mutability": "mutable",
                                "name": "stake",
                                "nameLocation": "3935:5:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "3927:13:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6109,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3927:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6112,
                                "mutability": "mutable",
                                "name": "unstakeDelay",
                                "nameLocation": "3958:12:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "3950:20:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6111,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3950:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6114,
                                "mutability": "mutable",
                                "name": "withdrawTime",
                                "nameLocation": "3988:12:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "3980:20:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6113,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3980:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6116,
                                "mutability": "mutable",
                                "name": "abandonedTime",
                                "nameLocation": "4018:13:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "4010:21:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6115,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4010:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6118,
                                "mutability": "mutable",
                                "name": "keepaliveTime",
                                "nameLocation": "4049:13:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "4041:21:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6117,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4041:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6121,
                                "mutability": "mutable",
                                "name": "token",
                                "nameLocation": "4079:5:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "4072:12:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$10849",
                                    "typeString": "contract IERC20"
                                },
                                "typeName": {
                                    "id": 6120,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                        "id": 6119,
                                        "name": "IERC20",
                                        "nodeType": "IdentifierPath",
                                        "referencedDeclaration": 10849,
                                        "src": "4072:6:18"
                                    },
                                    "referencedDeclaration": 10849,
                                    "src": "4072:6:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6123,
                                "mutability": "mutable",
                                "name": "owner",
                                "nameLocation": "4102:5:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6124,
                                "src": "4094:13:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                },
                                "typeName": {
                                    "id": 6122,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4094:7:18",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "StakeInfo",
                        "nameLocation": "3907:9:18",
                        "nodeType": "StructDefinition",
                        "scope": 6284,
                        "src": "3900:214:18",
                        "visibility": "public"
                    },
                    {
                        "canonicalName": "IStakeManager.RelayHubInfo",
                        "id": 6127,
                        "members": [
                            {
                                "constant": false,
                                "id": 6126,
                                "mutability": "mutable",
                                "name": "removalTime",
                                "nameLocation": "4158:11:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6127,
                                "src": "4150:19:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6125,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4150:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "RelayHubInfo",
                        "nameLocation": "4127:12:18",
                        "nodeType": "StructDefinition",
                        "scope": 6284,
                        "src": "4120:56:18",
                        "visibility": "public"
                    },
                    {
                        "canonicalName": "IStakeManager.AbandonedRelayServerConfig",
                        "id": 6134,
                        "members": [
                            {
                                "constant": false,
                                "id": 6129,
                                "mutability": "mutable",
                                "name": "devAddress",
                                "nameLocation": "4573:10:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6134,
                                "src": "4565:18:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                },
                                "typeName": {
                                    "id": 6128,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4565:7:18",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6131,
                                "mutability": "mutable",
                                "name": "abandonmentDelay",
                                "nameLocation": "4601:16:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6134,
                                "src": "4593:24:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6130,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4593:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            },
                            {
                                "constant": false,
                                "id": 6133,
                                "mutability": "mutable",
                                "name": "escheatmentDelay",
                                "nameLocation": "4635:16:18",
                                "nodeType": "VariableDeclaration",
                                "scope": 6134,
                                "src": "4627:24:18",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                },
                                "typeName": {
                                    "id": 6132,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4627:7:18",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                },
                                "visibility": "internal"
                            }
                        ],
                        "name": "AbandonedRelayServerConfig",
                        "nameLocation": "4528:26:18",
                        "nodeType": "StructDefinition",
                        "scope": 6284,
                        "src": "4521:137:18",
                        "visibility": "public"
                    },
                    {
                        "documentation": {
                            "id": 6135,
                            "nodeType": "StructuredDocumentation",
                            "src": "4664:257:18",
                            "text": " @notice Set the owner of a Relay Manager. Called only by the RelayManager itself.\n Note that owners cannot transfer ownership - if the entry already exists, reverts.\n @param owner - owner of the relay (as configured off-chain)"
                        },
                        "functionSelector": "fece3dd4",
                        "id": 6140,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setRelayManagerOwner",
                        "nameLocation": "4935:20:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6138,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6137,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nameLocation": "4964:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6140,
                                    "src": "4956:13:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6136,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4956:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4955:15:18"
                        },
                        "returnParameters": {
                            "id": 6139,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "4979:0:18"
                        },
                        "scope": 6284,
                        "src": "4926:54:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6141,
                            "nodeType": "StructuredDocumentation",
                            "src": "4986:837:18",
                            "text": " @notice Put a stake for a relayManager and set its unstake delay.\n Only the owner can call this function. If the entry does not exist, reverts.\n The owner must give allowance of the ERC-20 token to the StakeManager before calling this method.\n It is the RelayHub who has a configurable list of minimum stakes per token. StakeManager accepts all tokens.\n @param token The address of an ERC-20 token that is used by the relayManager as a stake\n @param relayManager The address that represents a stake entry and controls relay registrations on relay hubs\n @param unstakeDelay The number of seconds to elapse before an owner can retrieve the stake after calling `unlock`\n @param amount The amount of tokens to be taken from the relayOwner and locked in the StakeManager as a stake"
                        },
                        "functionSelector": "14080fac",
                        "id": 6153,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "stakeForRelayManager",
                        "nameLocation": "5837:20:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6151,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6144,
                                    "mutability": "mutable",
                                    "name": "token",
                                    "nameLocation": "5865:5:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6153,
                                    "src": "5858:12:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_IERC20_$10849",
                                        "typeString": "contract IERC20"
                                    },
                                    "typeName": {
                                        "id": 6143,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6142,
                                            "name": "IERC20",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 10849,
                                            "src": "5858:6:18"
                                        },
                                        "referencedDeclaration": 10849,
                                        "src": "5858:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_IERC20_$10849",
                                            "typeString": "contract IERC20"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6146,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "5880:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6153,
                                    "src": "5872:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6145,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5872:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6148,
                                    "mutability": "mutable",
                                    "name": "unstakeDelay",
                                    "nameLocation": "5902:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6153,
                                    "src": "5894:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6147,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5894:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6150,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "5924:6:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6153,
                                    "src": "5916:14:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6149,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5916:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5857:74:18"
                        },
                        "returnParameters": {
                            "id": 6152,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "5940:0:18"
                        },
                        "scope": 6284,
                        "src": "5828:113:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6154,
                            "nodeType": "StructuredDocumentation",
                            "src": "5947:220:18",
                            "text": " @notice Schedule the unlocking of the stake. The `unstakeDelay` must pass before owner can call `withdrawStake`.\n @param relayManager The address of a Relay Manager whose stake is to be unlocked."
                        },
                        "functionSelector": "4a1ce599",
                        "id": 6159,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "unlockStake",
                        "nameLocation": "6181:11:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6157,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6156,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6201:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6159,
                                    "src": "6193:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6155,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6193:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6192:22:18"
                        },
                        "returnParameters": {
                            "id": 6158,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6223:0:18"
                        },
                        "scope": 6284,
                        "src": "6172:52:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6160,
                            "nodeType": "StructuredDocumentation",
                            "src": "6229:145:18",
                            "text": " @notice Withdraw the unlocked stake.\n @param relayManager The address of a Relay Manager whose stake is to be withdrawn."
                        },
                        "functionSelector": "c23a5cea",
                        "id": 6165,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "withdrawStake",
                        "nameLocation": "6388:13:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6163,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6162,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6410:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6165,
                                    "src": "6402:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6161,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6402:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6401:22:18"
                        },
                        "returnParameters": {
                            "id": 6164,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6432:0:18"
                        },
                        "scope": 6284,
                        "src": "6379:54:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6166,
                            "nodeType": "StructuredDocumentation",
                            "src": "6439:395:18",
                            "text": " @notice Add the `RelayHub` to a list of authorized by this Relay Manager.\n This allows the RelayHub to penalize this Relay Manager. The `RelayHub` cannot trust a Relay it cannot penalize.\n @param relayManager The address of a Relay Manager whose stake is to be authorized for the new `RelayHub`.\n @param relayHub The address of a `RelayHub` to be authorized."
                        },
                        "functionSelector": "7835d296",
                        "id": 6173,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "authorizeHubByOwner",
                        "nameLocation": "6848:19:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6171,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6168,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "6876:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6173,
                                    "src": "6868:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6167,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6868:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6170,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "6898:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6173,
                                    "src": "6890:16:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6169,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6890:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6867:40:18"
                        },
                        "returnParameters": {
                            "id": 6172,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "6916:0:18"
                        },
                        "scope": 6284,
                        "src": "6839:78:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6174,
                            "nodeType": "StructuredDocumentation",
                            "src": "6923:102:18",
                            "text": " @notice Same as `authorizeHubByOwner` but can be called by the RelayManager itself."
                        },
                        "functionSelector": "d48a9d43",
                        "id": 6179,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "authorizeHubByManager",
                        "nameLocation": "7039:21:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6177,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6176,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7069:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6179,
                                    "src": "7061:16:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6175,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7061:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7060:18:18"
                        },
                        "returnParameters": {
                            "id": 6178,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7087:0:18"
                        },
                        "scope": 6284,
                        "src": "7030:58:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6180,
                            "nodeType": "StructuredDocumentation",
                            "src": "7094:227:18",
                            "text": " @notice Remove the `RelayHub` from a list of authorized by this Relay Manager.\n @param relayManager The address of a Relay Manager.\n @param relayHub The address of a `RelayHub` to be unauthorized."
                        },
                        "functionSelector": "f48f8ac7",
                        "id": 6187,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "unauthorizeHubByOwner",
                        "nameLocation": "7335:21:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6185,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6182,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "7365:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6187,
                                    "src": "7357:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6181,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7357:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6184,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7387:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6187,
                                    "src": "7379:16:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6183,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7379:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7356:40:18"
                        },
                        "returnParameters": {
                            "id": 6186,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7405:0:18"
                        },
                        "scope": 6284,
                        "src": "7326:80:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6188,
                            "nodeType": "StructuredDocumentation",
                            "src": "7412:104:18",
                            "text": " @notice Same as `unauthorizeHubByOwner` but can be called by the RelayManager itself."
                        },
                        "functionSelector": "f9bce311",
                        "id": 6193,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "unauthorizeHubByManager",
                        "nameLocation": "7530:23:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6191,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6190,
                                    "mutability": "mutable",
                                    "name": "relayHub",
                                    "nameLocation": "7562:8:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6193,
                                    "src": "7554:16:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6189,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7554:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7553:18:18"
                        },
                        "returnParameters": {
                            "id": 6192,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7580:0:18"
                        },
                        "scope": 6284,
                        "src": "7521:60:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6194,
                            "nodeType": "StructuredDocumentation",
                            "src": "7587:361:18",
                            "text": " Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns part of stake on the way.\n @param relayManager The address of a Relay Manager to be penalized.\n @param beneficiary The address that receives part of the penalty amount.\n @param amount A total amount of penalty to be withdrawn from stake."
                        },
                        "functionSelector": "09a08af4",
                        "id": 6203,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "penalizeRelayManager",
                        "nameLocation": "7962:20:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6201,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6196,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "7991:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6203,
                                    "src": "7983:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6195,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7983:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6198,
                                    "mutability": "mutable",
                                    "name": "beneficiary",
                                    "nameLocation": "8013:11:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6203,
                                    "src": "8005:19:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6197,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8005:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6200,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nameLocation": "8034:6:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6203,
                                    "src": "8026:14:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6199,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8026:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7982:59:18"
                        },
                        "returnParameters": {
                            "id": 6202,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "8050:0:18"
                        },
                        "scope": 6284,
                        "src": "7953:98:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6204,
                            "nodeType": "StructuredDocumentation",
                            "src": "8057:241:18",
                            "text": " @notice Allows the contract owner to set the given `relayManager` as abandoned after a configurable delay.\n Its entire stake and balance will be taken from a relay if it does not respond to being marked as abandoned."
                        },
                        "functionSelector": "71fa1faf",
                        "id": 6209,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "markRelayAbandoned",
                        "nameLocation": "8312:18:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6207,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6206,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "8339:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6209,
                                    "src": "8331:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6205,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8331:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8330:22:18"
                        },
                        "returnParameters": {
                            "id": 6208,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "8361:0:18"
                        },
                        "scope": 6284,
                        "src": "8303:59:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6210,
                            "nodeType": "StructuredDocumentation",
                            "src": "8368:282:18",
                            "text": " @notice If more than `abandonmentDelay` has passed since the last Keepalive transaction, and relay manager\n has been marked as abandoned, and after that more that `escheatmentDelay` have passed, entire stake and\n balance will be taken from this relay."
                        },
                        "functionSelector": "a9aadcd7",
                        "id": 6215,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "escheatAbandonedRelayStake",
                        "nameLocation": "8664:26:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6213,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6212,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "8699:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6215,
                                    "src": "8691:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6211,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8691:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8690:22:18"
                        },
                        "returnParameters": {
                            "id": 6214,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "8721:0:18"
                        },
                        "scope": 6284,
                        "src": "8655:67:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6216,
                            "nodeType": "StructuredDocumentation",
                            "src": "8728:210:18",
                            "text": " @notice Sets a new `keepaliveTime` for the given `relayManager`, preventing it from being marked as abandoned.\n Can be called by an authorized `RelayHub` or by the `relayOwner` address."
                        },
                        "functionSelector": "46dcbf0b",
                        "id": 6221,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "updateRelayKeepaliveTime",
                        "nameLocation": "8952:24:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6219,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6218,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "8985:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6221,
                                    "src": "8977:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6217,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8977:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8976:22:18"
                        },
                        "returnParameters": {
                            "id": 6220,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "9007:0:18"
                        },
                        "scope": 6284,
                        "src": "8943:65:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6222,
                            "nodeType": "StructuredDocumentation",
                            "src": "9014:206:18",
                            "text": " @notice Check if the Relay Manager can be considered abandoned or not.\n Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise."
                        },
                        "functionSelector": "39622167",
                        "id": 6229,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "isRelayEscheatable",
                        "nameLocation": "9234:18:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6225,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6224,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "9261:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6229,
                                    "src": "9253:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6223,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9253:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9252:22:18"
                        },
                        "returnParameters": {
                            "id": 6228,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6227,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6229,
                                    "src": "9297:4:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6226,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9297:4:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9296:6:18"
                        },
                        "scope": 6284,
                        "src": "9225:78:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6230,
                            "nodeType": "StructuredDocumentation",
                            "src": "9309:387:18",
                            "text": " @notice Get the stake details information for the given Relay Manager.\n @param relayManager The address of a Relay Manager.\n @return stakeInfo The `StakeInfo` structure.\n @return isSenderAuthorizedHub `true` if the `msg.sender` for this call was a `RelayHub` that is authorized now.\n `false` if the `msg.sender` for this call is not authorized."
                        },
                        "functionSelector": "c3453153",
                        "id": 6240,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getStakeInfo",
                        "nameLocation": "9710:12:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6233,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6232,
                                    "mutability": "mutable",
                                    "name": "relayManager",
                                    "nameLocation": "9731:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6240,
                                    "src": "9723:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6231,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9723:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9722:22:18"
                        },
                        "returnParameters": {
                            "id": 6239,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6236,
                                    "mutability": "mutable",
                                    "name": "stakeInfo",
                                    "nameLocation": "9785:9:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6240,
                                    "src": "9768:26:18",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_StakeInfo_$6124_memory_ptr",
                                        "typeString": "struct IStakeManager.StakeInfo"
                                    },
                                    "typeName": {
                                        "id": 6235,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6234,
                                            "name": "StakeInfo",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6124,
                                            "src": "9768:9:18"
                                        },
                                        "referencedDeclaration": 6124,
                                        "src": "9768:9:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_StakeInfo_$6124_storage_ptr",
                                            "typeString": "struct IStakeManager.StakeInfo"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6238,
                                    "mutability": "mutable",
                                    "name": "isSenderAuthorizedHub",
                                    "nameLocation": "9801:21:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6240,
                                    "src": "9796:26:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 6237,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9796:4:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9767:56:18"
                        },
                        "scope": 6284,
                        "src": "9701:123:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6241,
                            "nodeType": "StructuredDocumentation",
                            "src": "9830:132:18",
                            "text": " @return The maximum unstake delay this `StakeManger` allows. This is to prevent locking money forever by mistake."
                        },
                        "functionSelector": "afcb7752",
                        "id": 6246,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getMaxUnstakeDelay",
                        "nameLocation": "9976:18:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6242,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "9994:2:18"
                        },
                        "returnParameters": {
                            "id": 6245,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6244,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6246,
                                    "src": "10020:7:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6243,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10020:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10019:9:18"
                        },
                        "scope": 6284,
                        "src": "9967:62:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6247,
                            "nodeType": "StructuredDocumentation",
                            "src": "10035:201:18",
                            "text": " @notice Change the address that will receive the 'burned' part of the penalized stake.\n This is done to prevent malicious Relay Server from penalizing itself and breaking even."
                        },
                        "functionSelector": "4b0e7216",
                        "id": 6252,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setBurnAddress",
                        "nameLocation": "10250:14:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6250,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6249,
                                    "mutability": "mutable",
                                    "name": "_burnAddress",
                                    "nameLocation": "10273:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6252,
                                    "src": "10265:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6248,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10265:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10264:22:18"
                        },
                        "returnParameters": {
                            "id": 6251,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10295:0:18"
                        },
                        "scope": 6284,
                        "src": "10241:55:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6253,
                            "nodeType": "StructuredDocumentation",
                            "src": "10302:98:18",
                            "text": " @return The address that will receive the 'burned' part of the penalized stake."
                        },
                        "functionSelector": "38b39d29",
                        "id": 6258,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getBurnAddress",
                        "nameLocation": "10414:14:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6254,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10428:2:18"
                        },
                        "returnParameters": {
                            "id": 6257,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6256,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6258,
                                    "src": "10454:7:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6255,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10454:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10453:9:18"
                        },
                        "scope": 6284,
                        "src": "10405:58:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6259,
                            "nodeType": "StructuredDocumentation",
                            "src": "10469:181:18",
                            "text": " @notice Change the address that will receive the 'abandoned' stake.\n This is done to prevent Relay Servers that lost their keys from losing access to funds."
                        },
                        "functionSelector": "d0d41fe1",
                        "id": 6264,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "setDevAddress",
                        "nameLocation": "10664:13:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6262,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6261,
                                    "mutability": "mutable",
                                    "name": "_burnAddress",
                                    "nameLocation": "10686:12:18",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6264,
                                    "src": "10678:20:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6260,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10678:7:18",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10677:22:18"
                        },
                        "returnParameters": {
                            "id": 6263,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10708:0:18"
                        },
                        "scope": 6284,
                        "src": "10655:54:18",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6265,
                            "nodeType": "StructuredDocumentation",
                            "src": "10715:106:18",
                            "text": " @return The structure that contains all configuration values for the 'abandoned' stake."
                        },
                        "functionSelector": "c5f06743",
                        "id": 6271,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getAbandonedRelayServerConfig",
                        "nameLocation": "10835:29:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6266,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10864:2:18"
                        },
                        "returnParameters": {
                            "id": 6270,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6269,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6271,
                                    "src": "10890:33:18",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_memory_ptr",
                                        "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                                    },
                                    "typeName": {
                                        "id": 6268,
                                        "nodeType": "UserDefinedTypeName",
                                        "pathNode": {
                                            "id": 6267,
                                            "name": "AbandonedRelayServerConfig",
                                            "nodeType": "IdentifierPath",
                                            "referencedDeclaration": 6134,
                                            "src": "10890:26:18"
                                        },
                                        "referencedDeclaration": 6134,
                                        "src": "10890:26:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_AbandonedRelayServerConfig_$6134_storage_ptr",
                                            "typeString": "struct IStakeManager.AbandonedRelayServerConfig"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10889:35:18"
                        },
                        "scope": 6284,
                        "src": "10826:99:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6272,
                            "nodeType": "StructuredDocumentation",
                            "src": "10931:84:18",
                            "text": " @return the block number in which the contract has been deployed."
                        },
                        "functionSelector": "20ffd56d",
                        "id": 6277,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "getCreationBlock",
                        "nameLocation": "11029:16:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6273,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11045:2:18"
                        },
                        "returnParameters": {
                            "id": 6276,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6275,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6277,
                                    "src": "11071:7:18",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6274,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11071:7:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11070:9:18"
                        },
                        "scope": 6284,
                        "src": "11020:60:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    },
                    {
                        "documentation": {
                            "id": 6278,
                            "nodeType": "StructuredDocumentation",
                            "src": "11086:85:18",
                            "text": " @return a SemVer-compliant version of the `StakeManager` contract."
                        },
                        "functionSelector": "47116c6e",
                        "id": 6283,
                        "implemented": false,
                        "kind": "function",
                        "modifiers": [],
                        "name": "versionSM",
                        "nameLocation": "11185:9:18",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6279,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "11194:2:18"
                        },
                        "returnParameters": {
                            "id": 6282,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6281,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6283,
                                    "src": "11220:13:18",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 6280,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "11220:6:18",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "11219:15:18"
                        },
                        "scope": 6284,
                        "src": "11176:59:18",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "external"
                    }
                ],
                "scope": 6285,
                "src": "914:10323:18",
                "usedErrors": []
            }
        ],
        "src": "0:11237:18"
    },
    "compiler": {
        "name": "solc",
        "version": "0.8.7+commit.e28d00a7.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.1.0",
    "updatedAt": "2023-03-16T16:54:15.211Z",
    "devdoc": {
        "kind": "dev",
        "methods": {
            "authorizeHubByOwner(address,address)": {
                "params": {
                    "relayHub": "The address of a `RelayHub` to be authorized.",
                    "relayManager": "The address of a Relay Manager whose stake is to be authorized for the new `RelayHub`."
                }
            },
            "getAbandonedRelayServerConfig()": {
                "returns": {
                    "_0": "The structure that contains all configuration values for the 'abandoned' stake."
                }
            },
            "getBurnAddress()": {
                "returns": {
                    "_0": "The address that will receive the 'burned' part of the penalized stake."
                }
            },
            "getCreationBlock()": {
                "returns": {
                    "_0": "the block number in which the contract has been deployed."
                }
            },
            "getMaxUnstakeDelay()": {
                "returns": {
                    "_0": "The maximum unstake delay this `StakeManger` allows. This is to prevent locking money forever by mistake."
                }
            },
            "getStakeInfo(address)": {
                "params": {
                    "relayManager": "The address of a Relay Manager."
                },
                "returns": {
                    "isSenderAuthorizedHub": "`true` if the `msg.sender` for this call was a `RelayHub` that is authorized now. `false` if the `msg.sender` for this call is not authorized.",
                    "stakeInfo": "The `StakeInfo` structure."
                }
            },
            "penalizeRelayManager(address,address,uint256)": {
                "params": {
                    "amount": "A total amount of penalty to be withdrawn from stake.",
                    "beneficiary": "The address that receives part of the penalty amount.",
                    "relayManager": "The address of a Relay Manager to be penalized."
                }
            },
            "setRelayManagerOwner(address)": {
                "params": {
                    "owner": "- owner of the relay (as configured off-chain)"
                }
            },
            "stakeForRelayManager(address,address,uint256,uint256)": {
                "params": {
                    "amount": "The amount of tokens to be taken from the relayOwner and locked in the StakeManager as a stake",
                    "relayManager": "The address that represents a stake entry and controls relay registrations on relay hubs",
                    "token": "The address of an ERC-20 token that is used by the relayManager as a stake",
                    "unstakeDelay": "The number of seconds to elapse before an owner can retrieve the stake after calling `unlock`"
                }
            },
            "supportsInterface(bytes4)": {
                "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas."
            },
            "unauthorizeHubByOwner(address,address)": {
                "params": {
                    "relayHub": "The address of a `RelayHub` to be unauthorized.",
                    "relayManager": "The address of a Relay Manager."
                }
            },
            "unlockStake(address)": {
                "params": {
                    "relayManager": "The address of a Relay Manager whose stake is to be unlocked."
                }
            },
            "versionSM()": {
                "returns": {
                    "_0": "a SemVer-compliant version of the `StakeManager` contract."
                }
            },
            "withdrawStake(address)": {
                "params": {
                    "relayManager": "The address of a Relay Manager whose stake is to be withdrawn."
                }
            }
        },
        "title": "The StakeManager Interface",
        "version": 1
    },
    "userdoc": {
        "events": {
            "AbandonedRelayManagerStakeEscheated(address,address,address,uint256)": {
                "notice": "Emitted when the stake of an abandoned relayer has been confiscated and transferred to the `devAddress`."
            },
            "BurnAddressSet(address)": {
                "notice": "Emitted when a `burnAddress` is changed."
            },
            "DevAddressSet(address)": {
                "notice": "Emitted when a `devAddress` is changed."
            },
            "HubAuthorized(address,address)": {
                "notice": "Emitted when a `relayManager` adds a new `RelayHub` to a list of authorized."
            },
            "HubUnauthorized(address,address,uint256)": {
                "notice": "Emitted when a `relayManager` removes a `RelayHub` from a list of authorized."
            },
            "OwnerSet(address,address)": {
                "notice": "Emitted when a `relayManager` sets its `owner`. This is necessary to prevent stake hijacking."
            },
            "RelayServerAbandoned(address,uint256)": {
                "notice": "Emitted if Relay Server is inactive for an `abandonmentDelay` and contract owner initiates its removal."
            },
            "RelayServerKeepalive(address,uint256)": {
                "notice": "Emitted to indicate an action performed by a relay server to prevent it from being marked as abandoned."
            },
            "StakeAdded(address,address,address,uint256,uint256)": {
                "notice": "Emitted when a `stake` or `unstakeDelay` are initialized or increased."
            },
            "StakePenalized(address,address,address,uint256)": {
                "notice": "Emitted when an authorized `RelayHub` penalizes a `relayManager`."
            },
            "StakeUnlocked(address,address,uint256)": {
                "notice": "Emitted once a stake is scheduled for withdrawal."
            },
            "StakeWithdrawn(address,address,address,uint256)": {
                "notice": "Emitted when owner withdraws `relayManager` funds."
            }
        },
        "kind": "user",
        "methods": {
            "authorizeHubByManager(address)": {
                "notice": "Same as `authorizeHubByOwner` but can be called by the RelayManager itself."
            },
            "authorizeHubByOwner(address,address)": {
                "notice": "Add the `RelayHub` to a list of authorized by this Relay Manager. This allows the RelayHub to penalize this Relay Manager. The `RelayHub` cannot trust a Relay it cannot penalize."
            },
            "escheatAbandonedRelayStake(address)": {
                "notice": "If more than `abandonmentDelay` has passed since the last Keepalive transaction, and relay manager has been marked as abandoned, and after that more that `escheatmentDelay` have passed, entire stake and balance will be taken from this relay."
            },
            "getStakeInfo(address)": {
                "notice": "Get the stake details information for the given Relay Manager."
            },
            "isRelayEscheatable(address)": {
                "notice": "Check if the Relay Manager can be considered abandoned or not. Returns true if the stake's abandonment time is in the past including the escheatment delay, false otherwise."
            },
            "markRelayAbandoned(address)": {
                "notice": "Allows the contract owner to set the given `relayManager` as abandoned after a configurable delay. Its entire stake and balance will be taken from a relay if it does not respond to being marked as abandoned."
            },
            "penalizeRelayManager(address,address,uint256)": {
                "notice": "Slash the stake of the relay relayManager. In order to prevent stake kidnapping, burns part of stake on the way."
            },
            "setBurnAddress(address)": {
                "notice": "Change the address that will receive the 'burned' part of the penalized stake. This is done to prevent malicious Relay Server from penalizing itself and breaking even."
            },
            "setDevAddress(address)": {
                "notice": "Change the address that will receive the 'abandoned' stake. This is done to prevent Relay Servers that lost their keys from losing access to funds."
            },
            "setRelayManagerOwner(address)": {
                "notice": "Set the owner of a Relay Manager. Called only by the RelayManager itself. Note that owners cannot transfer ownership - if the entry already exists, reverts."
            },
            "stakeForRelayManager(address,address,uint256,uint256)": {
                "notice": "Put a stake for a relayManager and set its unstake delay. Only the owner can call this function. If the entry does not exist, reverts. The owner must give allowance of the ERC-20 token to the StakeManager before calling this method. It is the RelayHub who has a configurable list of minimum stakes per token. StakeManager accepts all tokens."
            },
            "unauthorizeHubByManager(address)": {
                "notice": "Same as `unauthorizeHubByOwner` but can be called by the RelayManager itself."
            },
            "unauthorizeHubByOwner(address,address)": {
                "notice": "Remove the `RelayHub` from a list of authorized by this Relay Manager."
            },
            "unlockStake(address)": {
                "notice": "Schedule the unlocking of the stake. The `unstakeDelay` must pass before owner can call `withdrawStake`."
            },
            "updateRelayKeepaliveTime(address)": {
                "notice": "Sets a new `keepaliveTime` for the given `relayManager`, preventing it from being marked as abandoned. Can be called by an authorized `RelayHub` or by the `relayOwner` address."
            },
            "withdrawStake(address)": {
                "notice": "Withdraw the unlocked stake."
            }
        },
        "notice": "In order to prevent an attacker from registering a large number of unresponsive relays, the GSN requires the Relay Server to maintain a permanently locked stake in the system before being able to register.Also, in some cases the behavior of a Relay Server may be found to be illegal by a `Penalizer` contract. In such case, the stake will never be returned to the Relay Server operator and will be slashed.An implementation of this interface is tasked with keeping Relay Servers' stakes, made in any ERC-20 token. Note that the `RelayHub` chooses which ERC-20 tokens to support and how much stake is needed.",
        "version": 1
    }
}
